From c4edbc6fe75131690c9f323be333e2d5c12e20df Mon Sep 17 00:00:00 2001 From: "enrico.eth" <85900164+enricobottazzi@users.noreply.github.com> Date: Wed, 6 Sep 2023 19:54:28 +0200 Subject: [PATCH] chore: update on `gen_verifier` scripts (#151) --- .../src/contracts/abi/InclusionVerifier.json | 2 +- .../src/contracts/abi/SolvencyVerifier.json | 2 +- backend/src/contracts/abi/Summa.json | 2 +- backend/src/contracts/deployments.json | 2 +- .../contracts/generated/inclusion_verifier.rs | 4862 +++++++++-------- .../contracts/generated/solvency_verifier.rs | 4194 +++++++------- .../src/contracts/generated/summa_contract.rs | 124 +- contracts/src/InclusionVerifier.sol | 2 +- contracts/src/InclusionVerifier.yul | 78 +- contracts/src/SolvencyVerifier.sol | 2 +- contracts/src/SolvencyVerifier.yul | 66 +- zk_prover/README.md | 10 +- zk_prover/examples/gen_inclusion_verifier.rs | 38 +- zk_prover/examples/gen_solvency_verifier.rs | 37 +- .../inclusion_proof_solidity_calldata.json | 2 +- .../solvency_proof_solidity_calldata.json | 2 +- 16 files changed, 4722 insertions(+), 4703 deletions(-) diff --git a/backend/src/contracts/abi/InclusionVerifier.json b/backend/src/contracts/abi/InclusionVerifier.json index bc936963..788af9b8 100644 --- a/backend/src/contracts/abi/InclusionVerifier.json +++ b/backend/src/contracts/abi/InclusionVerifier.json @@ -1 +1 @@ -{"_format":"hh-sol-artifact-1","contractName":"Verifier","sourceName":"src/InclusionVerifier.sol","abi":[{"inputs":[{"internalType":"uint256[]","name":"pubInputs","type":"uint256[]"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50615467806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004615329565b610057565b604051901515815260200160405180910390f35b60006001610063615252565b6000805160206154128339815191526100d9565b6000805160206153f283398151915280831081831016908380096000805160206153f28339815191528384096000805160206153f283398151915284820990506000805160206153f28339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301527f26c12b9fd7eb1bb33a25341ab4af2db334bf0ac2db5f18a2184820a841f48ea6600083015260208501518060608401526040860151806080850152846101388284610077565b169450505060608501518060a084015260808601518060c08501528461015e8284610077565b169450505060a08501518060e084015260c086015180610100850152846101858284610077565b16945050506101206000830120610120830152610120820151818106610140840152806101608401525060e085015180610180840152610100860151806101a0850152846101d38284610077565b1694505050610120850151806101c0840152610140860151806101e0850152846101fd8284610077565b60a061016087012061020087018190528581066102208801526102408701521694506001915050610260830153602161024083012061026083018190528181066102808401526102a08301526101608501516102c083018190526101808601516102e08401819052846102708284610077565b16945050506101a0850151806103008401526101c0860151806103208501528461029a8284610077565b16945050506101e08501518061034084015261020086015180610360850152846102c48284610077565b169450505061022085015180610380840152610240860151806103a0850152846102ee8284610077565b16945050506101206102a08301206103c08301526103c08201518181066103e0840152806104008401525061026085015180610420840152610280860151806104408501528461033e8284610077565b16945050506102a0850151806104608401526102c086015180610480850152846103688284610077565b16945050506102e0850151806104a0840152610300860151806104c0850152846103928284610077565b1694505050610320850151806104e084015261034086015180610500850152846103bc8284610077565b16945050506103608501518061052084015261038086015180610540850152846103e68284610077565b1694505050610160610400830120610560830152610560820151818106610580840152806105a084015250806103a0860151066105c0830152806103c0860151066105e0830152806103e086015106610600830152806104008601510661062083015280610420860151066106408301528061044086015106610660830152806104608601510661068083015280610480860151066106a0830152806104a0860151066106c0830152806104c0860151066106e0830152806104e086015106610700830152806105008601510661072083015280610520860151066107408301528061054086015106610760830152806105608601510661078083015280610580860151066107a0830152806105a0860151066107c0830152806105c0860151066107e0830152806105e086015106610800830152806106008601510661082083015280610620860151066108408301528061064086015106610860830152806106608601510661088083015280610680860151066108a0830152806106a0860151066108c0830152806106c0860151066108e0830152806106e086015106610900830152806107008601510661092083015280610720860151066109408301528061074086015106610960830152806107608601510661098083015280610780860151066109a0830152806107a0860151066109c0830152806107c0860151066109e0830152806107e086015106610a008301526104806105a0830120610a20830152610a20820151818106610a4084015280610a60840152506001610a808301536021610a60830120610a808301819052818106610aa0840152610ac0830152610800850151610ae08301819052610820860151610b0084018190528461066f8284610077565b16945050506060610ac0830120610b20830152610b20820151818106610b4084015280610b608401525061084085015180610b8084015261086086015180610ba0850152846106be8284610077565b16945050508061058083015161058084015109610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830181905281908009610ce0830181905281908009610d00830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610d0084015108610d20830152807f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610d2084015109610d40830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d4084015109610d60830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff61058084015108610d80830152807f2498c2d3affa1baaf6419dbccb6a054bb87359c02eade5aeacd86c84757b9051610d4084015109610da0830152807f0bcb8b9f3137847ec20ea7f9b61753116fc08e884b0b8ae29709890f7a846fb061058084015108610dc0830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d4084015109610de0830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc61058084015108610e00830152807f28771071ab1633014eae27cfc16d5ebe08a8fe2fc9e85044e4a45f82c14cd825610d4084015109610e20830152807f07ed3e01361b6d2869a21de6c013f99f1f8aea18afd1204c5f3d96112eb327dc61058084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d4084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e61058084015108610e80830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610d4084015109610ea0830152807f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e761058084015108610ec0830152806001610d4084015109610ee0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058084015108610f00830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610d4084015109610f20830152807f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa261058084015108610f40830152610d808201518181610dc085015109905080610f608401528181610e0085015109905080610f808401528181610e4085015109905080610fa08401528181610e8085015109905080610fc08401528181610ec085015109905080610fe08401528181610f00850151099050806110008401528181610f40850151099050806110208401528181610d208501510990508061104084015250602061108083015260206110a083015260206110c08301526110408201516110e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6111008301526000805160206154128339815191526111208301528260016020611060850160c0611080870160055afa141692506110608201516000610d208401519050828261102086015109610d20850152828282099150610f408401519050828261100086015109610f40850152828282099150610f0084015190508282610fe086015109610f00850152828282099150610ec084015190508282610fc086015109610ec0850152828282099150610e8084015190508282610fa086015109610e80850152828282099150610e4084015190508282610f8086015109610e40850152828282099150610e0084015190508282610f6086015109610e00850152828282099150610dc084015190508282610d8086015109610dc085015282828209610d808501819052610d608501518493509091500961114083015280610dc0830151610da08401510961116083015280610e00830151610de08401510961118083015280610e40830151610e20840151096111a083015280610e80830151610e60840151096111c083015280610ec0830151610ea0840151096111e083015280610f00830151610ee08401510961120083015280610f40830151610f20840151096112208301528060208301516112008401510981818360408601516112208701510908611240840152506106e08201516105c0830151829190086112608301819052819080096112808301819052819080096112a0830152806112a0830151611260840151096112c0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad56112c0840151096112e0830152806107008301516105e0840151086113008301819052819080096113208301819052819080096113408301528061134083015161130084015109611360830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e861136084015109611380830152806113808301516112e0840151086113a08301528061060083015182036113a0840151086113c083018190526107808301518291096113e0830152806113e08301516103e084015109611400830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff96112c084015109611420830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113608401510961144083015280611440830151611420840151086114608301528061062083015182036114608401510861148083018190526107808301518291096114a0830152806114a0830151611400840151086114c0830152806114c08301516103e0840151096114e08301528061064083015182036112c08401510861150083018190526107a0830151829109611520830152806115208301516114e084015108611540830152806115408301516103e084015109611560830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561064084015109611580830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611300840151096115a0830152806115a0830151611580840151086115c083018190526106a08301518291086115e0830181905281908009611600830181905281908009611620830152806116208301516115e084015109611640830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e6661060084015109611660830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6106208401510961168083015280611680830151611660840151086116a0830152806116a08301518203611640840151086116c083018190526107a08301518291096116e0830152806116e083015161156084015108611700830152806117008301516103e084015109611720830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961064084015109611740830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c861130084015109611760830152806117608301516117408401510861178083018190526106c08301518291086117a0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610600840151096117c0830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be610620840151096117e0830152806117e08301516117c0840151086118008301528061180083015182036117a08401510861182083018190526107a08301518291096118408301528061184083015161172084015108611860830152806118608301516103e0840151096118808301528061076083015182036001086118a083018190526107608301518291096118c08301528061076083015182036002086118e083018190526118c08301518291096119008301528061076083015182036004086119208301819052611900830151829109611940830152806105c0830151610680840151086119608301528061060083015182036119608401510861198083018190526119408301518291096119a0830152806119a0830151611880840151086119c0830152806119c08301516103e0840151096119e083015280610620830151820361066084015108611a008301819052611940830151829109611a2083015280611a208301516119e084015108611a4083015280611a408301516103e084015109611a60830152806107c08301516113c084015109611a8083015280611a80830151611a6084015108611aa083015280611aa08301516103e084015109611ac0830152806107c083015161148084015109611ae083015280611ae0830151611ac084015108611b0083015280611b008301516103e084015109611b20830152806107e083015161150084015109611b4083015280611b40830151611b2084015108611b6083015280611b608301516103e084015109611b80830152806107e08301516116c084015109611ba083015280611ba0830151611b8084015108611bc083015280611bc08301516103e084015109611be0830152806107e083015161182084015109611c0083015280611c00830151611be084015108611c2083015280611c208301516103e084015109611c40830152806107608301518203600308611c608301819052611900830151829109611c8083015280611c8083015161198084015109611ca083015280611ca0830151611c4084015108611cc083015280611cc08301516103e084015109611ce083015280611c80830151611a0084015109611d0083015280611d00830151611ce084015108611d2083015280611d208301516103e084015109611d40830152806107608301516118e084015109611d6083015280611d60830151611c6084015109611d8083015280611d8083015161192084015109611da083015280611da083015161064084015109611dc0830152806106408301518203600108611de08301819052611dc0830151829109611e0083015280611e00830151611d4084015108611e2083015280611e208301516103e084015109611e4083015280610640830151600209611e60830152806105c083015182036105e084015108611e808301819052611e60830151829109611ea0830152806105c0830151820361060084015108611ec083015280611ec08301518203611ea084015108611ee08301528061062083015182036105e084015108611f0083015280611f008301518203611ee084015108611f208301819052611da0830151829109611f4083015280611f40830151611e4084015108611f6083015280611f608301516103e084015109611f80830152806118c0830151611c6084015109611fa083015280611fa083015161192084015109611fc0830152806105e08301516105c084015108611fe0830152806106408301518203611fe0840151086120008301819052611fc083015182910961202083015280612020830151611f8084015108612040830152806120408301516103e0840151096120608301819052612020830151829108612080830152806120808301516103e0840151096120a0830152806108e083015182036001086120c083018190526112008301518291096120e0830152806120e08301516120a084015108612100830152806121008301516103e0840151096121208301526109408201518190800961214083015280610940830151820361214084015108612160830181905261114083015182910961218083015280612180830151612120840151086121a0830152806121a08301516103e0840151096121c0830152806109208301518203610940840151086121e08301819052611200830151829109612200830152806122008301516121c084015108612220830152806122208301516103e084015109612240830152806111408301518203600108612260830152806111808301516111608401510861228083018190526111a08301518291086122a083018190526111c08301518291086122c083018190526111e08301518291086122e0830152806122e08301518203612260840151086123008301528061022083015161082084015109612320830152806123208301516106a08401510861234083018190526102808301518291086123608301528061022083015161084084015109612380830152806123808301516105c0840151086123a083018190526102808301518291086123c083018190526123608301518291096123e08301528061022083015161086084015109612400830152806124008301516105e084015108612420830181905261028083015182910861244083018190526123e08301518291096124608301528061022083015161088084015109612480830152806124808301516106c0840151086124a083018190526102808301518291086124c083018190526124608301518291096124e08301819052610900830151829109612500830152806102208301516001096125208301528061252083015161058084015109612540830152806125408301516106a0840151086125608301819052610280830151829108612580830152806102208301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096125a0830152806125a0830151610580840151096125c0830152806125c08301516105c0840151086125e083018190526102808301518291086126008301819052612580830151829109612620830152806102208301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096126408301528061264083015161058084015109612660830152806126608301516105e08401510861268083018190526102808301518291086126a083018190526126208301518291096126c0830152806102208301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e52096126e0830152806126e083015161058084015109612700830152806127008301516106c084015108612720830181905261028083015182910861274083018190526126c083015182910961276083018190526108e0830151829109612780830152806127808301518203612500840151086127a083018190526123008301518291096127c0830152806127c0830151612240840151086127e0830152806127e08301516103e084015109612800830152806102208301516108a08401510961282083015280612820830151610640840151086128408301819052610280830151829108612860830152806102208301516108c08401510961288083015280612880830151611240840151086128a083018190526102808301518291086128c083018190526128608301518291096128e08301819052610960830151829109612900830152806102208301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612920830152806129208301516105808401510961294083015280612940830151610640840151086129608301819052610280830151829108612980830152806102208301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d096129a0830152806129a0830151610580840151096129c0830152806129c0830151611240840151086129e08301819052610280830151829108612a008301819052612980830151829109612a208301819052610940830151829109612a4083015280612a40830151820361290084015108612a608301819052612300830151829109612a8083015280612a8083015161280084015108612aa083015280612aa08301516103e084015109612ac0830152806109808301518203600108612ae08301819052611200830151829109612b0083015280612b00830151612ac084015108612b2083015280612b208301516103e084015109612b4083015261098082015181908009612b60830152806109808301518203612b6084015108612b808301819052611140830151829109612ba083015280612ba0830151612b4084015108612bc083015280612bc08301516103e084015109612be0830152806102208301516109c084015108612c0083018190526109a0830151829109612c2083015280610280830151610a0084015108612c408301819052612c20830151829109612c608301528061060083015161010009612c8083015280612c8083015182036105c084015108612ca08301819052610740830151829109612cc08301819052610220830151829108612ce08301819052610980830151829109612d008301528061028083015161072084015108612d208301819052612d00830151829109612d4083015280612d408301518203612c6084015108612d608301819052612300830151829109612d8083015280612d80830151612be084015108612da083015280612da08301516103e084015109612dc083015280610a0083015182036109c084015108612de08301819052611200830151829109612e0083015280612e00830151612dc084015108612e2083015280612e208301516103e084015109612e4083015280612300830151612de084015109612e60830152806109e083015182036109c084015108612e808301819052612e60830151829109612ea083015280612ea0830151612e4084015108612ec0830152610d0082015181908009612ee08301819052610d00830151829109612f008301819052610d00830151829109612f208301819052610d00830151829109612f4083015280610d00830151600109612f6083015280612ee0830151600109612f8083015280612f00830151600109612fa083015280612f20830151600109612fc083015280610d20830151612ec084015109612fe083015280610580830151610bc08401510961300083015280600161058084015109613020830152806130208301518203610b4084015108613040830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f61058084015109613060830152806130608301518203610b4084015108613080830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610580840151096130a0830152806130a08301518203610b40840151086130c0830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610580840151096130e0830152806130e08301518203610b408401510861310083015280817f21054ce8b3cb9dc9b87af5c70c8f54994090ad8fa7e06caaf989ba5806b6798b610bc085015109610b4084015109818183847f0f5f018a2d66025fffd54fef74f203c3e7a33ab8d1d903e64a583b3be9498676610bc08801510961058087015109089050806131208401525080817f10ac009d2f31395e301635cd6d292978a4012197c24d6e63fb49943a70296136610bc085015109610b4084015109818183847f2696aa2788110c63ebbfd7f92b352ce93b28bbdae57b7cb94bc5885ee439e774610bc08801510961058087015109089050806131408401525080817f2510cae1618713ac17c9ef83f1a67645ed21f454d96bf1f072ca5b463e7f0c28610bc085015109610b4084015109818183847f0d6a07653c64f4112284cb8b23bf73adecaf4ee0fef51998549526f07b6defd7610bc088015109610580870151090861316084015250613040820151819060010961318083018190526130808301518291096131a083018190526131008301518291096131c0830152806001610b40840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058087015109089050806131e08401525080817f1d81b9bd5165d63a0d4a8370d37966eb243365d36ca235911564a783f8234cf2610bc085015109610b4084015109818183847f12e294b58fcbc9efab05c245ae07f172040082750d173b002e7d4e0ff7dcb30f610bc08801510961058087015109089050806132008401525080817f142f93c8919700eddb46a823a63f1726c05e6953fd8ba57ddf6ea70e7ebc8dcf610bc085015109610b4084015109818183847f2707d3cc5788c2cfc0ee9e5f5638da3b90cb6d8b97224a4521073ec9f10826fb610bc08801510961058087015109089050806132208401525080817f13d3d4db83b42c4d48afa6b5c9cbe3f49703d0caf1fdc301b0d4d3743ab60833610bc085015109610b4084015109818183847f223ed99d38075819043fa85ed3c54f3bfb5d62312139562ca82d9903b1b52e27610bc0880151096105808701510908613240840152506130c08201516131a08301518291900961326083015280817f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa361058085015109610b4084015109818183847f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e6105808801510961058087015109089050806132808401525080817f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e61058085015109610b4084015109818183847f1a514dd9f80de355133414990bffdc137169ffbf79f1b0988ce4dc4b27adb4e36105808801510961058087015109089050806132a08401525080817f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e861058085015109610b4084015109818183847f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d716196105808801510961058087015109089050806132c08401525080817f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161961058085015109610b4084015109818183847f20198517670312541561a1720d2538ac357df59dafa0d41bd7235a97f2f364376105808801510961058087015109086132e0840152506131008201516131808301518291900961330083015261312082015181816131408501510990508061332084015281816131608501510990508061334084015281816131e0850151099050806133608401528181613180850151099050806133808401528181613200850151099050806133a08401528181613220850151099050806133c08401528181613240850151099050806133e084015281816132608501510990508061340084015281816132808501510990508061342084015281816132a08501510990508061344084015281816131a08501510990508061346084015281816132c08501510990508061348084015281816132e0850151099050806134a08401528181613300850151099050806134c0840152506020613500830152602061352083015260206135408301526134c08201516135608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6135808301526000805160206154128339815191526135a083015282600160206134e0850160c0613500870160055afa141692506134e08201516000613300840151905082826134a0860151096133008501528282820991506132e084015190508282613480860151096132e08501528282820991506132c084015190508282613460860151096132c08501528282820991506131a084015190508282613440860151096131a08501528282820991506132a084015190508282613420860151096132a08501528282820991506132808401519050828261340086015109613280850152828282099150613260840151905082826133e086015109613260850152828282099150613240840151905082826133c086015109613240850152828282099150613220840151905082826133a086015109613220850152828282099150613200840151905082826133808601510961320085015282828209915061318084015190508282613360860151096131808501528282820991506131e084015190508282613340860151096131e08501528282820991506131608401519050828261332086015109613160850152828282099150613140840151905082826131208601510961314085015282828209613120850181905261314085015190925083915082900890508181613160850151086135c0840152506131808201516131c0830151829190096135e08301526131e08201518061360084015250806132608301516131c0840151096136208301526132008201518181613220850151089050818161324085015108613640840152506131a08201516131c08301518291900961366083015261328082015181816132a085015108613680840152506133008201516131c0830151829190096136a08301526132c082015181816132e0850151086136c0840152506135c082015161360083015182908290099050806136e084015281816136408501510990508061370084015281816136808501510990508061372084015281816136c08501510990508061374084015250602061378083015260206137a083015260206137c08301526137408201516137e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6138008301526000805160206154128339815191526138208301528260016020613760850160c0613780870160055afa1416925061376082015160006136c084015190508282613720860151096136c08501528282820991506136808401519050828261370086015109613680850152828282099150613640840151905082826136e086015109613640850152828282099150613600840151905082826135c086015109613600850152828282096135c085015250506136008201516135e08301518291900961384083015280613640830151613620840151096138608301528061368083015161366084015109613880830152806136c08301516136a0840151096138a0830152610a40820151819080096138c08301819052610a408301518291096138e08301819052610a408301518291096139008301819052610a408301518291096139208301819052610a408301518291096139408301819052610a408301518291096139608301819052610a408301518291096139808301819052610a408301518291096139a08301819052610a408301518291096139c08301819052610a408301518291096139e08301819052610a40830151829109613a008301819052610a40830151829109613a208301819052610a40830151829109613a408301819052610a40830151829109613a608301819052610a40830151829109613a808301819052610a40830151829109613aa08301819052610a40830151829109613ac08301819052610a40830151829109613ae08301819052610a40830151829109613b008301819052610a40830151829109613b20830152610aa082015181908009613b408301819052610aa0830151829109613b608301819052610aa0830151829109613b808301819052610aa0830151829109613ba0830152806131208301516105c084015109818183613140860151610600870151090890508181836131608601516106808701510908613bc084018190526135c08401518392509009613be0830152806001613be0840151830309613c00830152806131208301516105e084015109818183613140860151610620870151090890508181836131608601516106608701510908613c2084018190526135c08401518392509009613c408301819052610a408301518291820309613c6083015280610a40830151600109613c8083015280613c60830151613c0084015108613ca0830152806001613ca084015109613cc0830152806001613c8084015109613ce0830152806135e0830151600109613d00830152806131e083015161064084015109613d208301819052613840830151829109613d40830152806001613d40840151830309613d60830152806001613d0084015109613d80830152806131e0830151610a0084015109613da08301819052613840830151829109613dc08301819052610a408301518291820309613de083015280610a40830151613d0084015109613e0083015280613de0830151613d6084015108613e20830152806131e08301516106a084015109613e408301819052613840830151829109613e6083018190526138c08301518291820309613e80830152806138c0830151613d0084015109613ea083015280613e80830151613e2084015108613ec0830152806131e08301516106c084015109613ee08301819052613840830151829109613f0083018190526138e08301518291820309613f20830152806138e0830151613d0084015109613f4083015280613f20830151613ec084015108613f60830152806131e08301516106e084015109613f808301819052613840830151829109613fa083018190526139008301518291820309613fc083015280613900830151613d0084015109613fe083015280613fc0830151613f6084015108614000830152806131e08301516107008401510961402083018190526138408301518291096140408301819052613920830151829182030961406083015280613920830151613d008401510961408083015280614060830151614000840151086140a0830152806131e0830151610720840151096140c083018190526138408301518291096140e08301819052613940830151829182030961410083015280613940830151613d0084015109614120830152806141008301516140a084015108614140830152806131e0830151610740840151096141608301819052613840830151829109614180830181905261396083015182918203096141a083015280613960830151613d00840151096141c0830152806141a0830151614140840151086141e0830152806131e08301516107608401510961420083018190526138408301518291096142208301819052613980830151829182030961424083015280613980830151613d0084015109614260830152806142408301516141e084015108614280830152806131e0830151610780840151096142a083018190526138408301518291096142c083018190526139a083015182918203096142e0830152806139a0830151613d0084015109614300830152806142e083015161428084015108614320830152806131e08301516107a084015109614340830181905261384083015182910961436083018190526139c08301518291820309614380830152806139c0830151613d00840151096143a083015280614380830151614320840151086143c0830152806131e08301516107c0840151096143e0830181905261384083015182910961440083018190526139e08301518291820309614420830152806139e0830151613d0084015109614440830152806144208301516143c084015108614460830152806131e08301516107e08401510961448083018190526138408301518291096144a08301819052613a0083015182918203096144c083015280613a00830151613d00840151096144e0830152806144c083015161446084015108614500830152806131e08301516108208401510961452083018190526138408301518291096145408301819052613a20830151829182030961456083015280613a20830151613d008401510961458083015280614560830151614500840151086145a0830152806131e0830151610840840151096145c083018190526138408301518291096145e08301819052613a40830151829182030961460083015280613a40830151613d0084015109614620830152806146008301516145a084015108614640830152806131e08301516108608401510961466083018190526138408301518291096146808301819052613a6083015182918203096146a083015280613a60830151613d00840151096146c0830152806146a0830151614640840151086146e0830152806131e08301516108808401510961470083018190526138408301518291096147208301819052613a80830151829182030961474083015280613a80830151613d0084015109614760830152806147408301516146e084015108614780830152806131e08301516108a0840151096147a083018190526138408301518291096147c08301819052613aa083015182918203096147e083015280613aa0830151613d0084015109614800830152806147e083015161478084015108614820830152806131e08301516108c08401510961484083018190526138408301518291096148608301819052613ac0830151829182030961488083015280613ac0830151613d00840151096148a083015280614880830151614820840151086148c0830152806135e0830151612f60840151096148e0830152806135e0830151612f8084015109614900830152806135e0830151612fa084015109614920830152806135e0830151612fc084015109614940830152806131e0830151612fe08401510961496083018190526138408301518291096149808301819052613ae083015182918203096149a083015280613ae0830151613d00840151096149c083015280613ae08301516148e0840151096149e083015280613ae083015161490084015109614a0083015280613ae083015161492084015109614a2083015280613ae083015161494084015109614a40830152806149a08301516148c084015108614a60830152806131e083015161080084015109614a808301819052613840830151829109614aa08301819052613b008301518291820309614ac083015280613b00830151613d0084015109614ae083015280614ac0830151614a6084015108614b008301819052610aa0830151829109614b2083015280610aa0830151613d8084015109614b4083015280610aa0830151613e0084015109614b6083015280610aa0830151613ea084015109614b8083015280610aa0830151613f4084015109614ba083015280610aa0830151613fe084015109614bc083015280610aa083015161408084015109614be083015280610aa083015161412084015109614c0083015280610aa08301516141c084015109614c2083015280610aa083015161426084015109614c4083015280610aa083015161430084015109614c6083015280610aa08301516143a084015109614c8083015280610aa083015161444084015109614ca083015280610aa08301516144e084015109614cc083015280610aa083015161458084015109614ce083015280610aa083015161462084015109614d0083015280610aa08301516146c084015109614d2083015280610aa083015161476084015109614d4083015280610aa083015161480084015109614d6083015280610aa08301516148a084015109614d8083015280610aa08301516149c084015109614da083015280610aa08301516149e084015109614dc083015280610aa0830151614a0084015109614de083015280610aa0830151614a2084015109614e0083015280610aa0830151614a4084015109614e2083015280610aa0830151614ae084015109614e4083015280614b20830151613cc084015108614e6083015280613620830151600109614e80830152806132008301516108e084015109818183613220860151610900870151090890508181836132408601516109208701510908614ea084018190526138608401518392509009614ec0830152806001614ec0840151830309614ee0830152806001614e8084015109614f0083015280613b40830151614ee084015109614f2083015280613b40830151614f0084015109614f4083015280614f20830151614e6084015108614f6083015280613660830151600109614f8083015280613280830151610940840151098181836132a08601516109608701510908614fa084018190526138808401518392509009614fc0830152806001614fc0840151830309614fe0830152806001614f808401510961500083015280613280830151610980840151098181836132a08601516109a08701510908615020840181905261388084015183925090096150408301819052610a40830151829182030961506083015280610a40830151614f808401510961508083015280615060830151614fe0840151086150a08301819052613b608301518291096150c083015280613b60830151615000840151096150e083015280613b6083015161508084015109615100830152806150c0830151614f6084015108615120830152806136a0830151600109615140830152806132c08301516109c0840151098181836132e08601516109e0870151090861516084018190526138a084015183925090096151808301528060016151808401518303096151a0830152806001615140840151096151c083015280613b808301516151a0840151096151e083015280613b808301516151c084015109615200830152806151e083015161512084015108615220830152806131c083015160010961524083015280610b408301516001096152608301526001615280830181815260026152a08501526152208401516152c085015284919060409060608160075afa141692506152808201516152e08301526152a08201516153008301526060820151615320830152608082015161534083015282600160406152e0850160806152e0870160065afa1416925060a082015161536083015260c0820151615380830152613ce08201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa1416925060e0820151615440830152610100820151615460830152614b40820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692506101c08201516155208301526101e0820151615540830152614b60820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f14113d2da8037ec77f55dffb91151a8e7bb3eeea2fe44f6804703d0f82f344a06156008301527f1c5b5f4c28346cfddf08edde8db492f19a24b5f73fc2bd48dc19137a11ce53bf615620830152614b80820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f0491714ea02953469195ca0768b5aafb03166b27284de7cc9ffa7b3879a959a56156e08301527f2dbaa9a59dc7fd9657798dd9c00ffc85d2033e9555b699f4d9706bc2b77dce77615700830152614ba082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f16da8fcde785c6df1fe13aec4a088e06790750dfa9a2e9c6e05464a06b99679d6157c08301527f19fffa5d91549cdec737262e6cc5fa01c2f1c39c7b5f567d65d68e2cf3077bdb6157e0830152614bc082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f1542d7d471049c346e9b97abc2a351948d23438019a76df2b1989c8f76b287606158a08301527f0e26e13db1f178f85dbcb83b0a617d766c0b36fc4a49bafab13b20e83d0557f36158c0830152614be08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f2b692b9199891f86e3fc5613991e72b47098220c9d883415244271cc74b1218d6159808301527f042f929afe4bc56206b4ace41a3d283848753d5014597bcd0ec14f8a9261c5846159a0830152614c008201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f29c09f206a2fb04b15a3a0c220024c6b0ffa448a19fe3d4ec45ffa20748fc946615a608301527f1d27c69fbfa99caecf06376d79cbde5436726836ad63582954e2618d3899a6f6615a80830152614c20820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f20a3113a48bc99d14016666990d982af3fc8ef6269c2f37e053bbb801e1bda37615b408301527f11874a3348a60113ed95b25c4bdb198369e449967dfe7fe3253cb39afdee2672615b60830152614c40820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f22ee677d2be1568a5ed89b73c8499d415c7c48b12184a48781e4f08d37755757615c208301527f16f2744bb8dae65b5c5a6e0836cd5b59014c25f2481b024dec21ccbf26a9808c615c40830152614c60820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f0fccf37dc6868cb450c1cc971a9005c20acf19ddb1c82b9ceae7579aaaf6e5dc615d008301527f1053a5adbb841ceb0c804c8e4188b2eb030d0a623ae199553173d818df46a8f8615d20830152614c80820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f03c3c5792394acd6230174342c0fb4ceba9b35c38d4ab0ddb4a0fb177db54308615de08301527f1fd7d3ae57e2ef4c7b1023ce495503e40ca89532cbf6a740e57d9fa57d2b6f93615e00830152614ca0820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f15b64cf223d375ca6c983ab84102a960bfeb54a0a29a085844e0e571b09f3d71615ec08301527f23d8408484b6b10b897f9b0cc33314d9060dac48f43a62a0e5660be5882a7a8e615ee0830152614cc0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f2b069d8e2e57e6add6f216816a31936af27540959bfd7b845d3e74d84196639d615fa08301527f0840b8c0bdbb760a926c4046da2614e14d3c8b2fafc18c7471ce21298ca57c17615fc0830152614ce0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f2a6e42bf68afa452351faa949dc279f9fe3c68b126280aca278121888fcbaf736160808301527f04ddb656fb4f29069ada65c848b2ab177b495c0869aba6fe9216dab3a043f7596160a0830152614d008201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa141692507f0182a509c08487b8c3d5b8507251cc8a46f5b313c687c1e7262d08eb8dfa4c106161608301527f0474aa258fa2d41afc65596c3ada20b889a0f27825905a2a176560b27e2d2c8e616180830152614d208201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692507f1b5b2f748768c343be69fd761df14910a926a77da095db2912e96ac9f73ab6a26162408301527f2c0bb520bc601497c6b7f1bf683c83cab3a0440c41d8fdfbae0c775a57e727f5616260830152614d40820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692507e13dfb44248755cf12dcbac0ec5563e577e5b804ade04abc4e9baadac00e7ff6163208301527f264d42845662a911a5c37ae71cce463c1c387c12eed1a675e957440020045cb1616340830152614d60820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa141692507f2386d5258846b3fc1e5ffca77fde43316fd15ea08e7ce940927f7212c1b37bb76164008301527f23306e0a53ba71047743578c8fb135d2b843a8dded816b5a9e0b06b72f07be96616420830152614d80820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506104208201516164e0830152610440820151616500830152614da082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506104608201516165c08301526104808201516165e0830152614dc082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa141692506104a08201516166a08301526104c08201516166c0830152614de08201516166e083015282600160406166a0850160606166a0870160075afa141692506166208201516167008301526166408201516167208301526166a08201516167408301526166c0820151616760830152826001604061670085016080616700870160065afa141692506104e08201516167808301526105008201516167a0830152614e008201516167c0830152826001604061678085016060616780870160075afa141692506167008201516167e08301526167208201516168008301526167808201516168208301526167a082015161684083015282600160406167e0850160806167e0870160065afa14169250610520820151616860830152610540820151616880830152614e208201516168a0830152826001604061686085016060616860870160075afa141692506167e08201516168c08301526168008201516168e083015261686082015161690083015261688082015161692083015282600160406168c0850160806168c0870160065afa141692506103808201516169408301526103a0820151616960830152614e40820151616980830152826001604061694085016060616940870160075afa141692506168c08201516169a08301526168e08201516169c08301526169408201516169e0830152616960820151616a0083015282600160406169a0850160806169a0870160065afa141692506102c0820151616a208301526102e0820151616a40830152614f40820151616a608301528260016040616a2085016060616a20870160075afa141692506169a0820151616a808301526169c0820151616aa0830152616a20820151616ac0830152616a40820151616ae08301528260016040616a8085016080616a80870160065afa14169250610300820151616b00830152610320820151616b208301526150e0820151616b408301528260016040616b0085016060616b00870160075afa14169250616a80820151616b60830152616aa0820151616b80830152616b00820151616ba0830152616b20820151616bc08301528260016040616b6085016080616b60870160065afa14169250610340820151616be0830152610360820151616c00830152615100820151616c208301528260016040616be085016060616be0870160075afa14169250616b60820151616c40830152616b80820151616c60830152616be0820151616c80830152616c00820151616ca08301528260016040616c4085016080616c40870160065afa14169250610180820151616cc08301526101a0820151616ce0830152615200820151616d008301528260016040616cc085016060616cc0870160075afa14169250616c40820151616d20830152616c60820151616d40830152616cc0820151616d60830152616ce0820151616d808301528260016040616d2085016080616d20870160065afa14169250610ae0820151616da0830152610b00820151616dc08301526152408201518103616de0830152508160016040616da084016060616da0860160075afa14169150616d20810151616e00820152616d40810151616e20820152616da0810151616e40820152616dc0810151616e608201528160016040616e0084016080616e00860160065afa14169150610b80810151616e80820152610ba0810151616ea0820152615260810151616ec08201528160016040616e8084016060616e80860160075afa14169150616e00810151616ee0820152616e20810151616f00820152616e80810151616f20820152616ea0810151616f408201528160016040616ee084016080616ee0860160065afa14169150616ee0810151616f60820152616f00810151616f808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2616fa08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed616fc08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b616fe08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa617000820152610b80810151617020820152610ba08101516170408201527f1e46f29916af7be8122d38ce700e9f73b49830b4aa672d58c5fa83daa6f490386170608201527f203ccabc1b45b69a6dfd92fe117dfbdbeb48e684dccdf8cb2f466f4b860730346170808201527f0bd22dcbe71a1faeea29bf6783cbc63f06788ff9ea2488a2af9036ac52d4ae826170a08201527f23b7b2c332fca16856cc8bd1ca0b56f6872ed95ef4291917fce124bf48c136096170c08201528160016020616f608401610180616f60860160085afa616f6093909301516001149214161691505092915050565b604051806170c00160405280610386906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156152b1576152b1615272565b604052919050565b600082601f8301126152ca57600080fd5b813567ffffffffffffffff8111156152e4576152e4615272565b6152f7601f8201601f1916602001615288565b81815284602083860101111561530c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561533c57600080fd5b823567ffffffffffffffff8082111561535457600080fd5b818501915085601f83011261536857600080fd5b813560208282111561537c5761537c615272565b8160051b61538b828201615288565b928352848101820192828101908a8511156153a557600080fd5b958301955b848710156153c3578635825295830195908301906153aa565b97505050860135925050808211156153da57600080fd5b506153e7858286016152b9565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212207a4968b5317023c5b47a2108863e4850a34d6d7ed69ac30b2bbb0bc95c1ed01564736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004615329565b610057565b604051901515815260200160405180910390f35b60006001610063615252565b6000805160206154128339815191526100d9565b6000805160206153f283398151915280831081831016908380096000805160206153f28339815191528384096000805160206153f283398151915284820990506000805160206153f28339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301527f26c12b9fd7eb1bb33a25341ab4af2db334bf0ac2db5f18a2184820a841f48ea6600083015260208501518060608401526040860151806080850152846101388284610077565b169450505060608501518060a084015260808601518060c08501528461015e8284610077565b169450505060a08501518060e084015260c086015180610100850152846101858284610077565b16945050506101206000830120610120830152610120820151818106610140840152806101608401525060e085015180610180840152610100860151806101a0850152846101d38284610077565b1694505050610120850151806101c0840152610140860151806101e0850152846101fd8284610077565b60a061016087012061020087018190528581066102208801526102408701521694506001915050610260830153602161024083012061026083018190528181066102808401526102a08301526101608501516102c083018190526101808601516102e08401819052846102708284610077565b16945050506101a0850151806103008401526101c0860151806103208501528461029a8284610077565b16945050506101e08501518061034084015261020086015180610360850152846102c48284610077565b169450505061022085015180610380840152610240860151806103a0850152846102ee8284610077565b16945050506101206102a08301206103c08301526103c08201518181066103e0840152806104008401525061026085015180610420840152610280860151806104408501528461033e8284610077565b16945050506102a0850151806104608401526102c086015180610480850152846103688284610077565b16945050506102e0850151806104a0840152610300860151806104c0850152846103928284610077565b1694505050610320850151806104e084015261034086015180610500850152846103bc8284610077565b16945050506103608501518061052084015261038086015180610540850152846103e68284610077565b1694505050610160610400830120610560830152610560820151818106610580840152806105a084015250806103a0860151066105c0830152806103c0860151066105e0830152806103e086015106610600830152806104008601510661062083015280610420860151066106408301528061044086015106610660830152806104608601510661068083015280610480860151066106a0830152806104a0860151066106c0830152806104c0860151066106e0830152806104e086015106610700830152806105008601510661072083015280610520860151066107408301528061054086015106610760830152806105608601510661078083015280610580860151066107a0830152806105a0860151066107c0830152806105c0860151066107e0830152806105e086015106610800830152806106008601510661082083015280610620860151066108408301528061064086015106610860830152806106608601510661088083015280610680860151066108a0830152806106a0860151066108c0830152806106c0860151066108e0830152806106e086015106610900830152806107008601510661092083015280610720860151066109408301528061074086015106610960830152806107608601510661098083015280610780860151066109a0830152806107a0860151066109c0830152806107c0860151066109e0830152806107e086015106610a008301526104806105a0830120610a20830152610a20820151818106610a4084015280610a60840152506001610a808301536021610a60830120610a808301819052818106610aa0840152610ac0830152610800850151610ae08301819052610820860151610b0084018190528461066f8284610077565b16945050506060610ac0830120610b20830152610b20820151818106610b4084015280610b608401525061084085015180610b8084015261086086015180610ba0850152846106be8284610077565b16945050508061058083015161058084015109610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830181905281908009610ce0830181905281908009610d00830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610d0084015108610d20830152807f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610d2084015109610d40830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d4084015109610d60830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff61058084015108610d80830152807f2498c2d3affa1baaf6419dbccb6a054bb87359c02eade5aeacd86c84757b9051610d4084015109610da0830152807f0bcb8b9f3137847ec20ea7f9b61753116fc08e884b0b8ae29709890f7a846fb061058084015108610dc0830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d4084015109610de0830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc61058084015108610e00830152807f28771071ab1633014eae27cfc16d5ebe08a8fe2fc9e85044e4a45f82c14cd825610d4084015109610e20830152807f07ed3e01361b6d2869a21de6c013f99f1f8aea18afd1204c5f3d96112eb327dc61058084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d4084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e61058084015108610e80830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610d4084015109610ea0830152807f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e761058084015108610ec0830152806001610d4084015109610ee0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058084015108610f00830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610d4084015109610f20830152807f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa261058084015108610f40830152610d808201518181610dc085015109905080610f608401528181610e0085015109905080610f808401528181610e4085015109905080610fa08401528181610e8085015109905080610fc08401528181610ec085015109905080610fe08401528181610f00850151099050806110008401528181610f40850151099050806110208401528181610d208501510990508061104084015250602061108083015260206110a083015260206110c08301526110408201516110e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6111008301526000805160206154128339815191526111208301528260016020611060850160c0611080870160055afa141692506110608201516000610d208401519050828261102086015109610d20850152828282099150610f408401519050828261100086015109610f40850152828282099150610f0084015190508282610fe086015109610f00850152828282099150610ec084015190508282610fc086015109610ec0850152828282099150610e8084015190508282610fa086015109610e80850152828282099150610e4084015190508282610f8086015109610e40850152828282099150610e0084015190508282610f6086015109610e00850152828282099150610dc084015190508282610d8086015109610dc085015282828209610d808501819052610d608501518493509091500961114083015280610dc0830151610da08401510961116083015280610e00830151610de08401510961118083015280610e40830151610e20840151096111a083015280610e80830151610e60840151096111c083015280610ec0830151610ea0840151096111e083015280610f00830151610ee08401510961120083015280610f40830151610f20840151096112208301528060208301516112008401510981818360408601516112208701510908611240840152506106e08201516105c0830151829190086112608301819052819080096112808301819052819080096112a0830152806112a0830151611260840151096112c0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad56112c0840151096112e0830152806107008301516105e0840151086113008301819052819080096113208301819052819080096113408301528061134083015161130084015109611360830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e861136084015109611380830152806113808301516112e0840151086113a08301528061060083015182036113a0840151086113c083018190526107808301518291096113e0830152806113e08301516103e084015109611400830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff96112c084015109611420830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113608401510961144083015280611440830151611420840151086114608301528061062083015182036114608401510861148083018190526107808301518291096114a0830152806114a0830151611400840151086114c0830152806114c08301516103e0840151096114e08301528061064083015182036112c08401510861150083018190526107a0830151829109611520830152806115208301516114e084015108611540830152806115408301516103e084015109611560830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561064084015109611580830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611300840151096115a0830152806115a0830151611580840151086115c083018190526106a08301518291086115e0830181905281908009611600830181905281908009611620830152806116208301516115e084015109611640830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e6661060084015109611660830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6106208401510961168083015280611680830151611660840151086116a0830152806116a08301518203611640840151086116c083018190526107a08301518291096116e0830152806116e083015161156084015108611700830152806117008301516103e084015109611720830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961064084015109611740830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c861130084015109611760830152806117608301516117408401510861178083018190526106c08301518291086117a0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610600840151096117c0830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be610620840151096117e0830152806117e08301516117c0840151086118008301528061180083015182036117a08401510861182083018190526107a08301518291096118408301528061184083015161172084015108611860830152806118608301516103e0840151096118808301528061076083015182036001086118a083018190526107608301518291096118c08301528061076083015182036002086118e083018190526118c08301518291096119008301528061076083015182036004086119208301819052611900830151829109611940830152806105c0830151610680840151086119608301528061060083015182036119608401510861198083018190526119408301518291096119a0830152806119a0830151611880840151086119c0830152806119c08301516103e0840151096119e083015280610620830151820361066084015108611a008301819052611940830151829109611a2083015280611a208301516119e084015108611a4083015280611a408301516103e084015109611a60830152806107c08301516113c084015109611a8083015280611a80830151611a6084015108611aa083015280611aa08301516103e084015109611ac0830152806107c083015161148084015109611ae083015280611ae0830151611ac084015108611b0083015280611b008301516103e084015109611b20830152806107e083015161150084015109611b4083015280611b40830151611b2084015108611b6083015280611b608301516103e084015109611b80830152806107e08301516116c084015109611ba083015280611ba0830151611b8084015108611bc083015280611bc08301516103e084015109611be0830152806107e083015161182084015109611c0083015280611c00830151611be084015108611c2083015280611c208301516103e084015109611c40830152806107608301518203600308611c608301819052611900830151829109611c8083015280611c8083015161198084015109611ca083015280611ca0830151611c4084015108611cc083015280611cc08301516103e084015109611ce083015280611c80830151611a0084015109611d0083015280611d00830151611ce084015108611d2083015280611d208301516103e084015109611d40830152806107608301516118e084015109611d6083015280611d60830151611c6084015109611d8083015280611d8083015161192084015109611da083015280611da083015161064084015109611dc0830152806106408301518203600108611de08301819052611dc0830151829109611e0083015280611e00830151611d4084015108611e2083015280611e208301516103e084015109611e4083015280610640830151600209611e60830152806105c083015182036105e084015108611e808301819052611e60830151829109611ea0830152806105c0830151820361060084015108611ec083015280611ec08301518203611ea084015108611ee08301528061062083015182036105e084015108611f0083015280611f008301518203611ee084015108611f208301819052611da0830151829109611f4083015280611f40830151611e4084015108611f6083015280611f608301516103e084015109611f80830152806118c0830151611c6084015109611fa083015280611fa083015161192084015109611fc0830152806105e08301516105c084015108611fe0830152806106408301518203611fe0840151086120008301819052611fc083015182910961202083015280612020830151611f8084015108612040830152806120408301516103e0840151096120608301819052612020830151829108612080830152806120808301516103e0840151096120a0830152806108e083015182036001086120c083018190526112008301518291096120e0830152806120e08301516120a084015108612100830152806121008301516103e0840151096121208301526109408201518190800961214083015280610940830151820361214084015108612160830181905261114083015182910961218083015280612180830151612120840151086121a0830152806121a08301516103e0840151096121c0830152806109208301518203610940840151086121e08301819052611200830151829109612200830152806122008301516121c084015108612220830152806122208301516103e084015109612240830152806111408301518203600108612260830152806111808301516111608401510861228083018190526111a08301518291086122a083018190526111c08301518291086122c083018190526111e08301518291086122e0830152806122e08301518203612260840151086123008301528061022083015161082084015109612320830152806123208301516106a08401510861234083018190526102808301518291086123608301528061022083015161084084015109612380830152806123808301516105c0840151086123a083018190526102808301518291086123c083018190526123608301518291096123e08301528061022083015161086084015109612400830152806124008301516105e084015108612420830181905261028083015182910861244083018190526123e08301518291096124608301528061022083015161088084015109612480830152806124808301516106c0840151086124a083018190526102808301518291086124c083018190526124608301518291096124e08301819052610900830151829109612500830152806102208301516001096125208301528061252083015161058084015109612540830152806125408301516106a0840151086125608301819052610280830151829108612580830152806102208301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096125a0830152806125a0830151610580840151096125c0830152806125c08301516105c0840151086125e083018190526102808301518291086126008301819052612580830151829109612620830152806102208301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096126408301528061264083015161058084015109612660830152806126608301516105e08401510861268083018190526102808301518291086126a083018190526126208301518291096126c0830152806102208301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e52096126e0830152806126e083015161058084015109612700830152806127008301516106c084015108612720830181905261028083015182910861274083018190526126c083015182910961276083018190526108e0830151829109612780830152806127808301518203612500840151086127a083018190526123008301518291096127c0830152806127c0830151612240840151086127e0830152806127e08301516103e084015109612800830152806102208301516108a08401510961282083015280612820830151610640840151086128408301819052610280830151829108612860830152806102208301516108c08401510961288083015280612880830151611240840151086128a083018190526102808301518291086128c083018190526128608301518291096128e08301819052610960830151829109612900830152806102208301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612920830152806129208301516105808401510961294083015280612940830151610640840151086129608301819052610280830151829108612980830152806102208301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d096129a0830152806129a0830151610580840151096129c0830152806129c0830151611240840151086129e08301819052610280830151829108612a008301819052612980830151829109612a208301819052610940830151829109612a4083015280612a40830151820361290084015108612a608301819052612300830151829109612a8083015280612a8083015161280084015108612aa083015280612aa08301516103e084015109612ac0830152806109808301518203600108612ae08301819052611200830151829109612b0083015280612b00830151612ac084015108612b2083015280612b208301516103e084015109612b4083015261098082015181908009612b60830152806109808301518203612b6084015108612b808301819052611140830151829109612ba083015280612ba0830151612b4084015108612bc083015280612bc08301516103e084015109612be0830152806102208301516109c084015108612c0083018190526109a0830151829109612c2083015280610280830151610a0084015108612c408301819052612c20830151829109612c608301528061060083015161010009612c8083015280612c8083015182036105c084015108612ca08301819052610740830151829109612cc08301819052610220830151829108612ce08301819052610980830151829109612d008301528061028083015161072084015108612d208301819052612d00830151829109612d4083015280612d408301518203612c6084015108612d608301819052612300830151829109612d8083015280612d80830151612be084015108612da083015280612da08301516103e084015109612dc083015280610a0083015182036109c084015108612de08301819052611200830151829109612e0083015280612e00830151612dc084015108612e2083015280612e208301516103e084015109612e4083015280612300830151612de084015109612e60830152806109e083015182036109c084015108612e808301819052612e60830151829109612ea083015280612ea0830151612e4084015108612ec0830152610d0082015181908009612ee08301819052610d00830151829109612f008301819052610d00830151829109612f208301819052610d00830151829109612f4083015280610d00830151600109612f6083015280612ee0830151600109612f8083015280612f00830151600109612fa083015280612f20830151600109612fc083015280610d20830151612ec084015109612fe083015280610580830151610bc08401510961300083015280600161058084015109613020830152806130208301518203610b4084015108613040830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f61058084015109613060830152806130608301518203610b4084015108613080830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610580840151096130a0830152806130a08301518203610b40840151086130c0830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610580840151096130e0830152806130e08301518203610b408401510861310083015280817f21054ce8b3cb9dc9b87af5c70c8f54994090ad8fa7e06caaf989ba5806b6798b610bc085015109610b4084015109818183847f0f5f018a2d66025fffd54fef74f203c3e7a33ab8d1d903e64a583b3be9498676610bc08801510961058087015109089050806131208401525080817f10ac009d2f31395e301635cd6d292978a4012197c24d6e63fb49943a70296136610bc085015109610b4084015109818183847f2696aa2788110c63ebbfd7f92b352ce93b28bbdae57b7cb94bc5885ee439e774610bc08801510961058087015109089050806131408401525080817f2510cae1618713ac17c9ef83f1a67645ed21f454d96bf1f072ca5b463e7f0c28610bc085015109610b4084015109818183847f0d6a07653c64f4112284cb8b23bf73adecaf4ee0fef51998549526f07b6defd7610bc088015109610580870151090861316084015250613040820151819060010961318083018190526130808301518291096131a083018190526131008301518291096131c0830152806001610b40840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058087015109089050806131e08401525080817f1d81b9bd5165d63a0d4a8370d37966eb243365d36ca235911564a783f8234cf2610bc085015109610b4084015109818183847f12e294b58fcbc9efab05c245ae07f172040082750d173b002e7d4e0ff7dcb30f610bc08801510961058087015109089050806132008401525080817f142f93c8919700eddb46a823a63f1726c05e6953fd8ba57ddf6ea70e7ebc8dcf610bc085015109610b4084015109818183847f2707d3cc5788c2cfc0ee9e5f5638da3b90cb6d8b97224a4521073ec9f10826fb610bc08801510961058087015109089050806132208401525080817f13d3d4db83b42c4d48afa6b5c9cbe3f49703d0caf1fdc301b0d4d3743ab60833610bc085015109610b4084015109818183847f223ed99d38075819043fa85ed3c54f3bfb5d62312139562ca82d9903b1b52e27610bc0880151096105808701510908613240840152506130c08201516131a08301518291900961326083015280817f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa361058085015109610b4084015109818183847f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e6105808801510961058087015109089050806132808401525080817f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e61058085015109610b4084015109818183847f1a514dd9f80de355133414990bffdc137169ffbf79f1b0988ce4dc4b27adb4e36105808801510961058087015109089050806132a08401525080817f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e861058085015109610b4084015109818183847f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d716196105808801510961058087015109089050806132c08401525080817f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161961058085015109610b4084015109818183847f20198517670312541561a1720d2538ac357df59dafa0d41bd7235a97f2f364376105808801510961058087015109086132e0840152506131008201516131808301518291900961330083015261312082015181816131408501510990508061332084015281816131608501510990508061334084015281816131e0850151099050806133608401528181613180850151099050806133808401528181613200850151099050806133a08401528181613220850151099050806133c08401528181613240850151099050806133e084015281816132608501510990508061340084015281816132808501510990508061342084015281816132a08501510990508061344084015281816131a08501510990508061346084015281816132c08501510990508061348084015281816132e0850151099050806134a08401528181613300850151099050806134c0840152506020613500830152602061352083015260206135408301526134c08201516135608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6135808301526000805160206154128339815191526135a083015282600160206134e0850160c0613500870160055afa141692506134e08201516000613300840151905082826134a0860151096133008501528282820991506132e084015190508282613480860151096132e08501528282820991506132c084015190508282613460860151096132c08501528282820991506131a084015190508282613440860151096131a08501528282820991506132a084015190508282613420860151096132a08501528282820991506132808401519050828261340086015109613280850152828282099150613260840151905082826133e086015109613260850152828282099150613240840151905082826133c086015109613240850152828282099150613220840151905082826133a086015109613220850152828282099150613200840151905082826133808601510961320085015282828209915061318084015190508282613360860151096131808501528282820991506131e084015190508282613340860151096131e08501528282820991506131608401519050828261332086015109613160850152828282099150613140840151905082826131208601510961314085015282828209613120850181905261314085015190925083915082900890508181613160850151086135c0840152506131808201516131c0830151829190096135e08301526131e08201518061360084015250806132608301516131c0840151096136208301526132008201518181613220850151089050818161324085015108613640840152506131a08201516131c08301518291900961366083015261328082015181816132a085015108613680840152506133008201516131c0830151829190096136a08301526132c082015181816132e0850151086136c0840152506135c082015161360083015182908290099050806136e084015281816136408501510990508061370084015281816136808501510990508061372084015281816136c08501510990508061374084015250602061378083015260206137a083015260206137c08301526137408201516137e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6138008301526000805160206154128339815191526138208301528260016020613760850160c0613780870160055afa1416925061376082015160006136c084015190508282613720860151096136c08501528282820991506136808401519050828261370086015109613680850152828282099150613640840151905082826136e086015109613640850152828282099150613600840151905082826135c086015109613600850152828282096135c085015250506136008201516135e08301518291900961384083015280613640830151613620840151096138608301528061368083015161366084015109613880830152806136c08301516136a0840151096138a0830152610a40820151819080096138c08301819052610a408301518291096138e08301819052610a408301518291096139008301819052610a408301518291096139208301819052610a408301518291096139408301819052610a408301518291096139608301819052610a408301518291096139808301819052610a408301518291096139a08301819052610a408301518291096139c08301819052610a408301518291096139e08301819052610a40830151829109613a008301819052610a40830151829109613a208301819052610a40830151829109613a408301819052610a40830151829109613a608301819052610a40830151829109613a808301819052610a40830151829109613aa08301819052610a40830151829109613ac08301819052610a40830151829109613ae08301819052610a40830151829109613b008301819052610a40830151829109613b20830152610aa082015181908009613b408301819052610aa0830151829109613b608301819052610aa0830151829109613b808301819052610aa0830151829109613ba0830152806131208301516105c084015109818183613140860151610600870151090890508181836131608601516106808701510908613bc084018190526135c08401518392509009613be0830152806001613be0840151830309613c00830152806131208301516105e084015109818183613140860151610620870151090890508181836131608601516106608701510908613c2084018190526135c08401518392509009613c408301819052610a408301518291820309613c6083015280610a40830151600109613c8083015280613c60830151613c0084015108613ca0830152806001613ca084015109613cc0830152806001613c8084015109613ce0830152806135e0830151600109613d00830152806131e083015161064084015109613d208301819052613840830151829109613d40830152806001613d40840151830309613d60830152806001613d0084015109613d80830152806131e0830151610a0084015109613da08301819052613840830151829109613dc08301819052610a408301518291820309613de083015280610a40830151613d0084015109613e0083015280613de0830151613d6084015108613e20830152806131e08301516106a084015109613e408301819052613840830151829109613e6083018190526138c08301518291820309613e80830152806138c0830151613d0084015109613ea083015280613e80830151613e2084015108613ec0830152806131e08301516106c084015109613ee08301819052613840830151829109613f0083018190526138e08301518291820309613f20830152806138e0830151613d0084015109613f4083015280613f20830151613ec084015108613f60830152806131e08301516106e084015109613f808301819052613840830151829109613fa083018190526139008301518291820309613fc083015280613900830151613d0084015109613fe083015280613fc0830151613f6084015108614000830152806131e08301516107008401510961402083018190526138408301518291096140408301819052613920830151829182030961406083015280613920830151613d008401510961408083015280614060830151614000840151086140a0830152806131e0830151610720840151096140c083018190526138408301518291096140e08301819052613940830151829182030961410083015280613940830151613d0084015109614120830152806141008301516140a084015108614140830152806131e0830151610740840151096141608301819052613840830151829109614180830181905261396083015182918203096141a083015280613960830151613d00840151096141c0830152806141a0830151614140840151086141e0830152806131e08301516107608401510961420083018190526138408301518291096142208301819052613980830151829182030961424083015280613980830151613d0084015109614260830152806142408301516141e084015108614280830152806131e0830151610780840151096142a083018190526138408301518291096142c083018190526139a083015182918203096142e0830152806139a0830151613d0084015109614300830152806142e083015161428084015108614320830152806131e08301516107a084015109614340830181905261384083015182910961436083018190526139c08301518291820309614380830152806139c0830151613d00840151096143a083015280614380830151614320840151086143c0830152806131e08301516107c0840151096143e0830181905261384083015182910961440083018190526139e08301518291820309614420830152806139e0830151613d0084015109614440830152806144208301516143c084015108614460830152806131e08301516107e08401510961448083018190526138408301518291096144a08301819052613a0083015182918203096144c083015280613a00830151613d00840151096144e0830152806144c083015161446084015108614500830152806131e08301516108208401510961452083018190526138408301518291096145408301819052613a20830151829182030961456083015280613a20830151613d008401510961458083015280614560830151614500840151086145a0830152806131e0830151610840840151096145c083018190526138408301518291096145e08301819052613a40830151829182030961460083015280613a40830151613d0084015109614620830152806146008301516145a084015108614640830152806131e08301516108608401510961466083018190526138408301518291096146808301819052613a6083015182918203096146a083015280613a60830151613d00840151096146c0830152806146a0830151614640840151086146e0830152806131e08301516108808401510961470083018190526138408301518291096147208301819052613a80830151829182030961474083015280613a80830151613d0084015109614760830152806147408301516146e084015108614780830152806131e08301516108a0840151096147a083018190526138408301518291096147c08301819052613aa083015182918203096147e083015280613aa0830151613d0084015109614800830152806147e083015161478084015108614820830152806131e08301516108c08401510961484083018190526138408301518291096148608301819052613ac0830151829182030961488083015280613ac0830151613d00840151096148a083015280614880830151614820840151086148c0830152806135e0830151612f60840151096148e0830152806135e0830151612f8084015109614900830152806135e0830151612fa084015109614920830152806135e0830151612fc084015109614940830152806131e0830151612fe08401510961496083018190526138408301518291096149808301819052613ae083015182918203096149a083015280613ae0830151613d00840151096149c083015280613ae08301516148e0840151096149e083015280613ae083015161490084015109614a0083015280613ae083015161492084015109614a2083015280613ae083015161494084015109614a40830152806149a08301516148c084015108614a60830152806131e083015161080084015109614a808301819052613840830151829109614aa08301819052613b008301518291820309614ac083015280613b00830151613d0084015109614ae083015280614ac0830151614a6084015108614b008301819052610aa0830151829109614b2083015280610aa0830151613d8084015109614b4083015280610aa0830151613e0084015109614b6083015280610aa0830151613ea084015109614b8083015280610aa0830151613f4084015109614ba083015280610aa0830151613fe084015109614bc083015280610aa083015161408084015109614be083015280610aa083015161412084015109614c0083015280610aa08301516141c084015109614c2083015280610aa083015161426084015109614c4083015280610aa083015161430084015109614c6083015280610aa08301516143a084015109614c8083015280610aa083015161444084015109614ca083015280610aa08301516144e084015109614cc083015280610aa083015161458084015109614ce083015280610aa083015161462084015109614d0083015280610aa08301516146c084015109614d2083015280610aa083015161476084015109614d4083015280610aa083015161480084015109614d6083015280610aa08301516148a084015109614d8083015280610aa08301516149c084015109614da083015280610aa08301516149e084015109614dc083015280610aa0830151614a0084015109614de083015280610aa0830151614a2084015109614e0083015280610aa0830151614a4084015109614e2083015280610aa0830151614ae084015109614e4083015280614b20830151613cc084015108614e6083015280613620830151600109614e80830152806132008301516108e084015109818183613220860151610900870151090890508181836132408601516109208701510908614ea084018190526138608401518392509009614ec0830152806001614ec0840151830309614ee0830152806001614e8084015109614f0083015280613b40830151614ee084015109614f2083015280613b40830151614f0084015109614f4083015280614f20830151614e6084015108614f6083015280613660830151600109614f8083015280613280830151610940840151098181836132a08601516109608701510908614fa084018190526138808401518392509009614fc0830152806001614fc0840151830309614fe0830152806001614f808401510961500083015280613280830151610980840151098181836132a08601516109a08701510908615020840181905261388084015183925090096150408301819052610a40830151829182030961506083015280610a40830151614f808401510961508083015280615060830151614fe0840151086150a08301819052613b608301518291096150c083015280613b60830151615000840151096150e083015280613b6083015161508084015109615100830152806150c0830151614f6084015108615120830152806136a0830151600109615140830152806132c08301516109c0840151098181836132e08601516109e0870151090861516084018190526138a084015183925090096151808301528060016151808401518303096151a0830152806001615140840151096151c083015280613b808301516151a0840151096151e083015280613b808301516151c084015109615200830152806151e083015161512084015108615220830152806131c083015160010961524083015280610b408301516001096152608301526001615280830181815260026152a08501526152208401516152c085015284919060409060608160075afa141692506152808201516152e08301526152a08201516153008301526060820151615320830152608082015161534083015282600160406152e0850160806152e0870160065afa1416925060a082015161536083015260c0820151615380830152613ce08201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa1416925060e0820151615440830152610100820151615460830152614b40820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692506101c08201516155208301526101e0820151615540830152614b60820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f14113d2da8037ec77f55dffb91151a8e7bb3eeea2fe44f6804703d0f82f344a06156008301527f1c5b5f4c28346cfddf08edde8db492f19a24b5f73fc2bd48dc19137a11ce53bf615620830152614b80820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f0491714ea02953469195ca0768b5aafb03166b27284de7cc9ffa7b3879a959a56156e08301527f2dbaa9a59dc7fd9657798dd9c00ffc85d2033e9555b699f4d9706bc2b77dce77615700830152614ba082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f16da8fcde785c6df1fe13aec4a088e06790750dfa9a2e9c6e05464a06b99679d6157c08301527f19fffa5d91549cdec737262e6cc5fa01c2f1c39c7b5f567d65d68e2cf3077bdb6157e0830152614bc082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f1542d7d471049c346e9b97abc2a351948d23438019a76df2b1989c8f76b287606158a08301527f0e26e13db1f178f85dbcb83b0a617d766c0b36fc4a49bafab13b20e83d0557f36158c0830152614be08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f2b692b9199891f86e3fc5613991e72b47098220c9d883415244271cc74b1218d6159808301527f042f929afe4bc56206b4ace41a3d283848753d5014597bcd0ec14f8a9261c5846159a0830152614c008201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f29c09f206a2fb04b15a3a0c220024c6b0ffa448a19fe3d4ec45ffa20748fc946615a608301527f1d27c69fbfa99caecf06376d79cbde5436726836ad63582954e2618d3899a6f6615a80830152614c20820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f20a3113a48bc99d14016666990d982af3fc8ef6269c2f37e053bbb801e1bda37615b408301527f11874a3348a60113ed95b25c4bdb198369e449967dfe7fe3253cb39afdee2672615b60830152614c40820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f22ee677d2be1568a5ed89b73c8499d415c7c48b12184a48781e4f08d37755757615c208301527f16f2744bb8dae65b5c5a6e0836cd5b59014c25f2481b024dec21ccbf26a9808c615c40830152614c60820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f0fccf37dc6868cb450c1cc971a9005c20acf19ddb1c82b9ceae7579aaaf6e5dc615d008301527f1053a5adbb841ceb0c804c8e4188b2eb030d0a623ae199553173d818df46a8f8615d20830152614c80820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f03c3c5792394acd6230174342c0fb4ceba9b35c38d4ab0ddb4a0fb177db54308615de08301527f1fd7d3ae57e2ef4c7b1023ce495503e40ca89532cbf6a740e57d9fa57d2b6f93615e00830152614ca0820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f15b64cf223d375ca6c983ab84102a960bfeb54a0a29a085844e0e571b09f3d71615ec08301527f23d8408484b6b10b897f9b0cc33314d9060dac48f43a62a0e5660be5882a7a8e615ee0830152614cc0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f2b069d8e2e57e6add6f216816a31936af27540959bfd7b845d3e74d84196639d615fa08301527f0840b8c0bdbb760a926c4046da2614e14d3c8b2fafc18c7471ce21298ca57c17615fc0830152614ce0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f2a6e42bf68afa452351faa949dc279f9fe3c68b126280aca278121888fcbaf736160808301527f04ddb656fb4f29069ada65c848b2ab177b495c0869aba6fe9216dab3a043f7596160a0830152614d008201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa141692507f0182a509c08487b8c3d5b8507251cc8a46f5b313c687c1e7262d08eb8dfa4c106161608301527f0474aa258fa2d41afc65596c3ada20b889a0f27825905a2a176560b27e2d2c8e616180830152614d208201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692507f1b5b2f748768c343be69fd761df14910a926a77da095db2912e96ac9f73ab6a26162408301527f2c0bb520bc601497c6b7f1bf683c83cab3a0440c41d8fdfbae0c775a57e727f5616260830152614d40820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692507e13dfb44248755cf12dcbac0ec5563e577e5b804ade04abc4e9baadac00e7ff6163208301527f264d42845662a911a5c37ae71cce463c1c387c12eed1a675e957440020045cb1616340830152614d60820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa141692507f2386d5258846b3fc1e5ffca77fde43316fd15ea08e7ce940927f7212c1b37bb76164008301527f23306e0a53ba71047743578c8fb135d2b843a8dded816b5a9e0b06b72f07be96616420830152614d80820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506104208201516164e0830152610440820151616500830152614da082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506104608201516165c08301526104808201516165e0830152614dc082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa141692506104a08201516166a08301526104c08201516166c0830152614de08201516166e083015282600160406166a0850160606166a0870160075afa141692506166208201516167008301526166408201516167208301526166a08201516167408301526166c0820151616760830152826001604061670085016080616700870160065afa141692506104e08201516167808301526105008201516167a0830152614e008201516167c0830152826001604061678085016060616780870160075afa141692506167008201516167e08301526167208201516168008301526167808201516168208301526167a082015161684083015282600160406167e0850160806167e0870160065afa14169250610520820151616860830152610540820151616880830152614e208201516168a0830152826001604061686085016060616860870160075afa141692506167e08201516168c08301526168008201516168e083015261686082015161690083015261688082015161692083015282600160406168c0850160806168c0870160065afa141692506103808201516169408301526103a0820151616960830152614e40820151616980830152826001604061694085016060616940870160075afa141692506168c08201516169a08301526168e08201516169c08301526169408201516169e0830152616960820151616a0083015282600160406169a0850160806169a0870160065afa141692506102c0820151616a208301526102e0820151616a40830152614f40820151616a608301528260016040616a2085016060616a20870160075afa141692506169a0820151616a808301526169c0820151616aa0830152616a20820151616ac0830152616a40820151616ae08301528260016040616a8085016080616a80870160065afa14169250610300820151616b00830152610320820151616b208301526150e0820151616b408301528260016040616b0085016060616b00870160075afa14169250616a80820151616b60830152616aa0820151616b80830152616b00820151616ba0830152616b20820151616bc08301528260016040616b6085016080616b60870160065afa14169250610340820151616be0830152610360820151616c00830152615100820151616c208301528260016040616be085016060616be0870160075afa14169250616b60820151616c40830152616b80820151616c60830152616be0820151616c80830152616c00820151616ca08301528260016040616c4085016080616c40870160065afa14169250610180820151616cc08301526101a0820151616ce0830152615200820151616d008301528260016040616cc085016060616cc0870160075afa14169250616c40820151616d20830152616c60820151616d40830152616cc0820151616d60830152616ce0820151616d808301528260016040616d2085016080616d20870160065afa14169250610ae0820151616da0830152610b00820151616dc08301526152408201518103616de0830152508160016040616da084016060616da0860160075afa14169150616d20810151616e00820152616d40810151616e20820152616da0810151616e40820152616dc0810151616e608201528160016040616e0084016080616e00860160065afa14169150610b80810151616e80820152610ba0810151616ea0820152615260810151616ec08201528160016040616e8084016060616e80860160075afa14169150616e00810151616ee0820152616e20810151616f00820152616e80810151616f20820152616ea0810151616f408201528160016040616ee084016080616ee0860160065afa14169150616ee0810151616f60820152616f00810151616f808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2616fa08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed616fc08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b616fe08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa617000820152610b80810151617020820152610ba08101516170408201527f1e46f29916af7be8122d38ce700e9f73b49830b4aa672d58c5fa83daa6f490386170608201527f203ccabc1b45b69a6dfd92fe117dfbdbeb48e684dccdf8cb2f466f4b860730346170808201527f0bd22dcbe71a1faeea29bf6783cbc63f06788ff9ea2488a2af9036ac52d4ae826170a08201527f23b7b2c332fca16856cc8bd1ca0b56f6872ed95ef4291917fce124bf48c136096170c08201528160016020616f608401610180616f60860160085afa616f6093909301516001149214161691505092915050565b604051806170c00160405280610386906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156152b1576152b1615272565b604052919050565b600082601f8301126152ca57600080fd5b813567ffffffffffffffff8111156152e4576152e4615272565b6152f7601f8201601f1916602001615288565b81815284602083860101111561530c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561533c57600080fd5b823567ffffffffffffffff8082111561535457600080fd5b818501915085601f83011261536857600080fd5b813560208282111561537c5761537c615272565b8160051b61538b828201615288565b928352848101820192828101908a8511156153a557600080fd5b958301955b848710156153c3578635825295830195908301906153aa565b97505050860135925050808211156153da57600080fd5b506153e7858286016152b9565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212207a4968b5317023c5b47a2108863e4850a34d6d7ed69ac30b2bbb0bc95c1ed01564736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file +{"_format":"hh-sol-artifact-1","contractName":"Verifier","sourceName":"src/InclusionVerifier.sol","abi":[{"inputs":[{"internalType":"uint256[]","name":"pubInputs","type":"uint256[]"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50615468806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e36600461532a565b610057565b604051901515815260200160405180910390f35b60006001610063615253565b6000805160206154138339815191526100d9565b6000805160206153f383398151915280831081831016908380096000805160206153f38339815191528384096000805160206153f383398151915284820990506000805160206153f38339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301527f28c894f41fc22dc4314404d520858054b873e3fa824b0b79c28069864128959c600083015260208501518060608401526040860151806080850152846101388284610077565b169450505060608501518060a084015260808601518060c08501528461015e8284610077565b169450505060a08501518060e084015260c086015180610100850152846101858284610077565b16945050506101206000830120610120830152610120820151818106610140840152806101608401525060e085015180610180840152610100860151806101a0850152846101d38284610077565b1694505050610120850151806101c0840152610140860151806101e0850152846101fd8284610077565b60a061016087012061020087018190528581066102208801526102408701521694506001915050610260830153602161024083012061026083018190528181066102808401526102a08301526101608501516102c083018190526101808601516102e08401819052846102708284610077565b16945050506101a0850151806103008401526101c0860151806103208501528461029a8284610077565b16945050506101e08501518061034084015261020086015180610360850152846102c48284610077565b169450505061022085015180610380840152610240860151806103a0850152846102ee8284610077565b16945050506101206102a08301206103c08301526103c08201518181066103e0840152806104008401525061026085015180610420840152610280860151806104408501528461033e8284610077565b16945050506102a0850151806104608401526102c086015180610480850152846103688284610077565b16945050506102e0850151806104a0840152610300860151806104c0850152846103928284610077565b1694505050610320850151806104e084015261034086015180610500850152846103bc8284610077565b16945050506103608501518061052084015261038086015180610540850152846103e68284610077565b1694505050610160610400830120610560830152610560820151818106610580840152806105a084015250806103a0860151066105c0830152806103c0860151066105e0830152806103e086015106610600830152806104008601510661062083015280610420860151066106408301528061044086015106610660830152806104608601510661068083015280610480860151066106a0830152806104a0860151066106c0830152806104c0860151066106e0830152806104e086015106610700830152806105008601510661072083015280610520860151066107408301528061054086015106610760830152806105608601510661078083015280610580860151066107a0830152806105a0860151066107c0830152806105c0860151066107e0830152806105e086015106610800830152806106008601510661082083015280610620860151066108408301528061064086015106610860830152806106608601510661088083015280610680860151066108a0830152806106a0860151066108c0830152806106c0860151066108e0830152806106e086015106610900830152806107008601510661092083015280610720860151066109408301528061074086015106610960830152806107608601510661098083015280610780860151066109a0830152806107a0860151066109c0830152806107c0860151066109e0830152806107e086015106610a008301526104806105a0830120610a20830152610a20820151818106610a4084015280610a60840152506001610a808301536021610a60830120610a808301819052818106610aa0840152610ac0830152610800850151610ae08301819052610820860151610b0084018190528461066f8284610077565b16945050506060610ac0830120610b20830152610b20820151818106610b4084015280610b608401525061084085015180610b8084015261086086015180610ba0850152846106be8284610077565b16945050508061058083015161058084015109610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830181905281908009610ce0830181905281908009610d00830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610d0084015108610d20830152807f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610d2084015109610d40830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d4084015109610d60830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff61058084015108610d80830152807f2498c2d3affa1baaf6419dbccb6a054bb87359c02eade5aeacd86c84757b9051610d4084015109610da0830152807f0bcb8b9f3137847ec20ea7f9b61753116fc08e884b0b8ae29709890f7a846fb061058084015108610dc0830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d4084015109610de0830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc61058084015108610e00830152807f28771071ab1633014eae27cfc16d5ebe08a8fe2fc9e85044e4a45f82c14cd825610d4084015109610e20830152807f07ed3e01361b6d2869a21de6c013f99f1f8aea18afd1204c5f3d96112eb327dc61058084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d4084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e61058084015108610e80830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610d4084015109610ea0830152807f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e761058084015108610ec0830152806001610d4084015109610ee0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058084015108610f00830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610d4084015109610f20830152807f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa261058084015108610f40830152610d808201518181610dc085015109905080610f608401528181610e0085015109905080610f808401528181610e4085015109905080610fa08401528181610e8085015109905080610fc08401528181610ec085015109905080610fe08401528181610f00850151099050806110008401528181610f40850151099050806110208401528181610d208501510990508061104084015250602061108083015260206110a083015260206110c08301526110408201516110e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6111008301526000805160206154138339815191526111208301528260016020611060850160c0611080870160055afa141692506110608201516000610d208401519050828261102086015109610d20850152828282099150610f408401519050828261100086015109610f40850152828282099150610f0084015190508282610fe086015109610f00850152828282099150610ec084015190508282610fc086015109610ec0850152828282099150610e8084015190508282610fa086015109610e80850152828282099150610e4084015190508282610f8086015109610e40850152828282099150610e0084015190508282610f6086015109610e00850152828282099150610dc084015190508282610d8086015109610dc085015282828209610d808501819052610d608501518493509091500961114083015280610dc0830151610da08401510961116083015280610e00830151610de08401510961118083015280610e40830151610e20840151096111a083015280610e80830151610e60840151096111c083015280610ec0830151610ea0840151096111e083015280610f00830151610ee08401510961120083015280610f40830151610f20840151096112208301528060208301516112008401510981818360408601516112208701510908611240840152506106e08201516105c0830151829190086112608301819052819080096112808301819052819080096112a0830152806112a0830151611260840151096112c0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad56112c0840151096112e0830152806107008301516105e0840151086113008301819052819080096113208301819052819080096113408301528061134083015161130084015109611360830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e861136084015109611380830152806113808301516112e0840151086113a08301528061060083015182036113a0840151086113c083018190526107808301518291096113e0830152806113e08301516103e084015109611400830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff96112c084015109611420830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113608401510961144083015280611440830151611420840151086114608301528061062083015182036114608401510861148083018190526107808301518291096114a0830152806114a0830151611400840151086114c0830152806114c08301516103e0840151096114e08301528061064083015182036112c08401510861150083018190526107a0830151829109611520830152806115208301516114e084015108611540830152806115408301516103e084015109611560830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561064084015109611580830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611300840151096115a0830152806115a0830151611580840151086115c083018190526106a08301518291086115e0830181905281908009611600830181905281908009611620830152806116208301516115e084015109611640830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e6661060084015109611660830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6106208401510961168083015280611680830151611660840151086116a0830152806116a08301518203611640840151086116c083018190526107a08301518291096116e0830152806116e083015161156084015108611700830152806117008301516103e084015109611720830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961064084015109611740830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c861130084015109611760830152806117608301516117408401510861178083018190526106c08301518291086117a0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610600840151096117c0830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be610620840151096117e0830152806117e08301516117c0840151086118008301528061180083015182036117a08401510861182083018190526107a08301518291096118408301528061184083015161172084015108611860830152806118608301516103e0840151096118808301528061076083015182036001086118a083018190526107608301518291096118c08301528061076083015182036002086118e083018190526118c08301518291096119008301528061076083015182036004086119208301819052611900830151829109611940830152806105c0830151610680840151086119608301528061060083015182036119608401510861198083018190526119408301518291096119a0830152806119a0830151611880840151086119c0830152806119c08301516103e0840151096119e083015280610620830151820361066084015108611a008301819052611940830151829109611a2083015280611a208301516119e084015108611a4083015280611a408301516103e084015109611a60830152806107c08301516113c084015109611a8083015280611a80830151611a6084015108611aa083015280611aa08301516103e084015109611ac0830152806107c083015161148084015109611ae083015280611ae0830151611ac084015108611b0083015280611b008301516103e084015109611b20830152806107e083015161150084015109611b4083015280611b40830151611b2084015108611b6083015280611b608301516103e084015109611b80830152806107e08301516116c084015109611ba083015280611ba0830151611b8084015108611bc083015280611bc08301516103e084015109611be0830152806107e083015161182084015109611c0083015280611c00830151611be084015108611c2083015280611c208301516103e084015109611c40830152806107608301518203600308611c608301819052611900830151829109611c8083015280611c8083015161198084015109611ca083015280611ca0830151611c4084015108611cc083015280611cc08301516103e084015109611ce083015280611c80830151611a0084015109611d0083015280611d00830151611ce084015108611d2083015280611d208301516103e084015109611d40830152806107608301516118e084015109611d6083015280611d60830151611c6084015109611d8083015280611d8083015161192084015109611da083015280611da083015161064084015109611dc0830152806106408301518203600108611de08301819052611dc0830151829109611e0083015280611e00830151611d4084015108611e2083015280611e208301516103e084015109611e4083015280610640830151600209611e60830152806105c083015182036105e084015108611e808301819052611e60830151829109611ea0830152806105c0830151820361060084015108611ec083015280611ec08301518203611ea084015108611ee08301528061062083015182036105e084015108611f0083015280611f008301518203611ee084015108611f208301819052611da0830151829109611f4083015280611f40830151611e4084015108611f6083015280611f608301516103e084015109611f80830152806118c0830151611c6084015109611fa083015280611fa083015161192084015109611fc0830152806105e08301516105c084015108611fe0830152806106408301518203611fe0840151086120008301819052611fc083015182910961202083015280612020830151611f8084015108612040830152806120408301516103e0840151096120608301819052612020830151829108612080830152806120808301516103e0840151096120a0830152806108e083015182036001086120c083018190526112008301518291096120e0830152806120e08301516120a084015108612100830152806121008301516103e0840151096121208301526109408201518190800961214083015280610940830151820361214084015108612160830181905261114083015182910961218083015280612180830151612120840151086121a0830152806121a08301516103e0840151096121c0830152806109208301518203610940840151086121e08301819052611200830151829109612200830152806122008301516121c084015108612220830152806122208301516103e084015109612240830152806111408301518203600108612260830152806111808301516111608401510861228083018190526111a08301518291086122a083018190526111c08301518291086122c083018190526111e08301518291086122e0830152806122e08301518203612260840151086123008301528061022083015161082084015109612320830152806123208301516106a08401510861234083018190526102808301518291086123608301528061022083015161084084015109612380830152806123808301516105c0840151086123a083018190526102808301518291086123c083018190526123608301518291096123e08301528061022083015161086084015109612400830152806124008301516105e084015108612420830181905261028083015182910861244083018190526123e08301518291096124608301528061022083015161088084015109612480830152806124808301516106c0840151086124a083018190526102808301518291086124c083018190526124608301518291096124e08301819052610900830151829109612500830152806102208301516001096125208301528061252083015161058084015109612540830152806125408301516106a0840151086125608301819052610280830151829108612580830152806102208301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096125a0830152806125a0830151610580840151096125c0830152806125c08301516105c0840151086125e083018190526102808301518291086126008301819052612580830151829109612620830152806102208301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096126408301528061264083015161058084015109612660830152806126608301516105e08401510861268083018190526102808301518291086126a083018190526126208301518291096126c0830152806102208301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e52096126e0830152806126e083015161058084015109612700830152806127008301516106c084015108612720830181905261028083015182910861274083018190526126c083015182910961276083018190526108e0830151829109612780830152806127808301518203612500840151086127a083018190526123008301518291096127c0830152806127c0830151612240840151086127e0830152806127e08301516103e084015109612800830152806102208301516108a08401510961282083015280612820830151610640840151086128408301819052610280830151829108612860830152806102208301516108c08401510961288083015280612880830151611240840151086128a083018190526102808301518291086128c083018190526128608301518291096128e08301819052610960830151829109612900830152806102208301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612920830152806129208301516105808401510961294083015280612940830151610640840151086129608301819052610280830151829108612980830152806102208301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d096129a0830152806129a0830151610580840151096129c0830152806129c0830151611240840151086129e08301819052610280830151829108612a008301819052612980830151829109612a208301819052610940830151829109612a4083015280612a40830151820361290084015108612a608301819052612300830151829109612a8083015280612a8083015161280084015108612aa083015280612aa08301516103e084015109612ac0830152806109808301518203600108612ae08301819052611200830151829109612b0083015280612b00830151612ac084015108612b2083015280612b208301516103e084015109612b4083015261098082015181908009612b60830152806109808301518203612b6084015108612b808301819052611140830151829109612ba083015280612ba0830151612b4084015108612bc083015280612bc08301516103e084015109612be0830152806102208301516109c084015108612c0083018190526109a0830151829109612c2083015280610280830151610a0084015108612c408301819052612c20830151829109612c608301528061060083015161010009612c8083015280612c8083015182036105c084015108612ca08301819052610740830151829109612cc08301819052610220830151829108612ce08301819052610980830151829109612d008301528061028083015161072084015108612d208301819052612d00830151829109612d4083015280612d408301518203612c6084015108612d608301819052612300830151829109612d8083015280612d80830151612be084015108612da083015280612da08301516103e084015109612dc083015280610a0083015182036109c084015108612de08301819052611200830151829109612e0083015280612e00830151612dc084015108612e2083015280612e208301516103e084015109612e4083015280612300830151612de084015109612e60830152806109e083015182036109c084015108612e808301819052612e60830151829109612ea083015280612ea0830151612e4084015108612ec0830152610d0082015181908009612ee08301819052610d00830151829109612f008301819052610d00830151829109612f208301819052610d00830151829109612f4083015280610d00830151600109612f6083015280612ee0830151600109612f8083015280612f00830151600109612fa083015280612f20830151600109612fc083015280610d20830151612ec084015109612fe083015280610580830151610bc08401510961300083015280600161058084015109613020830152806130208301518203610b4084015108613040830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f61058084015109613060830152806130608301518203610b4084015108613080830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610580840151096130a0830152806130a08301518203610b40840151086130c0830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610580840151096130e0830152806130e08301518203610b408401510861310083015280817f21054ce8b3cb9dc9b87af5c70c8f54994090ad8fa7e06caaf989ba5806b6798b610bc085015109610b4084015109818183847f0f5f018a2d66025fffd54fef74f203c3e7a33ab8d1d903e64a583b3be9498676610bc08801510961058087015109089050806131208401525080817f10ac009d2f31395e301635cd6d292978a4012197c24d6e63fb49943a70296136610bc085015109610b4084015109818183847f2696aa2788110c63ebbfd7f92b352ce93b28bbdae57b7cb94bc5885ee439e774610bc08801510961058087015109089050806131408401525080817f2510cae1618713ac17c9ef83f1a67645ed21f454d96bf1f072ca5b463e7f0c28610bc085015109610b4084015109818183847f0d6a07653c64f4112284cb8b23bf73adecaf4ee0fef51998549526f07b6defd7610bc088015109610580870151090861316084015250613040820151819060010961318083018190526130808301518291096131a083018190526131008301518291096131c0830152806001610b40840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058087015109089050806131e08401525080817f1d81b9bd5165d63a0d4a8370d37966eb243365d36ca235911564a783f8234cf2610bc085015109610b4084015109818183847f12e294b58fcbc9efab05c245ae07f172040082750d173b002e7d4e0ff7dcb30f610bc08801510961058087015109089050806132008401525080817f142f93c8919700eddb46a823a63f1726c05e6953fd8ba57ddf6ea70e7ebc8dcf610bc085015109610b4084015109818183847f2707d3cc5788c2cfc0ee9e5f5638da3b90cb6d8b97224a4521073ec9f10826fb610bc08801510961058087015109089050806132208401525080817f13d3d4db83b42c4d48afa6b5c9cbe3f49703d0caf1fdc301b0d4d3743ab60833610bc085015109610b4084015109818183847f223ed99d38075819043fa85ed3c54f3bfb5d62312139562ca82d9903b1b52e27610bc0880151096105808701510908613240840152506130c08201516131a08301518291900961326083015280817f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa361058085015109610b4084015109818183847f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e6105808801510961058087015109089050806132808401525080817f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e61058085015109610b4084015109818183847f1a514dd9f80de355133414990bffdc137169ffbf79f1b0988ce4dc4b27adb4e36105808801510961058087015109089050806132a08401525080817f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e861058085015109610b4084015109818183847f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d716196105808801510961058087015109089050806132c08401525080817f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161961058085015109610b4084015109818183847f20198517670312541561a1720d2538ac357df59dafa0d41bd7235a97f2f364376105808801510961058087015109086132e0840152506131008201516131808301518291900961330083015261312082015181816131408501510990508061332084015281816131608501510990508061334084015281816131e0850151099050806133608401528181613180850151099050806133808401528181613200850151099050806133a08401528181613220850151099050806133c08401528181613240850151099050806133e084015281816132608501510990508061340084015281816132808501510990508061342084015281816132a08501510990508061344084015281816131a08501510990508061346084015281816132c08501510990508061348084015281816132e0850151099050806134a08401528181613300850151099050806134c0840152506020613500830152602061352083015260206135408301526134c08201516135608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6135808301526000805160206154138339815191526135a083015282600160206134e0850160c0613500870160055afa141692506134e08201516000613300840151905082826134a0860151096133008501528282820991506132e084015190508282613480860151096132e08501528282820991506132c084015190508282613460860151096132c08501528282820991506131a084015190508282613440860151096131a08501528282820991506132a084015190508282613420860151096132a08501528282820991506132808401519050828261340086015109613280850152828282099150613260840151905082826133e086015109613260850152828282099150613240840151905082826133c086015109613240850152828282099150613220840151905082826133a086015109613220850152828282099150613200840151905082826133808601510961320085015282828209915061318084015190508282613360860151096131808501528282820991506131e084015190508282613340860151096131e08501528282820991506131608401519050828261332086015109613160850152828282099150613140840151905082826131208601510961314085015282828209613120850181905261314085015190925083915082900890508181613160850151086135c0840152506131808201516131c0830151829190096135e08301526131e08201518061360084015250806132608301516131c0840151096136208301526132008201518181613220850151089050818161324085015108613640840152506131a08201516131c08301518291900961366083015261328082015181816132a085015108613680840152506133008201516131c0830151829190096136a08301526132c082015181816132e0850151086136c0840152506135c082015161360083015182908290099050806136e084015281816136408501510990508061370084015281816136808501510990508061372084015281816136c08501510990508061374084015250602061378083015260206137a083015260206137c08301526137408201516137e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6138008301526000805160206154138339815191526138208301528260016020613760850160c0613780870160055afa1416925061376082015160006136c084015190508282613720860151096136c08501528282820991506136808401519050828261370086015109613680850152828282099150613640840151905082826136e086015109613640850152828282099150613600840151905082826135c086015109613600850152828282096135c085015250506136008201516135e08301518291900961384083015280613640830151613620840151096138608301528061368083015161366084015109613880830152806136c08301516136a0840151096138a0830152610a40820151819080096138c08301819052610a408301518291096138e08301819052610a408301518291096139008301819052610a408301518291096139208301819052610a408301518291096139408301819052610a408301518291096139608301819052610a408301518291096139808301819052610a408301518291096139a08301819052610a408301518291096139c08301819052610a408301518291096139e08301819052610a40830151829109613a008301819052610a40830151829109613a208301819052610a40830151829109613a408301819052610a40830151829109613a608301819052610a40830151829109613a808301819052610a40830151829109613aa08301819052610a40830151829109613ac08301819052610a40830151829109613ae08301819052610a40830151829109613b008301819052610a40830151829109613b20830152610aa082015181908009613b408301819052610aa0830151829109613b608301819052610aa0830151829109613b808301819052610aa0830151829109613ba0830152806131208301516105c084015109818183613140860151610600870151090890508181836131608601516106808701510908613bc084018190526135c08401518392509009613be0830152806001613be0840151830309613c00830152806131208301516105e084015109818183613140860151610620870151090890508181836131608601516106608701510908613c2084018190526135c08401518392509009613c408301819052610a408301518291820309613c6083015280610a40830151600109613c8083015280613c60830151613c0084015108613ca0830152806001613ca084015109613cc0830152806001613c8084015109613ce0830152806135e0830151600109613d00830152806131e083015161064084015109613d208301819052613840830151829109613d40830152806001613d40840151830309613d60830152806001613d0084015109613d80830152806131e0830151610a0084015109613da08301819052613840830151829109613dc08301819052610a408301518291820309613de083015280610a40830151613d0084015109613e0083015280613de0830151613d6084015108613e20830152806131e08301516106a084015109613e408301819052613840830151829109613e6083018190526138c08301518291820309613e80830152806138c0830151613d0084015109613ea083015280613e80830151613e2084015108613ec0830152806131e08301516106c084015109613ee08301819052613840830151829109613f0083018190526138e08301518291820309613f20830152806138e0830151613d0084015109613f4083015280613f20830151613ec084015108613f60830152806131e08301516106e084015109613f808301819052613840830151829109613fa083018190526139008301518291820309613fc083015280613900830151613d0084015109613fe083015280613fc0830151613f6084015108614000830152806131e08301516107008401510961402083018190526138408301518291096140408301819052613920830151829182030961406083015280613920830151613d008401510961408083015280614060830151614000840151086140a0830152806131e0830151610720840151096140c083018190526138408301518291096140e08301819052613940830151829182030961410083015280613940830151613d0084015109614120830152806141008301516140a084015108614140830152806131e0830151610740840151096141608301819052613840830151829109614180830181905261396083015182918203096141a083015280613960830151613d00840151096141c0830152806141a0830151614140840151086141e0830152806131e08301516107608401510961420083018190526138408301518291096142208301819052613980830151829182030961424083015280613980830151613d0084015109614260830152806142408301516141e084015108614280830152806131e0830151610780840151096142a083018190526138408301518291096142c083018190526139a083015182918203096142e0830152806139a0830151613d0084015109614300830152806142e083015161428084015108614320830152806131e08301516107a084015109614340830181905261384083015182910961436083018190526139c08301518291820309614380830152806139c0830151613d00840151096143a083015280614380830151614320840151086143c0830152806131e08301516107c0840151096143e0830181905261384083015182910961440083018190526139e08301518291820309614420830152806139e0830151613d0084015109614440830152806144208301516143c084015108614460830152806131e08301516107e08401510961448083018190526138408301518291096144a08301819052613a0083015182918203096144c083015280613a00830151613d00840151096144e0830152806144c083015161446084015108614500830152806131e08301516108208401510961452083018190526138408301518291096145408301819052613a20830151829182030961456083015280613a20830151613d008401510961458083015280614560830151614500840151086145a0830152806131e0830151610840840151096145c083018190526138408301518291096145e08301819052613a40830151829182030961460083015280613a40830151613d0084015109614620830152806146008301516145a084015108614640830152806131e08301516108608401510961466083018190526138408301518291096146808301819052613a6083015182918203096146a083015280613a60830151613d00840151096146c0830152806146a0830151614640840151086146e0830152806131e08301516108808401510961470083018190526138408301518291096147208301819052613a80830151829182030961474083015280613a80830151613d0084015109614760830152806147408301516146e084015108614780830152806131e08301516108a0840151096147a083018190526138408301518291096147c08301819052613aa083015182918203096147e083015280613aa0830151613d0084015109614800830152806147e083015161478084015108614820830152806131e08301516108c08401510961484083018190526138408301518291096148608301819052613ac0830151829182030961488083015280613ac0830151613d00840151096148a083015280614880830151614820840151086148c0830152806135e0830151612f60840151096148e0830152806135e0830151612f8084015109614900830152806135e0830151612fa084015109614920830152806135e0830151612fc084015109614940830152806131e0830151612fe08401510961496083018190526138408301518291096149808301819052613ae083015182918203096149a083015280613ae0830151613d00840151096149c083015280613ae08301516148e0840151096149e083015280613ae083015161490084015109614a0083015280613ae083015161492084015109614a2083015280613ae083015161494084015109614a40830152806149a08301516148c084015108614a60830152806131e083015161080084015109614a808301819052613840830151829109614aa08301819052613b008301518291820309614ac083015280613b00830151613d0084015109614ae083015280614ac0830151614a6084015108614b008301819052610aa0830151829109614b2083015280610aa0830151613d8084015109614b4083015280610aa0830151613e0084015109614b6083015280610aa0830151613ea084015109614b8083015280610aa0830151613f4084015109614ba083015280610aa0830151613fe084015109614bc083015280610aa083015161408084015109614be083015280610aa083015161412084015109614c0083015280610aa08301516141c084015109614c2083015280610aa083015161426084015109614c4083015280610aa083015161430084015109614c6083015280610aa08301516143a084015109614c8083015280610aa083015161444084015109614ca083015280610aa08301516144e084015109614cc083015280610aa083015161458084015109614ce083015280610aa083015161462084015109614d0083015280610aa08301516146c084015109614d2083015280610aa083015161476084015109614d4083015280610aa083015161480084015109614d6083015280610aa08301516148a084015109614d8083015280610aa08301516149c084015109614da083015280610aa08301516149e084015109614dc083015280610aa0830151614a0084015109614de083015280610aa0830151614a2084015109614e0083015280610aa0830151614a4084015109614e2083015280610aa0830151614ae084015109614e4083015280614b20830151613cc084015108614e6083015280613620830151600109614e80830152806132008301516108e084015109818183613220860151610900870151090890508181836132408601516109208701510908614ea084018190526138608401518392509009614ec0830152806001614ec0840151830309614ee0830152806001614e8084015109614f0083015280613b40830151614ee084015109614f2083015280613b40830151614f0084015109614f4083015280614f20830151614e6084015108614f6083015280613660830151600109614f8083015280613280830151610940840151098181836132a08601516109608701510908614fa084018190526138808401518392509009614fc0830152806001614fc0840151830309614fe0830152806001614f808401510961500083015280613280830151610980840151098181836132a08601516109a08701510908615020840181905261388084015183925090096150408301819052610a40830151829182030961506083015280610a40830151614f808401510961508083015280615060830151614fe0840151086150a08301819052613b608301518291096150c083015280613b60830151615000840151096150e083015280613b6083015161508084015109615100830152806150c0830151614f6084015108615120830152806136a0830151600109615140830152806132c08301516109c0840151098181836132e08601516109e0870151090861516084018190526138a084015183925090096151808301528060016151808401518303096151a0830152806001615140840151096151c083015280613b808301516151a0840151096151e083015280613b808301516151c084015109615200830152806151e083015161512084015108615220830152806131c083015160010961524083015280610b408301516001096152608301526001615280830181815260026152a08501526152208401516152c085015284919060409060608160075afa141692506152808201516152e08301526152a08201516153008301526060820151615320830152608082015161534083015282600160406152e0850160806152e0870160065afa1416925060a082015161536083015260c0820151615380830152613ce08201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa1416925060e0820151615440830152610100820151615460830152614b40820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692506101c08201516155208301526101e0820151615540830152614b60820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f23a3b90b52101f0a6b5743b3e901cc1ca3fedcf56639e3f5d092c1fe8918dd496156008301527f2d1ac29c598a842f7865a78359fe925ab012907df3ef22ecee8c3e38775c47fd615620830152614b80820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f03889f612bd17e011b13902673a70688bbacdf22704cc8295740a0b855955fc06156e08301527f077a491ddd81dbd1802d89735ae881c56da97f908e0bb6a3a8ad6fd9f72db123615700830152614ba082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f293f3eeabeb387e78c97a4de420d2336ff8ed1aaadf797c7dc3e622c9f1440526157c08301527f04f8141148a083ed78d264b622ccd39fdc2e5a4d4309def83c65f641fa1f73ae6157e0830152614bc082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f153842f7c3d4213d1a0bdf0272dc0ac05b87949495a94680ea07f5528cd4cb656158a08301527f197481eee392189181d33d51883b612dc4b9b7b40ac3c516d04ef58b4458f8416158c0830152614be08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f2eb2df9649175ed689ae9b18bd9c2da55e06f28b8bade40ece584fe646987af26159808301527f060bd862d267d622becf447c96e00a075a556a12d57a89cdfcccd59180d6e1836159a0830152614c008201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f261ab047cacbf6fda910b594e5a47fce17d7bf5912a803a159724638ac9a9293615a608301527f1c19cf99cd99c0a2995e7b540f0e131d5a76ada19f52dbf97bf3f7e048e24d57615a80830152614c20820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f09852cc4d7e43585f80a71bb658d117c8bad4afd38c56250f79e2fe5ea36cbea615b408301527f0eafdf1dc0ebc50c66a28ef4e4ce11d67dc26835ee8fca885308c4e800e503db615b60830152614c40820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f060d05d9347318b8c482f43d589babe34c4feac67e633b7c7d205124e5942031615c208301527f126bce5e065317f42c4ea09165d00008202438e1c490d572c6b76613f21a1ebf615c40830152614c60820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f1d0f94f3535e58b5d06c339b6364b77cafc3894f0189d777a08f20ce239a1a34615d008301527f0b53ad507c469a238239f93e42e07194761f396948a8d4af1b2ef3eda0ba369f615d20830152614c80820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f05ffd6f47fadc13d413ff73d3dcd2b5413970d2328ace551b3b1d5f20a687375615de08301527f267595ab27c68ff69d06c8c28585973ef0fbad8e0982871a193b026541e27893615e00830152614ca0820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f072dca4b7136fbd39742610eeae201e76bc2295ddc20cc18dd6b19aa7b724b13615ec08301527f23048e9bb2debeafcf95628ab81b03275cdee33bca18d579dde2661f64645ec5615ee0830152614cc0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f05469c240f7b5fedc125ba1ee66cae1377ec75579599278f630f2d7640994fec615fa08301527f08b814cfa26074aade7bab13b494f598aa5bfdbc49d0df4c4390dd69285d03d0615fc0830152614ce0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f07faf619bc79f6e8ecd37ee152e6befc7b7789c1b594544bf208493392a8ee286160808301527f2a91842e18f3ac761e5f65edc640dd42ef6d9115b649ad3acdff6cced7a274aa6160a0830152614d008201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa141692507f0fd4442f53e6b5a5f860c2c811cf4e498642314abc354e0a174be6b8bc0e27e56161608301527f091f3fcbe89a23c4458c2e38c7b6444e28d8244c08549e9525ceedf4a320cbc0616180830152614d208201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692507f050cba2ca48cc882687a9e66867e984e2ce5494778a8bcaffdd2296ba9abdb566162408301527f0e44d0ab2133714afce93a354d6271470c293f18ef29ecc874416f81ffb92818616260830152614d40820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692507f2f69a41fff5cbe55da07d30e789a0d7660d3e841c70ebb326f5825610a4a5c086163208301527f1fe7e7411a599e8addf546471194a4851d36c711a88e926632f571f0d91fc9f6616340830152614d60820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa141692507f26a5a8097f66050a9a3d815d3915eb122d75020777f9e87b160e67cc7fa17e5e6164008301527f12c0173fdec4f54e72a0ab39fd9a5ffa14364bbb1ef304610af17195b993b316616420830152614d80820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506104208201516164e0830152610440820151616500830152614da082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506104608201516165c08301526104808201516165e0830152614dc082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa141692506104a08201516166a08301526104c08201516166c0830152614de08201516166e083015282600160406166a0850160606166a0870160075afa141692506166208201516167008301526166408201516167208301526166a08201516167408301526166c0820151616760830152826001604061670085016080616700870160065afa141692506104e08201516167808301526105008201516167a0830152614e008201516167c0830152826001604061678085016060616780870160075afa141692506167008201516167e08301526167208201516168008301526167808201516168208301526167a082015161684083015282600160406167e0850160806167e0870160065afa14169250610520820151616860830152610540820151616880830152614e208201516168a0830152826001604061686085016060616860870160075afa141692506167e08201516168c08301526168008201516168e083015261686082015161690083015261688082015161692083015282600160406168c0850160806168c0870160065afa141692506103808201516169408301526103a0820151616960830152614e40820151616980830152826001604061694085016060616940870160075afa141692506168c08201516169a08301526168e08201516169c08301526169408201516169e0830152616960820151616a0083015282600160406169a0850160806169a0870160065afa141692506102c0820151616a208301526102e0820151616a40830152614f40820151616a608301528260016040616a2085016060616a20870160075afa141692506169a0820151616a808301526169c0820151616aa0830152616a20820151616ac0830152616a40820151616ae08301528260016040616a8085016080616a80870160065afa14169250610300820151616b00830152610320820151616b208301526150e0820151616b408301528260016040616b0085016060616b00870160075afa14169250616a80820151616b60830152616aa0820151616b80830152616b00820151616ba0830152616b20820151616bc08301528260016040616b6085016080616b60870160065afa14169250610340820151616be0830152610360820151616c00830152615100820151616c208301528260016040616be085016060616be0870160075afa14169250616b60820151616c40830152616b80820151616c60830152616be0820151616c80830152616c00820151616ca08301528260016040616c4085016080616c40870160065afa14169250610180820151616cc08301526101a0820151616ce0830152615200820151616d008301528260016040616cc085016060616cc0870160075afa14169250616c40820151616d20830152616c60820151616d40830152616cc0820151616d60830152616ce0820151616d808301528260016040616d2085016080616d20870160065afa14169250610ae0820151616da0830152610b00820151616dc08301526152408201518103616de0830152508160016040616da084016060616da0860160075afa14169150616d20810151616e00820152616d40810151616e20820152616da0810151616e40820152616dc0810151616e608201528160016040616e0084016080616e00860160065afa14169150610b80810151616e80820152610ba0810151616ea0820152615260810151616ec08201528160016040616e8084016060616e80860160075afa14169150616e00810151616ee0820152616e20810151616f00820152616e80810151616f20820152616ea0810151616f408201528160016040616ee084016080616ee0860160065afa14169150616ee0810151616f60820152616f00810151616f808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2616fa08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed616fc08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b616fe08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa617000820152610b80810151617020820152610ba08101516170408201527f1d34ba6e3b52afa8a8df056bfc5157fa16e2c5bb045aab7186aab58f70927fbc6170608201527f0b4a022eb8fc503d9d91660c783fc6e37ae61570ebe4883f3663d5b4a435665e6170808201527f2495e03d5e5c9d6acf62cdf715118eebbda912e3092dfe3e9813ed642cdf04126170a08201527f0b9a8ccf1bc9f1b36b74792ad10007ce579e8ba5574a9880d6dff4da84768efe6170c08201528160016020616f608401610180616f60860160085afa616f6093909301516001149214161691505092915050565b604051806170c00160405280610386906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156152b2576152b2615273565b604052919050565b600082601f8301126152cb57600080fd5b813567ffffffffffffffff8111156152e5576152e5615273565b6152f8601f8201601f1916602001615289565b81815284602083860101111561530d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561533d57600080fd5b823567ffffffffffffffff8082111561535557600080fd5b818501915085601f83011261536957600080fd5b813560208282111561537d5761537d615273565b8160051b61538c828201615289565b928352848101820192828101908a8511156153a657600080fd5b958301955b848710156153c4578635825295830195908301906153ab565b97505050860135925050808211156153db57600080fd5b506153e8858286016152ba565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220acce6e0c3fd5aa5773e58c5af181185c75eedbaee08cdea5f8643c6575b25b4a64736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e36600461532a565b610057565b604051901515815260200160405180910390f35b60006001610063615253565b6000805160206154138339815191526100d9565b6000805160206153f383398151915280831081831016908380096000805160206153f38339815191528384096000805160206153f383398151915284820990506000805160206153f38339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301527f28c894f41fc22dc4314404d520858054b873e3fa824b0b79c28069864128959c600083015260208501518060608401526040860151806080850152846101388284610077565b169450505060608501518060a084015260808601518060c08501528461015e8284610077565b169450505060a08501518060e084015260c086015180610100850152846101858284610077565b16945050506101206000830120610120830152610120820151818106610140840152806101608401525060e085015180610180840152610100860151806101a0850152846101d38284610077565b1694505050610120850151806101c0840152610140860151806101e0850152846101fd8284610077565b60a061016087012061020087018190528581066102208801526102408701521694506001915050610260830153602161024083012061026083018190528181066102808401526102a08301526101608501516102c083018190526101808601516102e08401819052846102708284610077565b16945050506101a0850151806103008401526101c0860151806103208501528461029a8284610077565b16945050506101e08501518061034084015261020086015180610360850152846102c48284610077565b169450505061022085015180610380840152610240860151806103a0850152846102ee8284610077565b16945050506101206102a08301206103c08301526103c08201518181066103e0840152806104008401525061026085015180610420840152610280860151806104408501528461033e8284610077565b16945050506102a0850151806104608401526102c086015180610480850152846103688284610077565b16945050506102e0850151806104a0840152610300860151806104c0850152846103928284610077565b1694505050610320850151806104e084015261034086015180610500850152846103bc8284610077565b16945050506103608501518061052084015261038086015180610540850152846103e68284610077565b1694505050610160610400830120610560830152610560820151818106610580840152806105a084015250806103a0860151066105c0830152806103c0860151066105e0830152806103e086015106610600830152806104008601510661062083015280610420860151066106408301528061044086015106610660830152806104608601510661068083015280610480860151066106a0830152806104a0860151066106c0830152806104c0860151066106e0830152806104e086015106610700830152806105008601510661072083015280610520860151066107408301528061054086015106610760830152806105608601510661078083015280610580860151066107a0830152806105a0860151066107c0830152806105c0860151066107e0830152806105e086015106610800830152806106008601510661082083015280610620860151066108408301528061064086015106610860830152806106608601510661088083015280610680860151066108a0830152806106a0860151066108c0830152806106c0860151066108e0830152806106e086015106610900830152806107008601510661092083015280610720860151066109408301528061074086015106610960830152806107608601510661098083015280610780860151066109a0830152806107a0860151066109c0830152806107c0860151066109e0830152806107e086015106610a008301526104806105a0830120610a20830152610a20820151818106610a4084015280610a60840152506001610a808301536021610a60830120610a808301819052818106610aa0840152610ac0830152610800850151610ae08301819052610820860151610b0084018190528461066f8284610077565b16945050506060610ac0830120610b20830152610b20820151818106610b4084015280610b608401525061084085015180610b8084015261086086015180610ba0850152846106be8284610077565b16945050508061058083015161058084015109610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830181905281908009610ce0830181905281908009610d00830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610d0084015108610d20830152807f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610d2084015109610d40830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d4084015109610d60830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff61058084015108610d80830152807f2498c2d3affa1baaf6419dbccb6a054bb87359c02eade5aeacd86c84757b9051610d4084015109610da0830152807f0bcb8b9f3137847ec20ea7f9b61753116fc08e884b0b8ae29709890f7a846fb061058084015108610dc0830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d4084015109610de0830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc61058084015108610e00830152807f28771071ab1633014eae27cfc16d5ebe08a8fe2fc9e85044e4a45f82c14cd825610d4084015109610e20830152807f07ed3e01361b6d2869a21de6c013f99f1f8aea18afd1204c5f3d96112eb327dc61058084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d4084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e61058084015108610e80830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610d4084015109610ea0830152807f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e761058084015108610ec0830152806001610d4084015109610ee0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058084015108610f00830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610d4084015109610f20830152807f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa261058084015108610f40830152610d808201518181610dc085015109905080610f608401528181610e0085015109905080610f808401528181610e4085015109905080610fa08401528181610e8085015109905080610fc08401528181610ec085015109905080610fe08401528181610f00850151099050806110008401528181610f40850151099050806110208401528181610d208501510990508061104084015250602061108083015260206110a083015260206110c08301526110408201516110e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6111008301526000805160206154138339815191526111208301528260016020611060850160c0611080870160055afa141692506110608201516000610d208401519050828261102086015109610d20850152828282099150610f408401519050828261100086015109610f40850152828282099150610f0084015190508282610fe086015109610f00850152828282099150610ec084015190508282610fc086015109610ec0850152828282099150610e8084015190508282610fa086015109610e80850152828282099150610e4084015190508282610f8086015109610e40850152828282099150610e0084015190508282610f6086015109610e00850152828282099150610dc084015190508282610d8086015109610dc085015282828209610d808501819052610d608501518493509091500961114083015280610dc0830151610da08401510961116083015280610e00830151610de08401510961118083015280610e40830151610e20840151096111a083015280610e80830151610e60840151096111c083015280610ec0830151610ea0840151096111e083015280610f00830151610ee08401510961120083015280610f40830151610f20840151096112208301528060208301516112008401510981818360408601516112208701510908611240840152506106e08201516105c0830151829190086112608301819052819080096112808301819052819080096112a0830152806112a0830151611260840151096112c0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad56112c0840151096112e0830152806107008301516105e0840151086113008301819052819080096113208301819052819080096113408301528061134083015161130084015109611360830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e861136084015109611380830152806113808301516112e0840151086113a08301528061060083015182036113a0840151086113c083018190526107808301518291096113e0830152806113e08301516103e084015109611400830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff96112c084015109611420830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113608401510961144083015280611440830151611420840151086114608301528061062083015182036114608401510861148083018190526107808301518291096114a0830152806114a0830151611400840151086114c0830152806114c08301516103e0840151096114e08301528061064083015182036112c08401510861150083018190526107a0830151829109611520830152806115208301516114e084015108611540830152806115408301516103e084015109611560830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561064084015109611580830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611300840151096115a0830152806115a0830151611580840151086115c083018190526106a08301518291086115e0830181905281908009611600830181905281908009611620830152806116208301516115e084015109611640830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e6661060084015109611660830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6106208401510961168083015280611680830151611660840151086116a0830152806116a08301518203611640840151086116c083018190526107a08301518291096116e0830152806116e083015161156084015108611700830152806117008301516103e084015109611720830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961064084015109611740830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c861130084015109611760830152806117608301516117408401510861178083018190526106c08301518291086117a0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610600840151096117c0830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be610620840151096117e0830152806117e08301516117c0840151086118008301528061180083015182036117a08401510861182083018190526107a08301518291096118408301528061184083015161172084015108611860830152806118608301516103e0840151096118808301528061076083015182036001086118a083018190526107608301518291096118c08301528061076083015182036002086118e083018190526118c08301518291096119008301528061076083015182036004086119208301819052611900830151829109611940830152806105c0830151610680840151086119608301528061060083015182036119608401510861198083018190526119408301518291096119a0830152806119a0830151611880840151086119c0830152806119c08301516103e0840151096119e083015280610620830151820361066084015108611a008301819052611940830151829109611a2083015280611a208301516119e084015108611a4083015280611a408301516103e084015109611a60830152806107c08301516113c084015109611a8083015280611a80830151611a6084015108611aa083015280611aa08301516103e084015109611ac0830152806107c083015161148084015109611ae083015280611ae0830151611ac084015108611b0083015280611b008301516103e084015109611b20830152806107e083015161150084015109611b4083015280611b40830151611b2084015108611b6083015280611b608301516103e084015109611b80830152806107e08301516116c084015109611ba083015280611ba0830151611b8084015108611bc083015280611bc08301516103e084015109611be0830152806107e083015161182084015109611c0083015280611c00830151611be084015108611c2083015280611c208301516103e084015109611c40830152806107608301518203600308611c608301819052611900830151829109611c8083015280611c8083015161198084015109611ca083015280611ca0830151611c4084015108611cc083015280611cc08301516103e084015109611ce083015280611c80830151611a0084015109611d0083015280611d00830151611ce084015108611d2083015280611d208301516103e084015109611d40830152806107608301516118e084015109611d6083015280611d60830151611c6084015109611d8083015280611d8083015161192084015109611da083015280611da083015161064084015109611dc0830152806106408301518203600108611de08301819052611dc0830151829109611e0083015280611e00830151611d4084015108611e2083015280611e208301516103e084015109611e4083015280610640830151600209611e60830152806105c083015182036105e084015108611e808301819052611e60830151829109611ea0830152806105c0830151820361060084015108611ec083015280611ec08301518203611ea084015108611ee08301528061062083015182036105e084015108611f0083015280611f008301518203611ee084015108611f208301819052611da0830151829109611f4083015280611f40830151611e4084015108611f6083015280611f608301516103e084015109611f80830152806118c0830151611c6084015109611fa083015280611fa083015161192084015109611fc0830152806105e08301516105c084015108611fe0830152806106408301518203611fe0840151086120008301819052611fc083015182910961202083015280612020830151611f8084015108612040830152806120408301516103e0840151096120608301819052612020830151829108612080830152806120808301516103e0840151096120a0830152806108e083015182036001086120c083018190526112008301518291096120e0830152806120e08301516120a084015108612100830152806121008301516103e0840151096121208301526109408201518190800961214083015280610940830151820361214084015108612160830181905261114083015182910961218083015280612180830151612120840151086121a0830152806121a08301516103e0840151096121c0830152806109208301518203610940840151086121e08301819052611200830151829109612200830152806122008301516121c084015108612220830152806122208301516103e084015109612240830152806111408301518203600108612260830152806111808301516111608401510861228083018190526111a08301518291086122a083018190526111c08301518291086122c083018190526111e08301518291086122e0830152806122e08301518203612260840151086123008301528061022083015161082084015109612320830152806123208301516106a08401510861234083018190526102808301518291086123608301528061022083015161084084015109612380830152806123808301516105c0840151086123a083018190526102808301518291086123c083018190526123608301518291096123e08301528061022083015161086084015109612400830152806124008301516105e084015108612420830181905261028083015182910861244083018190526123e08301518291096124608301528061022083015161088084015109612480830152806124808301516106c0840151086124a083018190526102808301518291086124c083018190526124608301518291096124e08301819052610900830151829109612500830152806102208301516001096125208301528061252083015161058084015109612540830152806125408301516106a0840151086125608301819052610280830151829108612580830152806102208301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096125a0830152806125a0830151610580840151096125c0830152806125c08301516105c0840151086125e083018190526102808301518291086126008301819052612580830151829109612620830152806102208301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096126408301528061264083015161058084015109612660830152806126608301516105e08401510861268083018190526102808301518291086126a083018190526126208301518291096126c0830152806102208301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e52096126e0830152806126e083015161058084015109612700830152806127008301516106c084015108612720830181905261028083015182910861274083018190526126c083015182910961276083018190526108e0830151829109612780830152806127808301518203612500840151086127a083018190526123008301518291096127c0830152806127c0830151612240840151086127e0830152806127e08301516103e084015109612800830152806102208301516108a08401510961282083015280612820830151610640840151086128408301819052610280830151829108612860830152806102208301516108c08401510961288083015280612880830151611240840151086128a083018190526102808301518291086128c083018190526128608301518291096128e08301819052610960830151829109612900830152806102208301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612920830152806129208301516105808401510961294083015280612940830151610640840151086129608301819052610280830151829108612980830152806102208301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d096129a0830152806129a0830151610580840151096129c0830152806129c0830151611240840151086129e08301819052610280830151829108612a008301819052612980830151829109612a208301819052610940830151829109612a4083015280612a40830151820361290084015108612a608301819052612300830151829109612a8083015280612a8083015161280084015108612aa083015280612aa08301516103e084015109612ac0830152806109808301518203600108612ae08301819052611200830151829109612b0083015280612b00830151612ac084015108612b2083015280612b208301516103e084015109612b4083015261098082015181908009612b60830152806109808301518203612b6084015108612b808301819052611140830151829109612ba083015280612ba0830151612b4084015108612bc083015280612bc08301516103e084015109612be0830152806102208301516109c084015108612c0083018190526109a0830151829109612c2083015280610280830151610a0084015108612c408301819052612c20830151829109612c608301528061060083015161010009612c8083015280612c8083015182036105c084015108612ca08301819052610740830151829109612cc08301819052610220830151829108612ce08301819052610980830151829109612d008301528061028083015161072084015108612d208301819052612d00830151829109612d4083015280612d408301518203612c6084015108612d608301819052612300830151829109612d8083015280612d80830151612be084015108612da083015280612da08301516103e084015109612dc083015280610a0083015182036109c084015108612de08301819052611200830151829109612e0083015280612e00830151612dc084015108612e2083015280612e208301516103e084015109612e4083015280612300830151612de084015109612e60830152806109e083015182036109c084015108612e808301819052612e60830151829109612ea083015280612ea0830151612e4084015108612ec0830152610d0082015181908009612ee08301819052610d00830151829109612f008301819052610d00830151829109612f208301819052610d00830151829109612f4083015280610d00830151600109612f6083015280612ee0830151600109612f8083015280612f00830151600109612fa083015280612f20830151600109612fc083015280610d20830151612ec084015109612fe083015280610580830151610bc08401510961300083015280600161058084015109613020830152806130208301518203610b4084015108613040830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f61058084015109613060830152806130608301518203610b4084015108613080830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610580840151096130a0830152806130a08301518203610b40840151086130c0830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610580840151096130e0830152806130e08301518203610b408401510861310083015280817f21054ce8b3cb9dc9b87af5c70c8f54994090ad8fa7e06caaf989ba5806b6798b610bc085015109610b4084015109818183847f0f5f018a2d66025fffd54fef74f203c3e7a33ab8d1d903e64a583b3be9498676610bc08801510961058087015109089050806131208401525080817f10ac009d2f31395e301635cd6d292978a4012197c24d6e63fb49943a70296136610bc085015109610b4084015109818183847f2696aa2788110c63ebbfd7f92b352ce93b28bbdae57b7cb94bc5885ee439e774610bc08801510961058087015109089050806131408401525080817f2510cae1618713ac17c9ef83f1a67645ed21f454d96bf1f072ca5b463e7f0c28610bc085015109610b4084015109818183847f0d6a07653c64f4112284cb8b23bf73adecaf4ee0fef51998549526f07b6defd7610bc088015109610580870151090861316084015250613040820151819060010961318083018190526130808301518291096131a083018190526131008301518291096131c0830152806001610b40840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058087015109089050806131e08401525080817f1d81b9bd5165d63a0d4a8370d37966eb243365d36ca235911564a783f8234cf2610bc085015109610b4084015109818183847f12e294b58fcbc9efab05c245ae07f172040082750d173b002e7d4e0ff7dcb30f610bc08801510961058087015109089050806132008401525080817f142f93c8919700eddb46a823a63f1726c05e6953fd8ba57ddf6ea70e7ebc8dcf610bc085015109610b4084015109818183847f2707d3cc5788c2cfc0ee9e5f5638da3b90cb6d8b97224a4521073ec9f10826fb610bc08801510961058087015109089050806132208401525080817f13d3d4db83b42c4d48afa6b5c9cbe3f49703d0caf1fdc301b0d4d3743ab60833610bc085015109610b4084015109818183847f223ed99d38075819043fa85ed3c54f3bfb5d62312139562ca82d9903b1b52e27610bc0880151096105808701510908613240840152506130c08201516131a08301518291900961326083015280817f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa361058085015109610b4084015109818183847f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e6105808801510961058087015109089050806132808401525080817f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e61058085015109610b4084015109818183847f1a514dd9f80de355133414990bffdc137169ffbf79f1b0988ce4dc4b27adb4e36105808801510961058087015109089050806132a08401525080817f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e861058085015109610b4084015109818183847f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d716196105808801510961058087015109089050806132c08401525080817f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161961058085015109610b4084015109818183847f20198517670312541561a1720d2538ac357df59dafa0d41bd7235a97f2f364376105808801510961058087015109086132e0840152506131008201516131808301518291900961330083015261312082015181816131408501510990508061332084015281816131608501510990508061334084015281816131e0850151099050806133608401528181613180850151099050806133808401528181613200850151099050806133a08401528181613220850151099050806133c08401528181613240850151099050806133e084015281816132608501510990508061340084015281816132808501510990508061342084015281816132a08501510990508061344084015281816131a08501510990508061346084015281816132c08501510990508061348084015281816132e0850151099050806134a08401528181613300850151099050806134c0840152506020613500830152602061352083015260206135408301526134c08201516135608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6135808301526000805160206154138339815191526135a083015282600160206134e0850160c0613500870160055afa141692506134e08201516000613300840151905082826134a0860151096133008501528282820991506132e084015190508282613480860151096132e08501528282820991506132c084015190508282613460860151096132c08501528282820991506131a084015190508282613440860151096131a08501528282820991506132a084015190508282613420860151096132a08501528282820991506132808401519050828261340086015109613280850152828282099150613260840151905082826133e086015109613260850152828282099150613240840151905082826133c086015109613240850152828282099150613220840151905082826133a086015109613220850152828282099150613200840151905082826133808601510961320085015282828209915061318084015190508282613360860151096131808501528282820991506131e084015190508282613340860151096131e08501528282820991506131608401519050828261332086015109613160850152828282099150613140840151905082826131208601510961314085015282828209613120850181905261314085015190925083915082900890508181613160850151086135c0840152506131808201516131c0830151829190096135e08301526131e08201518061360084015250806132608301516131c0840151096136208301526132008201518181613220850151089050818161324085015108613640840152506131a08201516131c08301518291900961366083015261328082015181816132a085015108613680840152506133008201516131c0830151829190096136a08301526132c082015181816132e0850151086136c0840152506135c082015161360083015182908290099050806136e084015281816136408501510990508061370084015281816136808501510990508061372084015281816136c08501510990508061374084015250602061378083015260206137a083015260206137c08301526137408201516137e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6138008301526000805160206154138339815191526138208301528260016020613760850160c0613780870160055afa1416925061376082015160006136c084015190508282613720860151096136c08501528282820991506136808401519050828261370086015109613680850152828282099150613640840151905082826136e086015109613640850152828282099150613600840151905082826135c086015109613600850152828282096135c085015250506136008201516135e08301518291900961384083015280613640830151613620840151096138608301528061368083015161366084015109613880830152806136c08301516136a0840151096138a0830152610a40820151819080096138c08301819052610a408301518291096138e08301819052610a408301518291096139008301819052610a408301518291096139208301819052610a408301518291096139408301819052610a408301518291096139608301819052610a408301518291096139808301819052610a408301518291096139a08301819052610a408301518291096139c08301819052610a408301518291096139e08301819052610a40830151829109613a008301819052610a40830151829109613a208301819052610a40830151829109613a408301819052610a40830151829109613a608301819052610a40830151829109613a808301819052610a40830151829109613aa08301819052610a40830151829109613ac08301819052610a40830151829109613ae08301819052610a40830151829109613b008301819052610a40830151829109613b20830152610aa082015181908009613b408301819052610aa0830151829109613b608301819052610aa0830151829109613b808301819052610aa0830151829109613ba0830152806131208301516105c084015109818183613140860151610600870151090890508181836131608601516106808701510908613bc084018190526135c08401518392509009613be0830152806001613be0840151830309613c00830152806131208301516105e084015109818183613140860151610620870151090890508181836131608601516106608701510908613c2084018190526135c08401518392509009613c408301819052610a408301518291820309613c6083015280610a40830151600109613c8083015280613c60830151613c0084015108613ca0830152806001613ca084015109613cc0830152806001613c8084015109613ce0830152806135e0830151600109613d00830152806131e083015161064084015109613d208301819052613840830151829109613d40830152806001613d40840151830309613d60830152806001613d0084015109613d80830152806131e0830151610a0084015109613da08301819052613840830151829109613dc08301819052610a408301518291820309613de083015280610a40830151613d0084015109613e0083015280613de0830151613d6084015108613e20830152806131e08301516106a084015109613e408301819052613840830151829109613e6083018190526138c08301518291820309613e80830152806138c0830151613d0084015109613ea083015280613e80830151613e2084015108613ec0830152806131e08301516106c084015109613ee08301819052613840830151829109613f0083018190526138e08301518291820309613f20830152806138e0830151613d0084015109613f4083015280613f20830151613ec084015108613f60830152806131e08301516106e084015109613f808301819052613840830151829109613fa083018190526139008301518291820309613fc083015280613900830151613d0084015109613fe083015280613fc0830151613f6084015108614000830152806131e08301516107008401510961402083018190526138408301518291096140408301819052613920830151829182030961406083015280613920830151613d008401510961408083015280614060830151614000840151086140a0830152806131e0830151610720840151096140c083018190526138408301518291096140e08301819052613940830151829182030961410083015280613940830151613d0084015109614120830152806141008301516140a084015108614140830152806131e0830151610740840151096141608301819052613840830151829109614180830181905261396083015182918203096141a083015280613960830151613d00840151096141c0830152806141a0830151614140840151086141e0830152806131e08301516107608401510961420083018190526138408301518291096142208301819052613980830151829182030961424083015280613980830151613d0084015109614260830152806142408301516141e084015108614280830152806131e0830151610780840151096142a083018190526138408301518291096142c083018190526139a083015182918203096142e0830152806139a0830151613d0084015109614300830152806142e083015161428084015108614320830152806131e08301516107a084015109614340830181905261384083015182910961436083018190526139c08301518291820309614380830152806139c0830151613d00840151096143a083015280614380830151614320840151086143c0830152806131e08301516107c0840151096143e0830181905261384083015182910961440083018190526139e08301518291820309614420830152806139e0830151613d0084015109614440830152806144208301516143c084015108614460830152806131e08301516107e08401510961448083018190526138408301518291096144a08301819052613a0083015182918203096144c083015280613a00830151613d00840151096144e0830152806144c083015161446084015108614500830152806131e08301516108208401510961452083018190526138408301518291096145408301819052613a20830151829182030961456083015280613a20830151613d008401510961458083015280614560830151614500840151086145a0830152806131e0830151610840840151096145c083018190526138408301518291096145e08301819052613a40830151829182030961460083015280613a40830151613d0084015109614620830152806146008301516145a084015108614640830152806131e08301516108608401510961466083018190526138408301518291096146808301819052613a6083015182918203096146a083015280613a60830151613d00840151096146c0830152806146a0830151614640840151086146e0830152806131e08301516108808401510961470083018190526138408301518291096147208301819052613a80830151829182030961474083015280613a80830151613d0084015109614760830152806147408301516146e084015108614780830152806131e08301516108a0840151096147a083018190526138408301518291096147c08301819052613aa083015182918203096147e083015280613aa0830151613d0084015109614800830152806147e083015161478084015108614820830152806131e08301516108c08401510961484083018190526138408301518291096148608301819052613ac0830151829182030961488083015280613ac0830151613d00840151096148a083015280614880830151614820840151086148c0830152806135e0830151612f60840151096148e0830152806135e0830151612f8084015109614900830152806135e0830151612fa084015109614920830152806135e0830151612fc084015109614940830152806131e0830151612fe08401510961496083018190526138408301518291096149808301819052613ae083015182918203096149a083015280613ae0830151613d00840151096149c083015280613ae08301516148e0840151096149e083015280613ae083015161490084015109614a0083015280613ae083015161492084015109614a2083015280613ae083015161494084015109614a40830152806149a08301516148c084015108614a60830152806131e083015161080084015109614a808301819052613840830151829109614aa08301819052613b008301518291820309614ac083015280613b00830151613d0084015109614ae083015280614ac0830151614a6084015108614b008301819052610aa0830151829109614b2083015280610aa0830151613d8084015109614b4083015280610aa0830151613e0084015109614b6083015280610aa0830151613ea084015109614b8083015280610aa0830151613f4084015109614ba083015280610aa0830151613fe084015109614bc083015280610aa083015161408084015109614be083015280610aa083015161412084015109614c0083015280610aa08301516141c084015109614c2083015280610aa083015161426084015109614c4083015280610aa083015161430084015109614c6083015280610aa08301516143a084015109614c8083015280610aa083015161444084015109614ca083015280610aa08301516144e084015109614cc083015280610aa083015161458084015109614ce083015280610aa083015161462084015109614d0083015280610aa08301516146c084015109614d2083015280610aa083015161476084015109614d4083015280610aa083015161480084015109614d6083015280610aa08301516148a084015109614d8083015280610aa08301516149c084015109614da083015280610aa08301516149e084015109614dc083015280610aa0830151614a0084015109614de083015280610aa0830151614a2084015109614e0083015280610aa0830151614a4084015109614e2083015280610aa0830151614ae084015109614e4083015280614b20830151613cc084015108614e6083015280613620830151600109614e80830152806132008301516108e084015109818183613220860151610900870151090890508181836132408601516109208701510908614ea084018190526138608401518392509009614ec0830152806001614ec0840151830309614ee0830152806001614e8084015109614f0083015280613b40830151614ee084015109614f2083015280613b40830151614f0084015109614f4083015280614f20830151614e6084015108614f6083015280613660830151600109614f8083015280613280830151610940840151098181836132a08601516109608701510908614fa084018190526138808401518392509009614fc0830152806001614fc0840151830309614fe0830152806001614f808401510961500083015280613280830151610980840151098181836132a08601516109a08701510908615020840181905261388084015183925090096150408301819052610a40830151829182030961506083015280610a40830151614f808401510961508083015280615060830151614fe0840151086150a08301819052613b608301518291096150c083015280613b60830151615000840151096150e083015280613b6083015161508084015109615100830152806150c0830151614f6084015108615120830152806136a0830151600109615140830152806132c08301516109c0840151098181836132e08601516109e0870151090861516084018190526138a084015183925090096151808301528060016151808401518303096151a0830152806001615140840151096151c083015280613b808301516151a0840151096151e083015280613b808301516151c084015109615200830152806151e083015161512084015108615220830152806131c083015160010961524083015280610b408301516001096152608301526001615280830181815260026152a08501526152208401516152c085015284919060409060608160075afa141692506152808201516152e08301526152a08201516153008301526060820151615320830152608082015161534083015282600160406152e0850160806152e0870160065afa1416925060a082015161536083015260c0820151615380830152613ce08201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa1416925060e0820151615440830152610100820151615460830152614b40820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692506101c08201516155208301526101e0820151615540830152614b60820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f23a3b90b52101f0a6b5743b3e901cc1ca3fedcf56639e3f5d092c1fe8918dd496156008301527f2d1ac29c598a842f7865a78359fe925ab012907df3ef22ecee8c3e38775c47fd615620830152614b80820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f03889f612bd17e011b13902673a70688bbacdf22704cc8295740a0b855955fc06156e08301527f077a491ddd81dbd1802d89735ae881c56da97f908e0bb6a3a8ad6fd9f72db123615700830152614ba082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f293f3eeabeb387e78c97a4de420d2336ff8ed1aaadf797c7dc3e622c9f1440526157c08301527f04f8141148a083ed78d264b622ccd39fdc2e5a4d4309def83c65f641fa1f73ae6157e0830152614bc082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f153842f7c3d4213d1a0bdf0272dc0ac05b87949495a94680ea07f5528cd4cb656158a08301527f197481eee392189181d33d51883b612dc4b9b7b40ac3c516d04ef58b4458f8416158c0830152614be08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f2eb2df9649175ed689ae9b18bd9c2da55e06f28b8bade40ece584fe646987af26159808301527f060bd862d267d622becf447c96e00a075a556a12d57a89cdfcccd59180d6e1836159a0830152614c008201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f261ab047cacbf6fda910b594e5a47fce17d7bf5912a803a159724638ac9a9293615a608301527f1c19cf99cd99c0a2995e7b540f0e131d5a76ada19f52dbf97bf3f7e048e24d57615a80830152614c20820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f09852cc4d7e43585f80a71bb658d117c8bad4afd38c56250f79e2fe5ea36cbea615b408301527f0eafdf1dc0ebc50c66a28ef4e4ce11d67dc26835ee8fca885308c4e800e503db615b60830152614c40820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f060d05d9347318b8c482f43d589babe34c4feac67e633b7c7d205124e5942031615c208301527f126bce5e065317f42c4ea09165d00008202438e1c490d572c6b76613f21a1ebf615c40830152614c60820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f1d0f94f3535e58b5d06c339b6364b77cafc3894f0189d777a08f20ce239a1a34615d008301527f0b53ad507c469a238239f93e42e07194761f396948a8d4af1b2ef3eda0ba369f615d20830152614c80820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f05ffd6f47fadc13d413ff73d3dcd2b5413970d2328ace551b3b1d5f20a687375615de08301527f267595ab27c68ff69d06c8c28585973ef0fbad8e0982871a193b026541e27893615e00830152614ca0820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f072dca4b7136fbd39742610eeae201e76bc2295ddc20cc18dd6b19aa7b724b13615ec08301527f23048e9bb2debeafcf95628ab81b03275cdee33bca18d579dde2661f64645ec5615ee0830152614cc0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f05469c240f7b5fedc125ba1ee66cae1377ec75579599278f630f2d7640994fec615fa08301527f08b814cfa26074aade7bab13b494f598aa5bfdbc49d0df4c4390dd69285d03d0615fc0830152614ce0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f07faf619bc79f6e8ecd37ee152e6befc7b7789c1b594544bf208493392a8ee286160808301527f2a91842e18f3ac761e5f65edc640dd42ef6d9115b649ad3acdff6cced7a274aa6160a0830152614d008201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa141692507f0fd4442f53e6b5a5f860c2c811cf4e498642314abc354e0a174be6b8bc0e27e56161608301527f091f3fcbe89a23c4458c2e38c7b6444e28d8244c08549e9525ceedf4a320cbc0616180830152614d208201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692507f050cba2ca48cc882687a9e66867e984e2ce5494778a8bcaffdd2296ba9abdb566162408301527f0e44d0ab2133714afce93a354d6271470c293f18ef29ecc874416f81ffb92818616260830152614d40820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692507f2f69a41fff5cbe55da07d30e789a0d7660d3e841c70ebb326f5825610a4a5c086163208301527f1fe7e7411a599e8addf546471194a4851d36c711a88e926632f571f0d91fc9f6616340830152614d60820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa141692507f26a5a8097f66050a9a3d815d3915eb122d75020777f9e87b160e67cc7fa17e5e6164008301527f12c0173fdec4f54e72a0ab39fd9a5ffa14364bbb1ef304610af17195b993b316616420830152614d80820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506104208201516164e0830152610440820151616500830152614da082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506104608201516165c08301526104808201516165e0830152614dc082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa141692506104a08201516166a08301526104c08201516166c0830152614de08201516166e083015282600160406166a0850160606166a0870160075afa141692506166208201516167008301526166408201516167208301526166a08201516167408301526166c0820151616760830152826001604061670085016080616700870160065afa141692506104e08201516167808301526105008201516167a0830152614e008201516167c0830152826001604061678085016060616780870160075afa141692506167008201516167e08301526167208201516168008301526167808201516168208301526167a082015161684083015282600160406167e0850160806167e0870160065afa14169250610520820151616860830152610540820151616880830152614e208201516168a0830152826001604061686085016060616860870160075afa141692506167e08201516168c08301526168008201516168e083015261686082015161690083015261688082015161692083015282600160406168c0850160806168c0870160065afa141692506103808201516169408301526103a0820151616960830152614e40820151616980830152826001604061694085016060616940870160075afa141692506168c08201516169a08301526168e08201516169c08301526169408201516169e0830152616960820151616a0083015282600160406169a0850160806169a0870160065afa141692506102c0820151616a208301526102e0820151616a40830152614f40820151616a608301528260016040616a2085016060616a20870160075afa141692506169a0820151616a808301526169c0820151616aa0830152616a20820151616ac0830152616a40820151616ae08301528260016040616a8085016080616a80870160065afa14169250610300820151616b00830152610320820151616b208301526150e0820151616b408301528260016040616b0085016060616b00870160075afa14169250616a80820151616b60830152616aa0820151616b80830152616b00820151616ba0830152616b20820151616bc08301528260016040616b6085016080616b60870160065afa14169250610340820151616be0830152610360820151616c00830152615100820151616c208301528260016040616be085016060616be0870160075afa14169250616b60820151616c40830152616b80820151616c60830152616be0820151616c80830152616c00820151616ca08301528260016040616c4085016080616c40870160065afa14169250610180820151616cc08301526101a0820151616ce0830152615200820151616d008301528260016040616cc085016060616cc0870160075afa14169250616c40820151616d20830152616c60820151616d40830152616cc0820151616d60830152616ce0820151616d808301528260016040616d2085016080616d20870160065afa14169250610ae0820151616da0830152610b00820151616dc08301526152408201518103616de0830152508160016040616da084016060616da0860160075afa14169150616d20810151616e00820152616d40810151616e20820152616da0810151616e40820152616dc0810151616e608201528160016040616e0084016080616e00860160065afa14169150610b80810151616e80820152610ba0810151616ea0820152615260810151616ec08201528160016040616e8084016060616e80860160075afa14169150616e00810151616ee0820152616e20810151616f00820152616e80810151616f20820152616ea0810151616f408201528160016040616ee084016080616ee0860160065afa14169150616ee0810151616f60820152616f00810151616f808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2616fa08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed616fc08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b616fe08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa617000820152610b80810151617020820152610ba08101516170408201527f1d34ba6e3b52afa8a8df056bfc5157fa16e2c5bb045aab7186aab58f70927fbc6170608201527f0b4a022eb8fc503d9d91660c783fc6e37ae61570ebe4883f3663d5b4a435665e6170808201527f2495e03d5e5c9d6acf62cdf715118eebbda912e3092dfe3e9813ed642cdf04126170a08201527f0b9a8ccf1bc9f1b36b74792ad10007ce579e8ba5574a9880d6dff4da84768efe6170c08201528160016020616f608401610180616f60860160085afa616f6093909301516001149214161691505092915050565b604051806170c00160405280610386906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156152b2576152b2615273565b604052919050565b600082601f8301126152cb57600080fd5b813567ffffffffffffffff8111156152e5576152e5615273565b6152f8601f8201601f1916602001615289565b81815284602083860101111561530d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561533d57600080fd5b823567ffffffffffffffff8082111561535557600080fd5b818501915085601f83011261536957600080fd5b813560208282111561537d5761537d615273565b8160051b61538c828201615289565b928352848101820192828101908a8511156153a657600080fd5b958301955b848710156153c4578635825295830195908301906153ab565b97505050860135925050808211156153db57600080fd5b506153e8858286016152ba565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220acce6e0c3fd5aa5773e58c5af181185c75eedbaee08cdea5f8643c6575b25b4a64736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/abi/SolvencyVerifier.json b/backend/src/contracts/abi/SolvencyVerifier.json index ccce1a47..15519102 100644 --- a/backend/src/contracts/abi/SolvencyVerifier.json +++ b/backend/src/contracts/abi/SolvencyVerifier.json @@ -1 +1 @@ -{"_format":"hh-sol-artifact-1","contractName":"Verifier","sourceName":"src/SolvencyVerifier.sol","abi":[{"inputs":[{"internalType":"uint256[]","name":"pubInputs","type":"uint256[]"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50615012806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004614ed4565b610057565b604051901515815260200160405180910390f35b60006001610063614dfd565b600080516020614fbd8339815191526100d9565b600080516020614f9d8339815191528083108183101690838009600080516020614f9d833981519152838409600080516020614f9d8339815191528482099050600080516020614f9d8339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301528060608701510660608301527f162698bb2e5742e2b979910eff5bafabe8cc6b6c6eababb6a53627888c03be856000830152602085015180608084015260408601518060a0850152846101448284610077565b169450505060608501518060c084015260808601518060e08501528461016a8284610077565b169450505060a08501518061010084015260c086015180610120850152846101928284610077565b16945050506101406000830120610140830152610140820151818106610160840152806101808401525060e0850151806101a0840152610100860151806101c0850152846101e08284610077565b1694505050610120850151806101e0840152610140860151806102008501528461020a8284610077565b60a061018087012061022087018190528581066102408801526102608701521694506001915050610280830153602161026083012061028083018190528181066102a08401526102c08301526101608501516102e0830181905261018086015161030084018190528461027d8284610077565b16945050506101a0850151806103208401526101c086015180610340850152846102a78284610077565b16945050506101e08501518061036084015261020086015180610380850152846102d18284610077565b1694505050610220850151806103a0840152610240860151806103c0850152846102fb8284610077565b16945050506101206102c08301206103e08301526103e0820151818106610400840152806104208401525061026085015180610440840152610280860151806104608501528461034b8284610077565b16945050506102a0850151806104808401526102c0860151806104a0850152846103758284610077565b16945050506102e0850151806104c0840152610300860151806104e08501528461039f8284610077565b16945050506103208501518061050084015261034086015180610520850152846103c98284610077565b16945050506103608501518061054084015261038086015180610560850152846103f38284610077565b16945050506101606104208301206105808301526105808201518181066105a0840152806105c084015250806103a0860151066105e0830152806103c086015106610600830152806103e08601510661062083015280610400860151066106408301528061042086015106610660830152806104408601510661068083015280610460860151066106a083015280610480860151066106c0830152806104a0860151066106e0830152806104c086015106610700830152806104e08601510661072083015280610500860151066107408301528061052086015106610760830152806105408601510661078083015280610560860151066107a083015280610580860151066107c0830152806105a0860151066107e0830152806105c086015106610800830152806105e08601510661082083015280610600860151066108408301528061062086015106610860830152806106408601510661088083015280610660860151066108a083015280610680860151066108c0830152806106a0860151066108e0830152806106c086015106610900830152806106e08601510661092083015280610700860151066109408301528061072086015106610960830152806107408601510661098083015280610760860151066109a083015280610780860151066109c0830152806107a0860151066109e08301526104406105c0830120610a00830152610a00820151818106610a2084015280610a40840152506001610a608301536021610a40830120610a608301819052818106610a80840152610aa08301526107c0850151610ac083018190526107e0860151610ae08401819052846106608284610077565b16945050506060610aa0830120610b00830152610b00820151818106610b2084015280610b408401525061080085015180610b6084015261082086015180610b80850152846106af8284610077565b1694505050806105a08301516105a084015109610ba0830181905281908009610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610cc084015108610ce0830152807f3058355f447953c1ade231a513e0f80710e9db4e679b02351f90fd168b040001610ce084015109610d00830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb26610d0084015109610d20830152807f1a6cb0b91da01e6d7a1e7d76eeef7de63954cd24b5a8c2b95ad8712f455b04db6105a084015108610d40830152807f03b743d74fd9ddb41f920179ac30e04b0ebd93e580b9c0b50061087904110bd4610d0084015109610d60830152807f2cad0a9b9157c27598be443cd550781219765462f8ffafdc4380ed1aebeef42d6105a084015108610d80830152807f1f4d7180df5014849825f3c9b0e89d79432c51f48eb5846ae63b433f28aba10b610d0084015109610da0830152807f1116dcf201e18ba5202a51ecd098bae3e5079653eb03ec265da6b254c7545ef66105a084015108610dc0830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d0084015109610de0830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff6105a084015108610e00830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d0084015109610e20830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc6105a084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d0084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e6105a084015108610e80830152806001610d0084015109610ea0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a084015108610ec0830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d610d0084015109610ee0830152807f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44846105a084015108610f00830152807f0dd30b9ad8c173555d2a33029bc807ac165b61281e9054a173af7ff4e4fc88fc610d0084015109610f20830152807f229142d808702cd45b2612b3e5b950b111d887205b291befd032759f0b0377056105a084015108610f40830152610d408201518181610d8085015109905080610f608401528181610dc085015109905080610f808401528181610e0085015109905080610fa08401528181610e4085015109905080610fc08401528181610e8085015109905080610fe08401528181610ec0850151099050806110008401528181610f00850151099050806110208401528181610f40850151099050806110408401528181610ce0850151099050806110608401525060206110a083015260206110c083015260206110e08301526110608201516111008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff611120830152600080516020614fbd8339815191526111408301528260016020611080850160c06110a0870160055afa141692506110808201516000610ce08401519050828261104086015109610ce0850152828282099150610f408401519050828261102086015109610f40850152828282099150610f008401519050828261100086015109610f00850152828282099150610ec084015190508282610fe086015109610ec0850152828282099150610e8084015190508282610fc086015109610e80850152828282099150610e4084015190508282610fa086015109610e40850152828282099150610e0084015190508282610f8086015109610e00850152828282099150610dc084015190508282610f6086015109610dc0850152828282099150610d8084015190508282610d4086015109610d8085015282828209610d408501819052610d208501518493509091500961116083015280610d80830151610d608401510961118083015280610dc0830151610da0840151096111a083015280610e00830151610de0840151096111c083015280610e40830151610e20840151096111e083015280610e80830151610e608401510961120083015280610ec0830151610ea08401510961122083015280610f00830151610ee08401510961124083015280610f40830151610f20840151096112608301528060208301516112208401510981818360408601516112408701510908905081818360608601516112608701510908611280840152506107208201516105e0830151829190086112a08301819052819080096112c08301819052819080096112e0830152806112e08301516112a084015109611300830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561130084015109611320830152806107408301516106008401510861134083018190528190800961136083018190528190800961138083015280611380830151611340840151096113a0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e86113a0840151096113c0830152806113c0830151611320840151086113e08301528061062083015182036113e08401510861140083018190526107a08301518291096114208301528061142083015161040084015109611440830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961130084015109611460830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113a08401510961148083015280611480830151611460840151086114a08301528061064083015182036114a0840151086114c083018190526107a08301518291096114e0830152806114e08301516114408401510861150083015280611500830151610400840151096115208301528061066083015182036113008401510861154083018190526107c0830151829109611560830152806115608301516115208401510861158083015280611580830151610400840151096115a0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad5610660840151096115c0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611340840151096115e0830152806115e08301516115c08401510861160083018190526106e08301518291086116208301819052819080096116408301819052819080096116608301528061166083015161162084015109611680830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610620840151096116a0830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe610640840151096116c0830152806116c08301516116a0840151086116e0830152806116e083015182036116808401510861170083018190526107c0830151829109611720830152806117208301516115a0840151086117408301528061174083015161040084015109611760830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961066084015109611780830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c8611340840151096117a0830152806117a0830151611780840151086117c083018190526107008301518291086117e0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb0261062084015109611800830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6106408401510961182083015280611820830151611800840151086118408301528061184083015182036117e08401510861186083018190526107c083015182910961188083015280611880830151611760840151086118a0830152806118a0830151610400840151096118c08301528061078083015182036001086118e0830181905261078083015182910961190083015280610780830151820360020861192083018190526119008301518291096119408301528061078083015182036003086119608301819052611940830151829109611980830152806105e08301516106a0840151086119a08301528061062083015182036119a0840151086119c083018190526119808301518291096119e0830152806119e08301516118c084015108611a0083015280611a0083015161040084015109611a2083015280610640830151820361068084015108611a408301819052611980830151829109611a6083015280611a60830151611a2084015108611a8083015280611a8083015161040084015109611aa08301528061078083015161192084015109611ac083015280611ac083015161196084015109611ae0830152806107808301518203600408611b008301819052611ae0830151829109611b2083015280611b2083015161066084015109611b40830152806106608301518203600108611b608301819052611b40830151829109611b8083015280611b80830151611aa084015108611ba083015280611ba083015161040084015109611bc083015280610660830151600209611be0830152806105e0830151820361060084015108611c008301819052611be0830151829109611c20830152806105e0830151820361062084015108611c4083015280611c408301518203611c2084015108611c6083015280610640830151820361060084015108611c8083015280611c808301518203611c6084015108611ca08301819052611b20830151829109611cc083015280611cc0830151611bc084015108611ce083015280611ce083015161040084015109611d008301528061190083015161196084015109611d2083015280611d20830151611b0084015109611d40830152806106008301516105e084015108611d60830152806106608301518203611d6084015108611d808301819052611d40830151829109611da083015280611da0830151611d0084015108611dc083015280611dc083015161040084015109611de08301819052611da0830151829108611e0083015280611e0083015161040084015109611e2083015280611940830151611b0084015109611e408301528061060083015182036105e084015108611e6083015280600160701b611e6084015108611e80830152806106608301518203611e8084015108611ea08301819052611e40830151829109611ec083015280611ec0830151611e2084015108611ee083015280611ee083015161040084015109611f00830152806108c08301518203600108611f208301819052611220830151829109611f4083015280611f40830151611f0084015108611f6083015280611f6083015161040084015109611f8083015261092082015181908009611fa0830152806109208301518203611fa084015108611fc08301819052611160830151829109611fe083015280611fe0830151611f80840151086120008301528061200083015161040084015109612020830152806109008301518203610920840151086120408301819052611220830151829109612060830152806120608301516120208401510861208083015280612080830151610400840151096120a08301528061116083015182036001086120c0830152806111a0830151611180840151086120e083018190526111c083015182910861210083018190526111e083015182910861212083018190526112008301518291086121408301528061214083015182036120c0840151086121608301528061024083015161080084015109612180830152806121808301516106e0840151086121a083018190526102a08301518291086121c083015280610240830151610820840151096121e0830152806121e08301516105e08401510861220083018190526102a083015182910861222083018190526121c08301518291096122408301528061024083015161084084015109612260830152806122608301516106008401510861228083018190526102a08301518291086122a083018190526122408301518291096122c083015280610240830151610860840151096122e0830152806122e08301516107008401510861230083018190526102a083015182910861232083018190526122c083015182910961234083018190526108e083015182910961236083015280610240830151600109612380830152806123808301516105a0840151096123a0830152806123a08301516106e0840151086123c083018190526102a08301518291086123e0830152806102408301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a209612400830152806124008301516105a084015109612420830152806124208301516105e08401510861244083018190526102a083015182910861246083018190526123e0830151829109612480830152806102408301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096124a0830152806124a08301516105a0840151096124c0830152806124c0830151610600840151086124e083018190526102a08301518291086125008301819052612480830151829109612520830152806102408301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e5209612540830152806125408301516105a084015109612560830152806125608301516107008401510861258083018190526102a08301518291086125a083018190526125208301518291096125c083018190526108c08301518291096125e0830152806125e08301518203612360840151086126008301819052612160830151829109612620830152806126208301516120a0840151086126408301528061264083015161040084015109612660830152806102408301516108808401510961268083015280612680830151610660840151086126a083018190526102a08301518291086126c0830152806102408301516108a0840151096126e0830152806126e08301516112808401510861270083018190526102a083015182910861272083018190526126c08301518291096127408301819052610940830151829109612760830152806102408301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612780830152806127808301516105a0840151096127a0830152806127a0830151610660840151086127c083018190526102a08301518291086127e0830152806102408301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d09612800830152806128008301516105a084015109612820830152806128208301516112808401510861284083018190526102a083015182910861286083018190526127e083015182910961288083018190526109208301518291096128a0830152806128a08301518203612760840151086128c083018190526121608301518291096128e0830152806128e08301516126608401510861290083015280612900830151610400840151096129208301528061096083015182036001086129408301819052611220830151829109612960830152806129608301516129208401510861298083015280612980830151610400840151096129a0830152610960820151819080096129c08301528061096083015182036129c0840151086129e08301819052611160830151829109612a0083015280612a008301516129a084015108612a2083015280612a2083015161040084015109612a40830152806102408301516109a084015108612a608301819052610980830151829109612a80830152806102a08301516109e084015108612aa08301819052612a80830151829109612ac0830152806106c083015161010009612ae083015280612ae0830151820361066084015108612b008301819052610760830151829109612b208301819052610240830151829108612b408301819052610960830151829109612b60830152806102a083015161072084015108612b808301819052612b60830151829109612ba083015280612ba08301518203612ac084015108612bc08301819052612160830151829109612be083015280612be0830151612a4084015108612c0083015280612c0083015161040084015109612c20830152806109e083015182036109a084015108612c408301819052611220830151829109612c6083015280612c60830151612c2084015108612c8083015280612c8083015161040084015109612ca083015280612160830151612c4084015109612cc0830152806109c083015182036109a084015108612ce08301819052612cc0830151829109612d0083015280612d00830151612ca084015108612d20830152610cc082015181908009612d408301819052610cc0830151829109612d608301819052610cc0830151829109612d808301819052610cc0830151829109612da083015280610cc0830151600109612dc083015280612d40830151600109612de083015280612d60830151600109612e0083015280612d80830151600109612e2083015280610ce0830151612d2084015109612e40830152806105a0830151610ba084015109612e608301528060016105a084015109612e8083015280612e808301518203610b2084015108612ea0830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e36105a084015109612ec083015280612ec08301518203610b2084015108612ee0830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb266105a084015109612f0083015280612f008301518203610b2084015108612f20830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d6105a084015109612f4083015280612f408301518203610b2084015108612f6083015280817f2b0bd16731aaf34928c0661ba43310fbbf44baa457b980ce19affba7315792a4610ba085015109610b2084015109818183847f05587d0baf86ace08f8fdf9add4e476168ef2da421ffefc32a31f9ecbea86d5d610ba0880151096105a08701510908905080612f808401525080817f1e42214ea9b2db33296ba55096815a0a6d468af715ccfa9fab93b1e3701b7f62610ba085015109610b2084015109818183847f1648cc055b11af4e0f62923d9627e377b1d413c0864af4963a826fcc6a0231fa610ba0880151096105a08701510908905080612fa08401525080817f2960d84a95d8f00f740a3d1478feb6d4b196e34bf86b62b75041b14b389d49ce610ba085015109610b2084015109818183847f21fe615ace99028841c84393e39435ea26675e494fd4886263e6fedd3cba1f16610ba0880151096105a08701510908612fc084015250612ea08201518190600109612fe08301819052612f608301518291096130008301819052612ee083015182910961302083015280817f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44856105a085015109610b2084015109818183847f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a0880151096105a087015109089050806130408401525080817f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a085015109610b2084015109818183847f1d05f683f7bacf55bccd495a5703cb329ada890af08ac0d24959599e24c832816105a0880151096105a087015109089050806130608401525080817f23af40e47e2f59a03809484a29d5e3afbf105f1fa100de8be21295a92fa75534610ba085015109610b2084015109818183847f0cb50d8e630246898046fd6c57ab74ad69238928d8b8920561cf5feac058aacd610ba0880151096105a087015109089050806130808401525080817f259eb1d15d2e74dc1a22c32210de87566d7ae67bcc859ce1e33117e171cbbcd2610ba085015109610b2084015109818183847f0705f7901a0ba3736dff0830a813cdc7350ce79c852ba2d86353d0ff84d80bb5610ba0880151096105a087015109089050806130a08401525080817f2a6bbeb56332f220c30fcaac737fd885c3596480f0ca2ff07d2733561911b7bd610ba085015109610b2084015109818183847f26a0f84d76444b5e0a60f8966cc6c88c09cf0713bd044ba9fe6c9b2e8b6263b7610ba0880151096105a087015109086130c084015250612f20820151613000830151829190096130e083015280817f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1f6105a085015109610b2084015109818183847f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a0880151096105a087015109089050806131008401525080817f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a085015109610b2084015109818183847f017829d43aa3529ba5ed3f4879cd1c09ff9f06e716afb2bc6cc72847d12771ae6105a0880151096105a0870151090861312084015250612ee0820151612fe083015182919009613140830152806001610b20840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a0870151090861316084015250612f80820151612fa083015182908290099050806131808401528181612fc0850151099050806131a08401528181613040850151099050806131c08401528181613060850151099050806131e084015281816130008501510990508061320084015281816130808501510990508061322084015281816130a08501510990508061324084015281816130c08501510990508061326084015281816130e0850151099050806132808401528181613100850151099050806132a08401528181613120850151099050806132c08401528181613140850151099050806132e08401528181613160850151099050806133008401528181612fe085015109905080613320840152506020613360830152602061338083015260206133a08301526133208201516133c08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6133e0830152600080516020614fbd8339815191526134008301528260016020613340850160c0613360870160055afa141692506133408201516000612fe08401519050828261330086015109612fe0850152828282099150613160840151905082826132e086015109613160850152828282099150613140840151905082826132c086015109613140850152828282099150613120840151905082826132a08601510961312085015282828209915061310084015190508282613280860151096131008501528282820991506130e084015190508282613260860151096130e08501528282820991506130c084015190508282613240860151096130c08501528282820991506130a084015190508282613220860151096130a08501528282820991506130808401519050828261320086015109613080850152828282099150613000840151905082826131e086015109613000850152828282099150613060840151905082826131c086015109613060850152828282099150613040840151905082826131a086015109613040850152828282099150612fc08401519050828261318086015109612fc0850152828282099150612fa084015190508282612f8086015109612fa085015282828209612f808501819052612fa085015190925083915082900890508181612fc0850151086134208401525061300082015161302083015182919009613440830152613040820151818161306085015108613460840152506130e08201516130208301518291900961348083015261308082015181816130a085015108905081816130c0850151086134a084015250613140820151613020830151829190096134c08301526131008201518181613120850151086134e084015250612fe082015161302083015182919009613500830152613160820151806135208401525061342082015181816134608501510990508061354084015281816134a08501510990508061356084015281816134e0850151099050806135808401528181613520850151099050806135a08401525060206135e0830152602061360083015260206136208301526135a08201516136408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff613660830152600080516020614fbd83398151915261368083015282600160206135c0850160c06135e0870160055afa141692506135c0820151600061352084015190508282613580860151096135208501528282820991506134e084015190508282613560860151096134e08501528282820991506134a084015190508282613540860151096134a08501528282820991506134608401519050828261342086015109613460850152828282096134208501525050613460820151613440830151829190096136a0830152806134a0830151613480840151096136c0830152806134e08301516134c0840151096136e08301528061352083015161350084015109613700830152610a20820151819080096137208301819052610a208301518291096137408301819052610a208301518291096137608301819052610a208301518291096137808301819052610a208301518291096137a08301819052610a208301518291096137c08301819052610a208301518291096137e08301819052610a208301518291096138008301819052610a208301518291096138208301819052610a208301518291096138408301819052610a208301518291096138608301819052610a208301518291096138808301819052610a208301518291096138a08301819052610a208301518291096138c08301819052610a208301518291096138e08301819052610a20830151829109613900830152610a80820151819080096139208301819052610a808301518291096139408301819052610a808301518291096139608301819052610a8083015182910961398083015280612f808301516105e084015109818183612fa086015161062087015109089050818183612fc08601516106a087015109086139a0840181905261342084015183925090096139c08301528060016139c08401518303096139e083015280612f8083015161060084015109818183612fa086015161064087015109089050818183612fc08601516106808701510908613a0084018190526134208401518392509009613a208301819052610a208301518291820309613a4083015280610a20830151600109613a6083015280613a408301516139e084015108613a80830152806001613a8084015109613aa0830152806001613a6084015109613ac083015280613440830151600109613ae083015280613040830151610660840151098181836130608601516106c08701510908613b0084018190526136a08401518392509009613b20830152806001613b20840151830309613b40830152806001613ae084015109613b6083015280613040830151610920840151098181836130608601516109408701510908613b8084018190526136a08401518392509009613ba08301819052610a208301518291820309613bc083015280610a20830151613ae084015109613be083015280613bc0830151613b4084015108613c0083015280613040830151610960840151098181836130608601516109808701510908613c2084018190526136a08401518392509009613c4083018190526137208301518291820309613c6083015280613720830151613ae084015109613c8083015280613c60830151613c0084015108613ca08301819052610a80830151829109613cc083015280610a80830151613b6084015109613ce083015280610a80830151613be084015109613d0083015280610a80830151613c8084015109613d2083015280613cc0830151613aa084015108613d4083015280613480830151600109613d60830152806130808301516108c0840151098181836130a08601516108e0870151090890508181836130c08601516109008701510908613d8084018190526136c08401518392509009613da0830152806001613da0840151830309613dc0830152806001613d6084015109613de083015280613920830151613dc084015109613e0083015280613920830151613de084015109613e2083015280613e00830151613d4084015108613e40830152806134c0830151600109613e60830152806131008301516109a0840151098181836131208601516109c08701510908613e8084018190526136e08401518392509009613ea0830152806001613ea0840151830309613ec0830152806001613e6084015109613ee083015280613940830151613ec084015109613f0083015280613940830151613ee084015109613f2083015280613f00830151613e4084015108613f4083015280613500830151600109613f60830152806131608301516109e084015109613f808301819052613700830151829109613fa0830152806001613fa0840151830309613fc0830152806001613f6084015109613fe0830152806131608301516106e08401510961400083018190526137008301518291096140208301819052610a20830151829182030961404083015280610a20830151613f608401510961406083015280614040830151613fc08401510861408083015280613160830151610700840151096140a083018190526137008301518291096140c0830181905261372083015182918203096140e083015280613720830151613f6084015109614100830152806140e083015161408084015108614120830152806131608301516107208401510961414083018190526137008301518291096141608301819052613740830151829182030961418083015280613740830151613f60840151096141a083015280614180830151614120840151086141c083015280613160830151610740840151096141e083018190526137008301518291096142008301819052613760830151829182030961422083015280613760830151613f6084015109614240830152806142208301516141c084015108614260830152806131608301516107608401510961428083018190526137008301518291096142a0830181905261378083015182918203096142c083015280613780830151613f60840151096142e0830152806142c0830151614260840151086143008301528061316083015161078084015109614320830181905261370083015182910961434083018190526137a08301518291820309614360830152806137a0830151613f608401510961438083015280614360830151614300840151086143a0830152806131608301516107a0840151096143c083018190526137008301518291096143e083018190526137c08301518291820309614400830152806137c0830151613f6084015109614420830152806144008301516143a084015108614440830152806131608301516107c084015109614460830181905261370083015182910961448083018190526137e083015182918203096144a0830152806137e0830151613f60840151096144c0830152806144a0830151614440840151086144e0830152806131608301516108008401510961450083018190526137008301518291096145208301819052613800830151829182030961454083015280613800830151613f6084015109614560830152806145408301516144e08401510861458083015280613160830151610820840151096145a083018190526137008301518291096145c0830181905261382083015182918203096145e083015280613820830151613f6084015109614600830152806145e083015161458084015108614620830152806131608301516108408401510961464083018190526137008301518291096146608301819052613840830151829182030961468083015280613840830151613f60840151096146a083015280614680830151614620840151086146c083015280613160830151610860840151096146e083018190526137008301518291096147008301819052613860830151829182030961472083015280613860830151613f6084015109614740830152806147208301516146c084015108614760830152806131608301516108808401510961478083018190526137008301518291096147a0830181905261388083015182918203096147c083015280613880830151613f60840151096147e0830152806147c083015161476084015108614800830152806131608301516108a084015109614820830181905261370083015182910961484083018190526138a08301518291820309614860830152806138a0830151613f608401510961488083015280614860830151614800840151086148a083015280613500830151612dc0840151096148c083015280613500830151612de0840151096148e083015280613500830151612e008401510961490083015280613500830151612e208401510961492083015280613160830151612e4084015109614940830181905261370083015182910961496083018190526138c08301518291820309614980830152806138c0830151613f60840151096149a0830152806138c08301516148c0840151096149c0830152806138c08301516148e0840151096149e0830152806138c083015161490084015109614a00830152806138c083015161492084015109614a20830152806149808301516148a084015108614a40830152806131608301516107e084015109614a608301819052613700830151829109614a8083018190526138e08301518291820309614aa0830152806138e0830151613f6084015109614ac083015280614aa0830151614a4084015108614ae08301819052613960830151829109614b0083015280613960830151613fe084015109614b208301528061396083015161406084015109614b408301528061396083015161410084015109614b60830152806139608301516141a084015109614b808301528061396083015161424084015109614ba0830152806139608301516142e084015109614bc08301528061396083015161438084015109614be08301528061396083015161442084015109614c00830152806139608301516144c084015109614c208301528061396083015161456084015109614c408301528061396083015161460084015109614c60830152806139608301516146a084015109614c808301528061396083015161474084015109614ca0830152806139608301516147e084015109614cc08301528061396083015161488084015109614ce0830152806139608301516149a084015109614d00830152806139608301516149c084015109614d20830152806139608301516149e084015109614d4083015280613960830151614a0084015109614d6083015280613960830151614a2084015109614d8083015280613960830151614ac084015109614da083015280614b00830151613f4084015108614dc083015280613020830151600109614de083015280610b20830151600109614e008301526001614e2083018181526002614e40850152614dc0840151614e6085015284919060409060608160075afa14169250614e20820151614e80830152614e40820151614ea08301526080820151614ec083015260a0820151614ee08301528260016040614e8085016080614e80870160065afa1416925060c0820151614f0083015260e0820151614f20830152613ac0820151614f408301528260016040614f0085016060614f00870160075afa14169250614e80820151614f60830152614ea0820151614f80830152614f00820151614fa0830152614f20820151614fc08301528260016040614f6085016080614f60870160065afa14169250610100820151614fe0830152610120820151615000830152613ce08201516150208301528260016040614fe085016060614fe0870160075afa14169250614f60820151615040830152614f80820151615060830152614fe08201516150808301526150008201516150a0830152826001604061504085016080615040870160065afa141692506103208201516150c08301526103408201516150e0830152613d0082015161510083015282600160406150c0850160606150c0870160075afa141692506150408201516151208301526150608201516151408301526150c08201516151608301526150e0820151615180830152826001604061512085016080615120870160065afa141692506103608201516151a08301526103808201516151c0830152613d208201516151e083015282600160406151a0850160606151a0870160075afa141692506151208201516152008301526151408201516152208301526151a08201516152408301526151c0820151615260830152826001604061520085016080615200870160065afa141692506102e08201516152808301526103008201516152a0830152613e208201516152c0830152826001604061528085016060615280870160075afa141692506152008201516152e08301526152208201516153008301526152808201516153208301526152a082015161534083015282600160406152e0850160806152e0870160065afa141692506101a08201516153608301526101c0820151615380830152613f208201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa141692506101e0820151615440830152610200820151615460830152614b20820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692507f07da112d9d1619e15dc5963b63e21f1b5690a96ec64a50b61e715262239875166155208301527f1bd864cde2c40ad753c9196372d23b4f5e3d0056bac48fe99c665f98ba6b82bf615540830152614b40820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f18ade563194fd8e50151f082c39e7130b67343136a7f5692fbd36d1dff7c3cbb6156008301527f2e43b8cec89aabd908d49017ae7779040a4f58e18473710e468b30c267f32031615620830152614b60820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f279bb1b1a84827f08b5a6b1afe82453d687fb716da1a5670e7ea1725330f298f6156e08301527f1fb3ef44499d47fa6fe79760d3295b2492983695632cc805d7a1f2ffcc814d0c615700830152614b8082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f1327a71d31491e1437b1994899267b11c3abbad0340b47fe256d4f91fef92fee6157c08301527f1440ebb88ec12e71b3dcf84ac66229ddca0d2d6570cf1ffb7927c2ebc09f8d8e6157e0830152614ba082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f1825601cf3db8549d6b0c0ba6ce4bb7661f81fc7de4fbb3b4a8293ff0938c8e56158a08301527f1a03983f233b00c3a96ae5552c74957f9285b641a9502397fc10ef067e6399706158c0830152614bc08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f11d03b31084d49e49e40902891439047cc277aa97e8b2e3a3c5b2e80dac5c3646159808301527f151e9540ac7dd9f60a5033876ad0183c4af24f7d12cd8ebe98e71513939a8cc06159a0830152614be08201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f23d01f8bb44c10b4dd7962ca558169300c7535dc2321c483251841b9dd533c0f615a608301527f1599ae56c0c8434fbfc5eec62917dfa3f0a9e2dbe7c77409ec0f3a004b14cf99615a80830152614c00820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f2876b4cb304a71b1eb97c0a33fad6c2567a18f4333d282878103a8a52f9a44dd615b408301527f1cf03a9e7d9f1689bad060e3c93dd13d434e6fc7534b662ba0030f864c9ef982615b60830152614c20820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f09d6b1ef89008418dc31e48ddc1123f06623183c2ca3be3f87c61c4cd416cb07615c208301527f19a196c98c173b7d399c14be13eaa0e3ebf3afdc80b6bb5431a396b7860f8876615c40830152614c40820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f0c353a2d3fb9de5a63ae20c29d28031efeaf502224c752372f07969d272ea88b615d008301527f2a66e2b2fc4c41f54f231c0536a3f249d7bac03ab25773c01799f38a9ec2fd2c615d20830152614c60820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f09fb582fffb06e472ce594ff04530c9f33d70312b9b8e54ebc70097d415d6b82615de08301527f1045a2adc4faf395b26431d86bdf7604651e06f97cbae9ed8e00676147fe9f83615e00830152614c80820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f304c7a0ed7b07d72da0bfd0a63908355b825669b5a62b99b775ee19f940b9114615ec08301527f02fcb2e6131131677facbbc28b73ee6c4571a1d49034a85f72719cd11f922d0b615ee0830152614ca0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507e347e8e9332a177dba1b65fd1a8a17450521792a7fbac3e0297ebde6e7838e4615fa08301527f289d406011aae1118ff4d86b716d4b9660f5c270ea5b5247a1cc71fc0745c4c7615fc0830152614cc0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f238289053176d6ee7aaa36d98249c7dde4fee7f4dc90316f64f92b24ef9f987e6160808301527f0c4e25e98208315fdedc6bde1545533eee6c7c4b89cfa44f764eb39a129d9ba46160a0830152614ce08201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa14169250610440820151616160830152610460820151616180830152614d008201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692506104808201516162408301526104a0820151616260830152614d20820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692506104c08201516163208301526104e0820151616340830152614d40820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa14169250610500820151616400830152610520820151616420830152614d60820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506105408201516164e0830152610560820151616500830152614d8082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506103a08201516165c08301526103c08201516165e0830152614da082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa14169250610ac08201516166a0830152610ae08201516166c0830152614de082015181036166e08301525081600160406166a0840160606166a0860160075afa141691506166208101516167008201526166408101516167208201526166a08101516167408201526166c0810151616760820152816001604061670084016080616700860160065afa14169150610b60810151616780820152610b808101516167a0820152614e008101516167c0820152816001604061678084016060616780860160075afa141691506167008101516167e08201526167208101516168008201526167808101516168208201526167a081015161684082015281600160406167e0840160806167e0860160065afa141691506167e08101516168608201526168008101516168808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26168a08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6168c08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6168e08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa616900820152610b60810151616920820152610b808101516169408201527f249b89133f51f707a562a9b69acaad642bd08c9179aa90c8188f40b5205dad436169608201527f2981bdcac7171f8537f1064de061b5ce5e18dd2fc4a4e4430eb5087506e8ed826169808201527f1305f9ff4409c8d36208d7529987ea2438c22d017090ac2841b3d4fb36a6ea6f6169a08201527f14ed363012c9eb27ba479ea030fd6467e9a1f4e86d78097f3b37a7e91f7011dc6169c082015281600160206168608401610180616860860160085afa61686093909301516001149214161691505092915050565b604051806169c0016040528061034e906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e5c57614e5c614e1d565b604052919050565b600082601f830112614e7557600080fd5b813567ffffffffffffffff811115614e8f57614e8f614e1d565b614ea2601f8201601f1916602001614e33565b818152846020838601011115614eb757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614ee757600080fd5b823567ffffffffffffffff80821115614eff57600080fd5b818501915085601f830112614f1357600080fd5b8135602082821115614f2757614f27614e1d565b8160051b614f36828201614e33565b928352848101820192828101908a851115614f5057600080fd5b958301955b84871015614f6e57863582529583019590830190614f55565b9750505086013592505080821115614f8557600080fd5b50614f9285828601614e64565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a264697066735822122089ff0909a8ffc531a289c6e89318c6162ebefc3e419bb173f52b9a069f81ca8464736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004614ed4565b610057565b604051901515815260200160405180910390f35b60006001610063614dfd565b600080516020614fbd8339815191526100d9565b600080516020614f9d8339815191528083108183101690838009600080516020614f9d833981519152838409600080516020614f9d8339815191528482099050600080516020614f9d8339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301528060608701510660608301527f162698bb2e5742e2b979910eff5bafabe8cc6b6c6eababb6a53627888c03be856000830152602085015180608084015260408601518060a0850152846101448284610077565b169450505060608501518060c084015260808601518060e08501528461016a8284610077565b169450505060a08501518061010084015260c086015180610120850152846101928284610077565b16945050506101406000830120610140830152610140820151818106610160840152806101808401525060e0850151806101a0840152610100860151806101c0850152846101e08284610077565b1694505050610120850151806101e0840152610140860151806102008501528461020a8284610077565b60a061018087012061022087018190528581066102408801526102608701521694506001915050610280830153602161026083012061028083018190528181066102a08401526102c08301526101608501516102e0830181905261018086015161030084018190528461027d8284610077565b16945050506101a0850151806103208401526101c086015180610340850152846102a78284610077565b16945050506101e08501518061036084015261020086015180610380850152846102d18284610077565b1694505050610220850151806103a0840152610240860151806103c0850152846102fb8284610077565b16945050506101206102c08301206103e08301526103e0820151818106610400840152806104208401525061026085015180610440840152610280860151806104608501528461034b8284610077565b16945050506102a0850151806104808401526102c0860151806104a0850152846103758284610077565b16945050506102e0850151806104c0840152610300860151806104e08501528461039f8284610077565b16945050506103208501518061050084015261034086015180610520850152846103c98284610077565b16945050506103608501518061054084015261038086015180610560850152846103f38284610077565b16945050506101606104208301206105808301526105808201518181066105a0840152806105c084015250806103a0860151066105e0830152806103c086015106610600830152806103e08601510661062083015280610400860151066106408301528061042086015106610660830152806104408601510661068083015280610460860151066106a083015280610480860151066106c0830152806104a0860151066106e0830152806104c086015106610700830152806104e08601510661072083015280610500860151066107408301528061052086015106610760830152806105408601510661078083015280610560860151066107a083015280610580860151066107c0830152806105a0860151066107e0830152806105c086015106610800830152806105e08601510661082083015280610600860151066108408301528061062086015106610860830152806106408601510661088083015280610660860151066108a083015280610680860151066108c0830152806106a0860151066108e0830152806106c086015106610900830152806106e08601510661092083015280610700860151066109408301528061072086015106610960830152806107408601510661098083015280610760860151066109a083015280610780860151066109c0830152806107a0860151066109e08301526104406105c0830120610a00830152610a00820151818106610a2084015280610a40840152506001610a608301536021610a40830120610a608301819052818106610a80840152610aa08301526107c0850151610ac083018190526107e0860151610ae08401819052846106608284610077565b16945050506060610aa0830120610b00830152610b00820151818106610b2084015280610b408401525061080085015180610b6084015261082086015180610b80850152846106af8284610077565b1694505050806105a08301516105a084015109610ba0830181905281908009610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610cc084015108610ce0830152807f3058355f447953c1ade231a513e0f80710e9db4e679b02351f90fd168b040001610ce084015109610d00830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb26610d0084015109610d20830152807f1a6cb0b91da01e6d7a1e7d76eeef7de63954cd24b5a8c2b95ad8712f455b04db6105a084015108610d40830152807f03b743d74fd9ddb41f920179ac30e04b0ebd93e580b9c0b50061087904110bd4610d0084015109610d60830152807f2cad0a9b9157c27598be443cd550781219765462f8ffafdc4380ed1aebeef42d6105a084015108610d80830152807f1f4d7180df5014849825f3c9b0e89d79432c51f48eb5846ae63b433f28aba10b610d0084015109610da0830152807f1116dcf201e18ba5202a51ecd098bae3e5079653eb03ec265da6b254c7545ef66105a084015108610dc0830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d0084015109610de0830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff6105a084015108610e00830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d0084015109610e20830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc6105a084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d0084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e6105a084015108610e80830152806001610d0084015109610ea0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a084015108610ec0830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d610d0084015109610ee0830152807f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44846105a084015108610f00830152807f0dd30b9ad8c173555d2a33029bc807ac165b61281e9054a173af7ff4e4fc88fc610d0084015109610f20830152807f229142d808702cd45b2612b3e5b950b111d887205b291befd032759f0b0377056105a084015108610f40830152610d408201518181610d8085015109905080610f608401528181610dc085015109905080610f808401528181610e0085015109905080610fa08401528181610e4085015109905080610fc08401528181610e8085015109905080610fe08401528181610ec0850151099050806110008401528181610f00850151099050806110208401528181610f40850151099050806110408401528181610ce0850151099050806110608401525060206110a083015260206110c083015260206110e08301526110608201516111008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff611120830152600080516020614fbd8339815191526111408301528260016020611080850160c06110a0870160055afa141692506110808201516000610ce08401519050828261104086015109610ce0850152828282099150610f408401519050828261102086015109610f40850152828282099150610f008401519050828261100086015109610f00850152828282099150610ec084015190508282610fe086015109610ec0850152828282099150610e8084015190508282610fc086015109610e80850152828282099150610e4084015190508282610fa086015109610e40850152828282099150610e0084015190508282610f8086015109610e00850152828282099150610dc084015190508282610f6086015109610dc0850152828282099150610d8084015190508282610d4086015109610d8085015282828209610d408501819052610d208501518493509091500961116083015280610d80830151610d608401510961118083015280610dc0830151610da0840151096111a083015280610e00830151610de0840151096111c083015280610e40830151610e20840151096111e083015280610e80830151610e608401510961120083015280610ec0830151610ea08401510961122083015280610f00830151610ee08401510961124083015280610f40830151610f20840151096112608301528060208301516112208401510981818360408601516112408701510908905081818360608601516112608701510908611280840152506107208201516105e0830151829190086112a08301819052819080096112c08301819052819080096112e0830152806112e08301516112a084015109611300830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561130084015109611320830152806107408301516106008401510861134083018190528190800961136083018190528190800961138083015280611380830151611340840151096113a0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e86113a0840151096113c0830152806113c0830151611320840151086113e08301528061062083015182036113e08401510861140083018190526107a08301518291096114208301528061142083015161040084015109611440830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961130084015109611460830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113a08401510961148083015280611480830151611460840151086114a08301528061064083015182036114a0840151086114c083018190526107a08301518291096114e0830152806114e08301516114408401510861150083015280611500830151610400840151096115208301528061066083015182036113008401510861154083018190526107c0830151829109611560830152806115608301516115208401510861158083015280611580830151610400840151096115a0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad5610660840151096115c0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611340840151096115e0830152806115e08301516115c08401510861160083018190526106e08301518291086116208301819052819080096116408301819052819080096116608301528061166083015161162084015109611680830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610620840151096116a0830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe610640840151096116c0830152806116c08301516116a0840151086116e0830152806116e083015182036116808401510861170083018190526107c0830151829109611720830152806117208301516115a0840151086117408301528061174083015161040084015109611760830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961066084015109611780830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c8611340840151096117a0830152806117a0830151611780840151086117c083018190526107008301518291086117e0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb0261062084015109611800830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6106408401510961182083015280611820830151611800840151086118408301528061184083015182036117e08401510861186083018190526107c083015182910961188083015280611880830151611760840151086118a0830152806118a0830151610400840151096118c08301528061078083015182036001086118e0830181905261078083015182910961190083015280610780830151820360020861192083018190526119008301518291096119408301528061078083015182036003086119608301819052611940830151829109611980830152806105e08301516106a0840151086119a08301528061062083015182036119a0840151086119c083018190526119808301518291096119e0830152806119e08301516118c084015108611a0083015280611a0083015161040084015109611a2083015280610640830151820361068084015108611a408301819052611980830151829109611a6083015280611a60830151611a2084015108611a8083015280611a8083015161040084015109611aa08301528061078083015161192084015109611ac083015280611ac083015161196084015109611ae0830152806107808301518203600408611b008301819052611ae0830151829109611b2083015280611b2083015161066084015109611b40830152806106608301518203600108611b608301819052611b40830151829109611b8083015280611b80830151611aa084015108611ba083015280611ba083015161040084015109611bc083015280610660830151600209611be0830152806105e0830151820361060084015108611c008301819052611be0830151829109611c20830152806105e0830151820361062084015108611c4083015280611c408301518203611c2084015108611c6083015280610640830151820361060084015108611c8083015280611c808301518203611c6084015108611ca08301819052611b20830151829109611cc083015280611cc0830151611bc084015108611ce083015280611ce083015161040084015109611d008301528061190083015161196084015109611d2083015280611d20830151611b0084015109611d40830152806106008301516105e084015108611d60830152806106608301518203611d6084015108611d808301819052611d40830151829109611da083015280611da0830151611d0084015108611dc083015280611dc083015161040084015109611de08301819052611da0830151829108611e0083015280611e0083015161040084015109611e2083015280611940830151611b0084015109611e408301528061060083015182036105e084015108611e6083015280600160701b611e6084015108611e80830152806106608301518203611e8084015108611ea08301819052611e40830151829109611ec083015280611ec0830151611e2084015108611ee083015280611ee083015161040084015109611f00830152806108c08301518203600108611f208301819052611220830151829109611f4083015280611f40830151611f0084015108611f6083015280611f6083015161040084015109611f8083015261092082015181908009611fa0830152806109208301518203611fa084015108611fc08301819052611160830151829109611fe083015280611fe0830151611f80840151086120008301528061200083015161040084015109612020830152806109008301518203610920840151086120408301819052611220830151829109612060830152806120608301516120208401510861208083015280612080830151610400840151096120a08301528061116083015182036001086120c0830152806111a0830151611180840151086120e083018190526111c083015182910861210083018190526111e083015182910861212083018190526112008301518291086121408301528061214083015182036120c0840151086121608301528061024083015161080084015109612180830152806121808301516106e0840151086121a083018190526102a08301518291086121c083015280610240830151610820840151096121e0830152806121e08301516105e08401510861220083018190526102a083015182910861222083018190526121c08301518291096122408301528061024083015161084084015109612260830152806122608301516106008401510861228083018190526102a08301518291086122a083018190526122408301518291096122c083015280610240830151610860840151096122e0830152806122e08301516107008401510861230083018190526102a083015182910861232083018190526122c083015182910961234083018190526108e083015182910961236083015280610240830151600109612380830152806123808301516105a0840151096123a0830152806123a08301516106e0840151086123c083018190526102a08301518291086123e0830152806102408301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a209612400830152806124008301516105a084015109612420830152806124208301516105e08401510861244083018190526102a083015182910861246083018190526123e0830151829109612480830152806102408301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096124a0830152806124a08301516105a0840151096124c0830152806124c0830151610600840151086124e083018190526102a08301518291086125008301819052612480830151829109612520830152806102408301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e5209612540830152806125408301516105a084015109612560830152806125608301516107008401510861258083018190526102a08301518291086125a083018190526125208301518291096125c083018190526108c08301518291096125e0830152806125e08301518203612360840151086126008301819052612160830151829109612620830152806126208301516120a0840151086126408301528061264083015161040084015109612660830152806102408301516108808401510961268083015280612680830151610660840151086126a083018190526102a08301518291086126c0830152806102408301516108a0840151096126e0830152806126e08301516112808401510861270083018190526102a083015182910861272083018190526126c08301518291096127408301819052610940830151829109612760830152806102408301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612780830152806127808301516105a0840151096127a0830152806127a0830151610660840151086127c083018190526102a08301518291086127e0830152806102408301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d09612800830152806128008301516105a084015109612820830152806128208301516112808401510861284083018190526102a083015182910861286083018190526127e083015182910961288083018190526109208301518291096128a0830152806128a08301518203612760840151086128c083018190526121608301518291096128e0830152806128e08301516126608401510861290083015280612900830151610400840151096129208301528061096083015182036001086129408301819052611220830151829109612960830152806129608301516129208401510861298083015280612980830151610400840151096129a0830152610960820151819080096129c08301528061096083015182036129c0840151086129e08301819052611160830151829109612a0083015280612a008301516129a084015108612a2083015280612a2083015161040084015109612a40830152806102408301516109a084015108612a608301819052610980830151829109612a80830152806102a08301516109e084015108612aa08301819052612a80830151829109612ac0830152806106c083015161010009612ae083015280612ae0830151820361066084015108612b008301819052610760830151829109612b208301819052610240830151829108612b408301819052610960830151829109612b60830152806102a083015161072084015108612b808301819052612b60830151829109612ba083015280612ba08301518203612ac084015108612bc08301819052612160830151829109612be083015280612be0830151612a4084015108612c0083015280612c0083015161040084015109612c20830152806109e083015182036109a084015108612c408301819052611220830151829109612c6083015280612c60830151612c2084015108612c8083015280612c8083015161040084015109612ca083015280612160830151612c4084015109612cc0830152806109c083015182036109a084015108612ce08301819052612cc0830151829109612d0083015280612d00830151612ca084015108612d20830152610cc082015181908009612d408301819052610cc0830151829109612d608301819052610cc0830151829109612d808301819052610cc0830151829109612da083015280610cc0830151600109612dc083015280612d40830151600109612de083015280612d60830151600109612e0083015280612d80830151600109612e2083015280610ce0830151612d2084015109612e40830152806105a0830151610ba084015109612e608301528060016105a084015109612e8083015280612e808301518203610b2084015108612ea0830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e36105a084015109612ec083015280612ec08301518203610b2084015108612ee0830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb266105a084015109612f0083015280612f008301518203610b2084015108612f20830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d6105a084015109612f4083015280612f408301518203610b2084015108612f6083015280817f2b0bd16731aaf34928c0661ba43310fbbf44baa457b980ce19affba7315792a4610ba085015109610b2084015109818183847f05587d0baf86ace08f8fdf9add4e476168ef2da421ffefc32a31f9ecbea86d5d610ba0880151096105a08701510908905080612f808401525080817f1e42214ea9b2db33296ba55096815a0a6d468af715ccfa9fab93b1e3701b7f62610ba085015109610b2084015109818183847f1648cc055b11af4e0f62923d9627e377b1d413c0864af4963a826fcc6a0231fa610ba0880151096105a08701510908905080612fa08401525080817f2960d84a95d8f00f740a3d1478feb6d4b196e34bf86b62b75041b14b389d49ce610ba085015109610b2084015109818183847f21fe615ace99028841c84393e39435ea26675e494fd4886263e6fedd3cba1f16610ba0880151096105a08701510908612fc084015250612ea08201518190600109612fe08301819052612f608301518291096130008301819052612ee083015182910961302083015280817f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44856105a085015109610b2084015109818183847f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a0880151096105a087015109089050806130408401525080817f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a085015109610b2084015109818183847f1d05f683f7bacf55bccd495a5703cb329ada890af08ac0d24959599e24c832816105a0880151096105a087015109089050806130608401525080817f23af40e47e2f59a03809484a29d5e3afbf105f1fa100de8be21295a92fa75534610ba085015109610b2084015109818183847f0cb50d8e630246898046fd6c57ab74ad69238928d8b8920561cf5feac058aacd610ba0880151096105a087015109089050806130808401525080817f259eb1d15d2e74dc1a22c32210de87566d7ae67bcc859ce1e33117e171cbbcd2610ba085015109610b2084015109818183847f0705f7901a0ba3736dff0830a813cdc7350ce79c852ba2d86353d0ff84d80bb5610ba0880151096105a087015109089050806130a08401525080817f2a6bbeb56332f220c30fcaac737fd885c3596480f0ca2ff07d2733561911b7bd610ba085015109610b2084015109818183847f26a0f84d76444b5e0a60f8966cc6c88c09cf0713bd044ba9fe6c9b2e8b6263b7610ba0880151096105a087015109086130c084015250612f20820151613000830151829190096130e083015280817f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1f6105a085015109610b2084015109818183847f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a0880151096105a087015109089050806131008401525080817f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a085015109610b2084015109818183847f017829d43aa3529ba5ed3f4879cd1c09ff9f06e716afb2bc6cc72847d12771ae6105a0880151096105a0870151090861312084015250612ee0820151612fe083015182919009613140830152806001610b20840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a0870151090861316084015250612f80820151612fa083015182908290099050806131808401528181612fc0850151099050806131a08401528181613040850151099050806131c08401528181613060850151099050806131e084015281816130008501510990508061320084015281816130808501510990508061322084015281816130a08501510990508061324084015281816130c08501510990508061326084015281816130e0850151099050806132808401528181613100850151099050806132a08401528181613120850151099050806132c08401528181613140850151099050806132e08401528181613160850151099050806133008401528181612fe085015109905080613320840152506020613360830152602061338083015260206133a08301526133208201516133c08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6133e0830152600080516020614fbd8339815191526134008301528260016020613340850160c0613360870160055afa141692506133408201516000612fe08401519050828261330086015109612fe0850152828282099150613160840151905082826132e086015109613160850152828282099150613140840151905082826132c086015109613140850152828282099150613120840151905082826132a08601510961312085015282828209915061310084015190508282613280860151096131008501528282820991506130e084015190508282613260860151096130e08501528282820991506130c084015190508282613240860151096130c08501528282820991506130a084015190508282613220860151096130a08501528282820991506130808401519050828261320086015109613080850152828282099150613000840151905082826131e086015109613000850152828282099150613060840151905082826131c086015109613060850152828282099150613040840151905082826131a086015109613040850152828282099150612fc08401519050828261318086015109612fc0850152828282099150612fa084015190508282612f8086015109612fa085015282828209612f808501819052612fa085015190925083915082900890508181612fc0850151086134208401525061300082015161302083015182919009613440830152613040820151818161306085015108613460840152506130e08201516130208301518291900961348083015261308082015181816130a085015108905081816130c0850151086134a084015250613140820151613020830151829190096134c08301526131008201518181613120850151086134e084015250612fe082015161302083015182919009613500830152613160820151806135208401525061342082015181816134608501510990508061354084015281816134a08501510990508061356084015281816134e0850151099050806135808401528181613520850151099050806135a08401525060206135e0830152602061360083015260206136208301526135a08201516136408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff613660830152600080516020614fbd83398151915261368083015282600160206135c0850160c06135e0870160055afa141692506135c0820151600061352084015190508282613580860151096135208501528282820991506134e084015190508282613560860151096134e08501528282820991506134a084015190508282613540860151096134a08501528282820991506134608401519050828261342086015109613460850152828282096134208501525050613460820151613440830151829190096136a0830152806134a0830151613480840151096136c0830152806134e08301516134c0840151096136e08301528061352083015161350084015109613700830152610a20820151819080096137208301819052610a208301518291096137408301819052610a208301518291096137608301819052610a208301518291096137808301819052610a208301518291096137a08301819052610a208301518291096137c08301819052610a208301518291096137e08301819052610a208301518291096138008301819052610a208301518291096138208301819052610a208301518291096138408301819052610a208301518291096138608301819052610a208301518291096138808301819052610a208301518291096138a08301819052610a208301518291096138c08301819052610a208301518291096138e08301819052610a20830151829109613900830152610a80820151819080096139208301819052610a808301518291096139408301819052610a808301518291096139608301819052610a8083015182910961398083015280612f808301516105e084015109818183612fa086015161062087015109089050818183612fc08601516106a087015109086139a0840181905261342084015183925090096139c08301528060016139c08401518303096139e083015280612f8083015161060084015109818183612fa086015161064087015109089050818183612fc08601516106808701510908613a0084018190526134208401518392509009613a208301819052610a208301518291820309613a4083015280610a20830151600109613a6083015280613a408301516139e084015108613a80830152806001613a8084015109613aa0830152806001613a6084015109613ac083015280613440830151600109613ae083015280613040830151610660840151098181836130608601516106c08701510908613b0084018190526136a08401518392509009613b20830152806001613b20840151830309613b40830152806001613ae084015109613b6083015280613040830151610920840151098181836130608601516109408701510908613b8084018190526136a08401518392509009613ba08301819052610a208301518291820309613bc083015280610a20830151613ae084015109613be083015280613bc0830151613b4084015108613c0083015280613040830151610960840151098181836130608601516109808701510908613c2084018190526136a08401518392509009613c4083018190526137208301518291820309613c6083015280613720830151613ae084015109613c8083015280613c60830151613c0084015108613ca08301819052610a80830151829109613cc083015280610a80830151613b6084015109613ce083015280610a80830151613be084015109613d0083015280610a80830151613c8084015109613d2083015280613cc0830151613aa084015108613d4083015280613480830151600109613d60830152806130808301516108c0840151098181836130a08601516108e0870151090890508181836130c08601516109008701510908613d8084018190526136c08401518392509009613da0830152806001613da0840151830309613dc0830152806001613d6084015109613de083015280613920830151613dc084015109613e0083015280613920830151613de084015109613e2083015280613e00830151613d4084015108613e40830152806134c0830151600109613e60830152806131008301516109a0840151098181836131208601516109c08701510908613e8084018190526136e08401518392509009613ea0830152806001613ea0840151830309613ec0830152806001613e6084015109613ee083015280613940830151613ec084015109613f0083015280613940830151613ee084015109613f2083015280613f00830151613e4084015108613f4083015280613500830151600109613f60830152806131608301516109e084015109613f808301819052613700830151829109613fa0830152806001613fa0840151830309613fc0830152806001613f6084015109613fe0830152806131608301516106e08401510961400083018190526137008301518291096140208301819052610a20830151829182030961404083015280610a20830151613f608401510961406083015280614040830151613fc08401510861408083015280613160830151610700840151096140a083018190526137008301518291096140c0830181905261372083015182918203096140e083015280613720830151613f6084015109614100830152806140e083015161408084015108614120830152806131608301516107208401510961414083018190526137008301518291096141608301819052613740830151829182030961418083015280613740830151613f60840151096141a083015280614180830151614120840151086141c083015280613160830151610740840151096141e083018190526137008301518291096142008301819052613760830151829182030961422083015280613760830151613f6084015109614240830152806142208301516141c084015108614260830152806131608301516107608401510961428083018190526137008301518291096142a0830181905261378083015182918203096142c083015280613780830151613f60840151096142e0830152806142c0830151614260840151086143008301528061316083015161078084015109614320830181905261370083015182910961434083018190526137a08301518291820309614360830152806137a0830151613f608401510961438083015280614360830151614300840151086143a0830152806131608301516107a0840151096143c083018190526137008301518291096143e083018190526137c08301518291820309614400830152806137c0830151613f6084015109614420830152806144008301516143a084015108614440830152806131608301516107c084015109614460830181905261370083015182910961448083018190526137e083015182918203096144a0830152806137e0830151613f60840151096144c0830152806144a0830151614440840151086144e0830152806131608301516108008401510961450083018190526137008301518291096145208301819052613800830151829182030961454083015280613800830151613f6084015109614560830152806145408301516144e08401510861458083015280613160830151610820840151096145a083018190526137008301518291096145c0830181905261382083015182918203096145e083015280613820830151613f6084015109614600830152806145e083015161458084015108614620830152806131608301516108408401510961464083018190526137008301518291096146608301819052613840830151829182030961468083015280613840830151613f60840151096146a083015280614680830151614620840151086146c083015280613160830151610860840151096146e083018190526137008301518291096147008301819052613860830151829182030961472083015280613860830151613f6084015109614740830152806147208301516146c084015108614760830152806131608301516108808401510961478083018190526137008301518291096147a0830181905261388083015182918203096147c083015280613880830151613f60840151096147e0830152806147c083015161476084015108614800830152806131608301516108a084015109614820830181905261370083015182910961484083018190526138a08301518291820309614860830152806138a0830151613f608401510961488083015280614860830151614800840151086148a083015280613500830151612dc0840151096148c083015280613500830151612de0840151096148e083015280613500830151612e008401510961490083015280613500830151612e208401510961492083015280613160830151612e4084015109614940830181905261370083015182910961496083018190526138c08301518291820309614980830152806138c0830151613f60840151096149a0830152806138c08301516148c0840151096149c0830152806138c08301516148e0840151096149e0830152806138c083015161490084015109614a00830152806138c083015161492084015109614a20830152806149808301516148a084015108614a40830152806131608301516107e084015109614a608301819052613700830151829109614a8083018190526138e08301518291820309614aa0830152806138e0830151613f6084015109614ac083015280614aa0830151614a4084015108614ae08301819052613960830151829109614b0083015280613960830151613fe084015109614b208301528061396083015161406084015109614b408301528061396083015161410084015109614b60830152806139608301516141a084015109614b808301528061396083015161424084015109614ba0830152806139608301516142e084015109614bc08301528061396083015161438084015109614be08301528061396083015161442084015109614c00830152806139608301516144c084015109614c208301528061396083015161456084015109614c408301528061396083015161460084015109614c60830152806139608301516146a084015109614c808301528061396083015161474084015109614ca0830152806139608301516147e084015109614cc08301528061396083015161488084015109614ce0830152806139608301516149a084015109614d00830152806139608301516149c084015109614d20830152806139608301516149e084015109614d4083015280613960830151614a0084015109614d6083015280613960830151614a2084015109614d8083015280613960830151614ac084015109614da083015280614b00830151613f4084015108614dc083015280613020830151600109614de083015280610b20830151600109614e008301526001614e2083018181526002614e40850152614dc0840151614e6085015284919060409060608160075afa14169250614e20820151614e80830152614e40820151614ea08301526080820151614ec083015260a0820151614ee08301528260016040614e8085016080614e80870160065afa1416925060c0820151614f0083015260e0820151614f20830152613ac0820151614f408301528260016040614f0085016060614f00870160075afa14169250614e80820151614f60830152614ea0820151614f80830152614f00820151614fa0830152614f20820151614fc08301528260016040614f6085016080614f60870160065afa14169250610100820151614fe0830152610120820151615000830152613ce08201516150208301528260016040614fe085016060614fe0870160075afa14169250614f60820151615040830152614f80820151615060830152614fe08201516150808301526150008201516150a0830152826001604061504085016080615040870160065afa141692506103208201516150c08301526103408201516150e0830152613d0082015161510083015282600160406150c0850160606150c0870160075afa141692506150408201516151208301526150608201516151408301526150c08201516151608301526150e0820151615180830152826001604061512085016080615120870160065afa141692506103608201516151a08301526103808201516151c0830152613d208201516151e083015282600160406151a0850160606151a0870160075afa141692506151208201516152008301526151408201516152208301526151a08201516152408301526151c0820151615260830152826001604061520085016080615200870160065afa141692506102e08201516152808301526103008201516152a0830152613e208201516152c0830152826001604061528085016060615280870160075afa141692506152008201516152e08301526152208201516153008301526152808201516153208301526152a082015161534083015282600160406152e0850160806152e0870160065afa141692506101a08201516153608301526101c0820151615380830152613f208201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa141692506101e0820151615440830152610200820151615460830152614b20820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692507f07da112d9d1619e15dc5963b63e21f1b5690a96ec64a50b61e715262239875166155208301527f1bd864cde2c40ad753c9196372d23b4f5e3d0056bac48fe99c665f98ba6b82bf615540830152614b40820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f18ade563194fd8e50151f082c39e7130b67343136a7f5692fbd36d1dff7c3cbb6156008301527f2e43b8cec89aabd908d49017ae7779040a4f58e18473710e468b30c267f32031615620830152614b60820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f279bb1b1a84827f08b5a6b1afe82453d687fb716da1a5670e7ea1725330f298f6156e08301527f1fb3ef44499d47fa6fe79760d3295b2492983695632cc805d7a1f2ffcc814d0c615700830152614b8082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f1327a71d31491e1437b1994899267b11c3abbad0340b47fe256d4f91fef92fee6157c08301527f1440ebb88ec12e71b3dcf84ac66229ddca0d2d6570cf1ffb7927c2ebc09f8d8e6157e0830152614ba082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f1825601cf3db8549d6b0c0ba6ce4bb7661f81fc7de4fbb3b4a8293ff0938c8e56158a08301527f1a03983f233b00c3a96ae5552c74957f9285b641a9502397fc10ef067e6399706158c0830152614bc08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f11d03b31084d49e49e40902891439047cc277aa97e8b2e3a3c5b2e80dac5c3646159808301527f151e9540ac7dd9f60a5033876ad0183c4af24f7d12cd8ebe98e71513939a8cc06159a0830152614be08201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f23d01f8bb44c10b4dd7962ca558169300c7535dc2321c483251841b9dd533c0f615a608301527f1599ae56c0c8434fbfc5eec62917dfa3f0a9e2dbe7c77409ec0f3a004b14cf99615a80830152614c00820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f2876b4cb304a71b1eb97c0a33fad6c2567a18f4333d282878103a8a52f9a44dd615b408301527f1cf03a9e7d9f1689bad060e3c93dd13d434e6fc7534b662ba0030f864c9ef982615b60830152614c20820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f09d6b1ef89008418dc31e48ddc1123f06623183c2ca3be3f87c61c4cd416cb07615c208301527f19a196c98c173b7d399c14be13eaa0e3ebf3afdc80b6bb5431a396b7860f8876615c40830152614c40820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f0c353a2d3fb9de5a63ae20c29d28031efeaf502224c752372f07969d272ea88b615d008301527f2a66e2b2fc4c41f54f231c0536a3f249d7bac03ab25773c01799f38a9ec2fd2c615d20830152614c60820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f09fb582fffb06e472ce594ff04530c9f33d70312b9b8e54ebc70097d415d6b82615de08301527f1045a2adc4faf395b26431d86bdf7604651e06f97cbae9ed8e00676147fe9f83615e00830152614c80820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f304c7a0ed7b07d72da0bfd0a63908355b825669b5a62b99b775ee19f940b9114615ec08301527f02fcb2e6131131677facbbc28b73ee6c4571a1d49034a85f72719cd11f922d0b615ee0830152614ca0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507e347e8e9332a177dba1b65fd1a8a17450521792a7fbac3e0297ebde6e7838e4615fa08301527f289d406011aae1118ff4d86b716d4b9660f5c270ea5b5247a1cc71fc0745c4c7615fc0830152614cc0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f238289053176d6ee7aaa36d98249c7dde4fee7f4dc90316f64f92b24ef9f987e6160808301527f0c4e25e98208315fdedc6bde1545533eee6c7c4b89cfa44f764eb39a129d9ba46160a0830152614ce08201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa14169250610440820151616160830152610460820151616180830152614d008201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692506104808201516162408301526104a0820151616260830152614d20820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692506104c08201516163208301526104e0820151616340830152614d40820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa14169250610500820151616400830152610520820151616420830152614d60820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506105408201516164e0830152610560820151616500830152614d8082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506103a08201516165c08301526103c08201516165e0830152614da082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa14169250610ac08201516166a0830152610ae08201516166c0830152614de082015181036166e08301525081600160406166a0840160606166a0860160075afa141691506166208101516167008201526166408101516167208201526166a08101516167408201526166c0810151616760820152816001604061670084016080616700860160065afa14169150610b60810151616780820152610b808101516167a0820152614e008101516167c0820152816001604061678084016060616780860160075afa141691506167008101516167e08201526167208101516168008201526167808101516168208201526167a081015161684082015281600160406167e0840160806167e0860160065afa141691506167e08101516168608201526168008101516168808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26168a08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6168c08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6168e08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa616900820152610b60810151616920820152610b808101516169408201527f249b89133f51f707a562a9b69acaad642bd08c9179aa90c8188f40b5205dad436169608201527f2981bdcac7171f8537f1064de061b5ce5e18dd2fc4a4e4430eb5087506e8ed826169808201527f1305f9ff4409c8d36208d7529987ea2438c22d017090ac2841b3d4fb36a6ea6f6169a08201527f14ed363012c9eb27ba479ea030fd6467e9a1f4e86d78097f3b37a7e91f7011dc6169c082015281600160206168608401610180616860860160085afa61686093909301516001149214161691505092915050565b604051806169c0016040528061034e906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e5c57614e5c614e1d565b604052919050565b600082601f830112614e7557600080fd5b813567ffffffffffffffff811115614e8f57614e8f614e1d565b614ea2601f8201601f1916602001614e33565b818152846020838601011115614eb757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614ee757600080fd5b823567ffffffffffffffff80821115614eff57600080fd5b818501915085601f830112614f1357600080fd5b8135602082821115614f2757614f27614e1d565b8160051b614f36828201614e33565b928352848101820192828101908a851115614f5057600080fd5b958301955b84871015614f6e57863582529583019590830190614f55565b9750505086013592505080821115614f8557600080fd5b50614f9285828601614e64565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a264697066735822122089ff0909a8ffc531a289c6e89318c6162ebefc3e419bb173f52b9a069f81ca8464736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file +{"_format":"hh-sol-artifact-1","contractName":"Verifier","sourceName":"src/SolvencyVerifier.sol","abi":[{"inputs":[{"internalType":"uint256[]","name":"pubInputs","type":"uint256[]"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50615013806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004614ed5565b610057565b604051901515815260200160405180910390f35b60006001610063614dfe565b600080516020614fbe8339815191526100d9565b600080516020614f9e8339815191528083108183101690838009600080516020614f9e833981519152838409600080516020614f9e8339815191528482099050600080516020614f9e8339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301528060608701510660608301527f2711433a26ab4da2ec8740666db1f70d31818824e0a122a89a12a43a63a9b70d6000830152602085015180608084015260408601518060a0850152846101448284610077565b169450505060608501518060c084015260808601518060e08501528461016a8284610077565b169450505060a08501518061010084015260c086015180610120850152846101928284610077565b16945050506101406000830120610140830152610140820151818106610160840152806101808401525060e0850151806101a0840152610100860151806101c0850152846101e08284610077565b1694505050610120850151806101e0840152610140860151806102008501528461020a8284610077565b60a061018087012061022087018190528581066102408801526102608701521694506001915050610280830153602161026083012061028083018190528181066102a08401526102c08301526101608501516102e0830181905261018086015161030084018190528461027d8284610077565b16945050506101a0850151806103208401526101c086015180610340850152846102a78284610077565b16945050506101e08501518061036084015261020086015180610380850152846102d18284610077565b1694505050610220850151806103a0840152610240860151806103c0850152846102fb8284610077565b16945050506101206102c08301206103e08301526103e0820151818106610400840152806104208401525061026085015180610440840152610280860151806104608501528461034b8284610077565b16945050506102a0850151806104808401526102c0860151806104a0850152846103758284610077565b16945050506102e0850151806104c0840152610300860151806104e08501528461039f8284610077565b16945050506103208501518061050084015261034086015180610520850152846103c98284610077565b16945050506103608501518061054084015261038086015180610560850152846103f38284610077565b16945050506101606104208301206105808301526105808201518181066105a0840152806105c084015250806103a0860151066105e0830152806103c086015106610600830152806103e08601510661062083015280610400860151066106408301528061042086015106610660830152806104408601510661068083015280610460860151066106a083015280610480860151066106c0830152806104a0860151066106e0830152806104c086015106610700830152806104e08601510661072083015280610500860151066107408301528061052086015106610760830152806105408601510661078083015280610560860151066107a083015280610580860151066107c0830152806105a0860151066107e0830152806105c086015106610800830152806105e08601510661082083015280610600860151066108408301528061062086015106610860830152806106408601510661088083015280610660860151066108a083015280610680860151066108c0830152806106a0860151066108e0830152806106c086015106610900830152806106e08601510661092083015280610700860151066109408301528061072086015106610960830152806107408601510661098083015280610760860151066109a083015280610780860151066109c0830152806107a0860151066109e08301526104406105c0830120610a00830152610a00820151818106610a2084015280610a40840152506001610a608301536021610a40830120610a608301819052818106610a80840152610aa08301526107c0850151610ac083018190526107e0860151610ae08401819052846106608284610077565b16945050506060610aa0830120610b00830152610b00820151818106610b2084015280610b408401525061080085015180610b6084015261082086015180610b80850152846106af8284610077565b1694505050806105a08301516105a084015109610ba0830181905281908009610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610cc084015108610ce0830152807f3058355f447953c1ade231a513e0f80710e9db4e679b02351f90fd168b040001610ce084015109610d00830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb26610d0084015109610d20830152807f1a6cb0b91da01e6d7a1e7d76eeef7de63954cd24b5a8c2b95ad8712f455b04db6105a084015108610d40830152807f03b743d74fd9ddb41f920179ac30e04b0ebd93e580b9c0b50061087904110bd4610d0084015109610d60830152807f2cad0a9b9157c27598be443cd550781219765462f8ffafdc4380ed1aebeef42d6105a084015108610d80830152807f1f4d7180df5014849825f3c9b0e89d79432c51f48eb5846ae63b433f28aba10b610d0084015109610da0830152807f1116dcf201e18ba5202a51ecd098bae3e5079653eb03ec265da6b254c7545ef66105a084015108610dc0830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d0084015109610de0830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff6105a084015108610e00830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d0084015109610e20830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc6105a084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d0084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e6105a084015108610e80830152806001610d0084015109610ea0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a084015108610ec0830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d610d0084015109610ee0830152807f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44846105a084015108610f00830152807f0dd30b9ad8c173555d2a33029bc807ac165b61281e9054a173af7ff4e4fc88fc610d0084015109610f20830152807f229142d808702cd45b2612b3e5b950b111d887205b291befd032759f0b0377056105a084015108610f40830152610d408201518181610d8085015109905080610f608401528181610dc085015109905080610f808401528181610e0085015109905080610fa08401528181610e4085015109905080610fc08401528181610e8085015109905080610fe08401528181610ec0850151099050806110008401528181610f00850151099050806110208401528181610f40850151099050806110408401528181610ce0850151099050806110608401525060206110a083015260206110c083015260206110e08301526110608201516111008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff611120830152600080516020614fbe8339815191526111408301528260016020611080850160c06110a0870160055afa141692506110808201516000610ce08401519050828261104086015109610ce0850152828282099150610f408401519050828261102086015109610f40850152828282099150610f008401519050828261100086015109610f00850152828282099150610ec084015190508282610fe086015109610ec0850152828282099150610e8084015190508282610fc086015109610e80850152828282099150610e4084015190508282610fa086015109610e40850152828282099150610e0084015190508282610f8086015109610e00850152828282099150610dc084015190508282610f6086015109610dc0850152828282099150610d8084015190508282610d4086015109610d8085015282828209610d408501819052610d208501518493509091500961116083015280610d80830151610d608401510961118083015280610dc0830151610da0840151096111a083015280610e00830151610de0840151096111c083015280610e40830151610e20840151096111e083015280610e80830151610e608401510961120083015280610ec0830151610ea08401510961122083015280610f00830151610ee08401510961124083015280610f40830151610f20840151096112608301528060208301516112208401510981818360408601516112408701510908905081818360608601516112608701510908611280840152506107208201516105e0830151829190086112a08301819052819080096112c08301819052819080096112e0830152806112e08301516112a084015109611300830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561130084015109611320830152806107408301516106008401510861134083018190528190800961136083018190528190800961138083015280611380830151611340840151096113a0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e86113a0840151096113c0830152806113c0830151611320840151086113e08301528061062083015182036113e08401510861140083018190526107a08301518291096114208301528061142083015161040084015109611440830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961130084015109611460830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113a08401510961148083015280611480830151611460840151086114a08301528061064083015182036114a0840151086114c083018190526107a08301518291096114e0830152806114e08301516114408401510861150083015280611500830151610400840151096115208301528061066083015182036113008401510861154083018190526107c0830151829109611560830152806115608301516115208401510861158083015280611580830151610400840151096115a0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad5610660840151096115c0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611340840151096115e0830152806115e08301516115c08401510861160083018190526106e08301518291086116208301819052819080096116408301819052819080096116608301528061166083015161162084015109611680830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610620840151096116a0830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe610640840151096116c0830152806116c08301516116a0840151086116e0830152806116e083015182036116808401510861170083018190526107c0830151829109611720830152806117208301516115a0840151086117408301528061174083015161040084015109611760830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961066084015109611780830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c8611340840151096117a0830152806117a0830151611780840151086117c083018190526107008301518291086117e0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb0261062084015109611800830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6106408401510961182083015280611820830151611800840151086118408301528061184083015182036117e08401510861186083018190526107c083015182910961188083015280611880830151611760840151086118a0830152806118a0830151610400840151096118c08301528061078083015182036001086118e0830181905261078083015182910961190083015280610780830151820360020861192083018190526119008301518291096119408301528061078083015182036003086119608301819052611940830151829109611980830152806105e08301516106a0840151086119a08301528061062083015182036119a0840151086119c083018190526119808301518291096119e0830152806119e08301516118c084015108611a0083015280611a0083015161040084015109611a2083015280610640830151820361068084015108611a408301819052611980830151829109611a6083015280611a60830151611a2084015108611a8083015280611a8083015161040084015109611aa08301528061078083015161192084015109611ac083015280611ac083015161196084015109611ae0830152806107808301518203600408611b008301819052611ae0830151829109611b2083015280611b2083015161066084015109611b40830152806106608301518203600108611b608301819052611b40830151829109611b8083015280611b80830151611aa084015108611ba083015280611ba083015161040084015109611bc083015280610660830151600209611be0830152806105e0830151820361060084015108611c008301819052611be0830151829109611c20830152806105e0830151820361062084015108611c4083015280611c408301518203611c2084015108611c6083015280610640830151820361060084015108611c8083015280611c808301518203611c6084015108611ca08301819052611b20830151829109611cc083015280611cc0830151611bc084015108611ce083015280611ce083015161040084015109611d008301528061190083015161196084015109611d2083015280611d20830151611b0084015109611d40830152806106008301516105e084015108611d60830152806106608301518203611d6084015108611d808301819052611d40830151829109611da083015280611da0830151611d0084015108611dc083015280611dc083015161040084015109611de08301819052611da0830151829108611e0083015280611e0083015161040084015109611e2083015280611940830151611b0084015109611e408301528061060083015182036105e084015108611e6083015280600160701b611e6084015108611e80830152806106608301518203611e8084015108611ea08301819052611e40830151829109611ec083015280611ec0830151611e2084015108611ee083015280611ee083015161040084015109611f00830152806108c08301518203600108611f208301819052611220830151829109611f4083015280611f40830151611f0084015108611f6083015280611f6083015161040084015109611f8083015261092082015181908009611fa0830152806109208301518203611fa084015108611fc08301819052611160830151829109611fe083015280611fe0830151611f80840151086120008301528061200083015161040084015109612020830152806109008301518203610920840151086120408301819052611220830151829109612060830152806120608301516120208401510861208083015280612080830151610400840151096120a08301528061116083015182036001086120c0830152806111a0830151611180840151086120e083018190526111c083015182910861210083018190526111e083015182910861212083018190526112008301518291086121408301528061214083015182036120c0840151086121608301528061024083015161080084015109612180830152806121808301516106e0840151086121a083018190526102a08301518291086121c083015280610240830151610820840151096121e0830152806121e08301516105e08401510861220083018190526102a083015182910861222083018190526121c08301518291096122408301528061024083015161084084015109612260830152806122608301516106008401510861228083018190526102a08301518291086122a083018190526122408301518291096122c083015280610240830151610860840151096122e0830152806122e08301516107008401510861230083018190526102a083015182910861232083018190526122c083015182910961234083018190526108e083015182910961236083015280610240830151600109612380830152806123808301516105a0840151096123a0830152806123a08301516106e0840151086123c083018190526102a08301518291086123e0830152806102408301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a209612400830152806124008301516105a084015109612420830152806124208301516105e08401510861244083018190526102a083015182910861246083018190526123e0830151829109612480830152806102408301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096124a0830152806124a08301516105a0840151096124c0830152806124c0830151610600840151086124e083018190526102a08301518291086125008301819052612480830151829109612520830152806102408301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e5209612540830152806125408301516105a084015109612560830152806125608301516107008401510861258083018190526102a08301518291086125a083018190526125208301518291096125c083018190526108c08301518291096125e0830152806125e08301518203612360840151086126008301819052612160830151829109612620830152806126208301516120a0840151086126408301528061264083015161040084015109612660830152806102408301516108808401510961268083015280612680830151610660840151086126a083018190526102a08301518291086126c0830152806102408301516108a0840151096126e0830152806126e08301516112808401510861270083018190526102a083015182910861272083018190526126c08301518291096127408301819052610940830151829109612760830152806102408301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612780830152806127808301516105a0840151096127a0830152806127a0830151610660840151086127c083018190526102a08301518291086127e0830152806102408301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d09612800830152806128008301516105a084015109612820830152806128208301516112808401510861284083018190526102a083015182910861286083018190526127e083015182910961288083018190526109208301518291096128a0830152806128a08301518203612760840151086128c083018190526121608301518291096128e0830152806128e08301516126608401510861290083015280612900830151610400840151096129208301528061096083015182036001086129408301819052611220830151829109612960830152806129608301516129208401510861298083015280612980830151610400840151096129a0830152610960820151819080096129c08301528061096083015182036129c0840151086129e08301819052611160830151829109612a0083015280612a008301516129a084015108612a2083015280612a2083015161040084015109612a40830152806102408301516109a084015108612a608301819052610980830151829109612a80830152806102a08301516109e084015108612aa08301819052612a80830151829109612ac0830152806106c083015161010009612ae083015280612ae0830151820361066084015108612b008301819052610760830151829109612b208301819052610240830151829108612b408301819052610960830151829109612b60830152806102a083015161072084015108612b808301819052612b60830151829109612ba083015280612ba08301518203612ac084015108612bc08301819052612160830151829109612be083015280612be0830151612a4084015108612c0083015280612c0083015161040084015109612c20830152806109e083015182036109a084015108612c408301819052611220830151829109612c6083015280612c60830151612c2084015108612c8083015280612c8083015161040084015109612ca083015280612160830151612c4084015109612cc0830152806109c083015182036109a084015108612ce08301819052612cc0830151829109612d0083015280612d00830151612ca084015108612d20830152610cc082015181908009612d408301819052610cc0830151829109612d608301819052610cc0830151829109612d808301819052610cc0830151829109612da083015280610cc0830151600109612dc083015280612d40830151600109612de083015280612d60830151600109612e0083015280612d80830151600109612e2083015280610ce0830151612d2084015109612e40830152806105a0830151610ba084015109612e608301528060016105a084015109612e8083015280612e808301518203610b2084015108612ea0830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e36105a084015109612ec083015280612ec08301518203610b2084015108612ee0830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb266105a084015109612f0083015280612f008301518203610b2084015108612f20830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d6105a084015109612f4083015280612f408301518203610b2084015108612f6083015280817f2b0bd16731aaf34928c0661ba43310fbbf44baa457b980ce19affba7315792a4610ba085015109610b2084015109818183847f05587d0baf86ace08f8fdf9add4e476168ef2da421ffefc32a31f9ecbea86d5d610ba0880151096105a08701510908905080612f808401525080817f1e42214ea9b2db33296ba55096815a0a6d468af715ccfa9fab93b1e3701b7f62610ba085015109610b2084015109818183847f1648cc055b11af4e0f62923d9627e377b1d413c0864af4963a826fcc6a0231fa610ba0880151096105a08701510908905080612fa08401525080817f2960d84a95d8f00f740a3d1478feb6d4b196e34bf86b62b75041b14b389d49ce610ba085015109610b2084015109818183847f21fe615ace99028841c84393e39435ea26675e494fd4886263e6fedd3cba1f16610ba0880151096105a08701510908612fc084015250612ea08201518190600109612fe08301819052612f608301518291096130008301819052612ee083015182910961302083015280817f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44856105a085015109610b2084015109818183847f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a0880151096105a087015109089050806130408401525080817f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a085015109610b2084015109818183847f1d05f683f7bacf55bccd495a5703cb329ada890af08ac0d24959599e24c832816105a0880151096105a087015109089050806130608401525080817f23af40e47e2f59a03809484a29d5e3afbf105f1fa100de8be21295a92fa75534610ba085015109610b2084015109818183847f0cb50d8e630246898046fd6c57ab74ad69238928d8b8920561cf5feac058aacd610ba0880151096105a087015109089050806130808401525080817f259eb1d15d2e74dc1a22c32210de87566d7ae67bcc859ce1e33117e171cbbcd2610ba085015109610b2084015109818183847f0705f7901a0ba3736dff0830a813cdc7350ce79c852ba2d86353d0ff84d80bb5610ba0880151096105a087015109089050806130a08401525080817f2a6bbeb56332f220c30fcaac737fd885c3596480f0ca2ff07d2733561911b7bd610ba085015109610b2084015109818183847f26a0f84d76444b5e0a60f8966cc6c88c09cf0713bd044ba9fe6c9b2e8b6263b7610ba0880151096105a087015109086130c084015250612f20820151613000830151829190096130e083015280817f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1f6105a085015109610b2084015109818183847f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a0880151096105a087015109089050806131008401525080817f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a085015109610b2084015109818183847f017829d43aa3529ba5ed3f4879cd1c09ff9f06e716afb2bc6cc72847d12771ae6105a0880151096105a0870151090861312084015250612ee0820151612fe083015182919009613140830152806001610b20840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a0870151090861316084015250612f80820151612fa083015182908290099050806131808401528181612fc0850151099050806131a08401528181613040850151099050806131c08401528181613060850151099050806131e084015281816130008501510990508061320084015281816130808501510990508061322084015281816130a08501510990508061324084015281816130c08501510990508061326084015281816130e0850151099050806132808401528181613100850151099050806132a08401528181613120850151099050806132c08401528181613140850151099050806132e08401528181613160850151099050806133008401528181612fe085015109905080613320840152506020613360830152602061338083015260206133a08301526133208201516133c08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6133e0830152600080516020614fbe8339815191526134008301528260016020613340850160c0613360870160055afa141692506133408201516000612fe08401519050828261330086015109612fe0850152828282099150613160840151905082826132e086015109613160850152828282099150613140840151905082826132c086015109613140850152828282099150613120840151905082826132a08601510961312085015282828209915061310084015190508282613280860151096131008501528282820991506130e084015190508282613260860151096130e08501528282820991506130c084015190508282613240860151096130c08501528282820991506130a084015190508282613220860151096130a08501528282820991506130808401519050828261320086015109613080850152828282099150613000840151905082826131e086015109613000850152828282099150613060840151905082826131c086015109613060850152828282099150613040840151905082826131a086015109613040850152828282099150612fc08401519050828261318086015109612fc0850152828282099150612fa084015190508282612f8086015109612fa085015282828209612f808501819052612fa085015190925083915082900890508181612fc0850151086134208401525061300082015161302083015182919009613440830152613040820151818161306085015108613460840152506130e08201516130208301518291900961348083015261308082015181816130a085015108905081816130c0850151086134a084015250613140820151613020830151829190096134c08301526131008201518181613120850151086134e084015250612fe082015161302083015182919009613500830152613160820151806135208401525061342082015181816134608501510990508061354084015281816134a08501510990508061356084015281816134e0850151099050806135808401528181613520850151099050806135a08401525060206135e0830152602061360083015260206136208301526135a08201516136408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff613660830152600080516020614fbe83398151915261368083015282600160206135c0850160c06135e0870160055afa141692506135c0820151600061352084015190508282613580860151096135208501528282820991506134e084015190508282613560860151096134e08501528282820991506134a084015190508282613540860151096134a08501528282820991506134608401519050828261342086015109613460850152828282096134208501525050613460820151613440830151829190096136a0830152806134a0830151613480840151096136c0830152806134e08301516134c0840151096136e08301528061352083015161350084015109613700830152610a20820151819080096137208301819052610a208301518291096137408301819052610a208301518291096137608301819052610a208301518291096137808301819052610a208301518291096137a08301819052610a208301518291096137c08301819052610a208301518291096137e08301819052610a208301518291096138008301819052610a208301518291096138208301819052610a208301518291096138408301819052610a208301518291096138608301819052610a208301518291096138808301819052610a208301518291096138a08301819052610a208301518291096138c08301819052610a208301518291096138e08301819052610a20830151829109613900830152610a80820151819080096139208301819052610a808301518291096139408301819052610a808301518291096139608301819052610a8083015182910961398083015280612f808301516105e084015109818183612fa086015161062087015109089050818183612fc08601516106a087015109086139a0840181905261342084015183925090096139c08301528060016139c08401518303096139e083015280612f8083015161060084015109818183612fa086015161064087015109089050818183612fc08601516106808701510908613a0084018190526134208401518392509009613a208301819052610a208301518291820309613a4083015280610a20830151600109613a6083015280613a408301516139e084015108613a80830152806001613a8084015109613aa0830152806001613a6084015109613ac083015280613440830151600109613ae083015280613040830151610660840151098181836130608601516106c08701510908613b0084018190526136a08401518392509009613b20830152806001613b20840151830309613b40830152806001613ae084015109613b6083015280613040830151610920840151098181836130608601516109408701510908613b8084018190526136a08401518392509009613ba08301819052610a208301518291820309613bc083015280610a20830151613ae084015109613be083015280613bc0830151613b4084015108613c0083015280613040830151610960840151098181836130608601516109808701510908613c2084018190526136a08401518392509009613c4083018190526137208301518291820309613c6083015280613720830151613ae084015109613c8083015280613c60830151613c0084015108613ca08301819052610a80830151829109613cc083015280610a80830151613b6084015109613ce083015280610a80830151613be084015109613d0083015280610a80830151613c8084015109613d2083015280613cc0830151613aa084015108613d4083015280613480830151600109613d60830152806130808301516108c0840151098181836130a08601516108e0870151090890508181836130c08601516109008701510908613d8084018190526136c08401518392509009613da0830152806001613da0840151830309613dc0830152806001613d6084015109613de083015280613920830151613dc084015109613e0083015280613920830151613de084015109613e2083015280613e00830151613d4084015108613e40830152806134c0830151600109613e60830152806131008301516109a0840151098181836131208601516109c08701510908613e8084018190526136e08401518392509009613ea0830152806001613ea0840151830309613ec0830152806001613e6084015109613ee083015280613940830151613ec084015109613f0083015280613940830151613ee084015109613f2083015280613f00830151613e4084015108613f4083015280613500830151600109613f60830152806131608301516109e084015109613f808301819052613700830151829109613fa0830152806001613fa0840151830309613fc0830152806001613f6084015109613fe0830152806131608301516106e08401510961400083018190526137008301518291096140208301819052610a20830151829182030961404083015280610a20830151613f608401510961406083015280614040830151613fc08401510861408083015280613160830151610700840151096140a083018190526137008301518291096140c0830181905261372083015182918203096140e083015280613720830151613f6084015109614100830152806140e083015161408084015108614120830152806131608301516107208401510961414083018190526137008301518291096141608301819052613740830151829182030961418083015280613740830151613f60840151096141a083015280614180830151614120840151086141c083015280613160830151610740840151096141e083018190526137008301518291096142008301819052613760830151829182030961422083015280613760830151613f6084015109614240830152806142208301516141c084015108614260830152806131608301516107608401510961428083018190526137008301518291096142a0830181905261378083015182918203096142c083015280613780830151613f60840151096142e0830152806142c0830151614260840151086143008301528061316083015161078084015109614320830181905261370083015182910961434083018190526137a08301518291820309614360830152806137a0830151613f608401510961438083015280614360830151614300840151086143a0830152806131608301516107a0840151096143c083018190526137008301518291096143e083018190526137c08301518291820309614400830152806137c0830151613f6084015109614420830152806144008301516143a084015108614440830152806131608301516107c084015109614460830181905261370083015182910961448083018190526137e083015182918203096144a0830152806137e0830151613f60840151096144c0830152806144a0830151614440840151086144e0830152806131608301516108008401510961450083018190526137008301518291096145208301819052613800830151829182030961454083015280613800830151613f6084015109614560830152806145408301516144e08401510861458083015280613160830151610820840151096145a083018190526137008301518291096145c0830181905261382083015182918203096145e083015280613820830151613f6084015109614600830152806145e083015161458084015108614620830152806131608301516108408401510961464083018190526137008301518291096146608301819052613840830151829182030961468083015280613840830151613f60840151096146a083015280614680830151614620840151086146c083015280613160830151610860840151096146e083018190526137008301518291096147008301819052613860830151829182030961472083015280613860830151613f6084015109614740830152806147208301516146c084015108614760830152806131608301516108808401510961478083018190526137008301518291096147a0830181905261388083015182918203096147c083015280613880830151613f60840151096147e0830152806147c083015161476084015108614800830152806131608301516108a084015109614820830181905261370083015182910961484083018190526138a08301518291820309614860830152806138a0830151613f608401510961488083015280614860830151614800840151086148a083015280613500830151612dc0840151096148c083015280613500830151612de0840151096148e083015280613500830151612e008401510961490083015280613500830151612e208401510961492083015280613160830151612e4084015109614940830181905261370083015182910961496083018190526138c08301518291820309614980830152806138c0830151613f60840151096149a0830152806138c08301516148c0840151096149c0830152806138c08301516148e0840151096149e0830152806138c083015161490084015109614a00830152806138c083015161492084015109614a20830152806149808301516148a084015108614a40830152806131608301516107e084015109614a608301819052613700830151829109614a8083018190526138e08301518291820309614aa0830152806138e0830151613f6084015109614ac083015280614aa0830151614a4084015108614ae08301819052613960830151829109614b0083015280613960830151613fe084015109614b208301528061396083015161406084015109614b408301528061396083015161410084015109614b60830152806139608301516141a084015109614b808301528061396083015161424084015109614ba0830152806139608301516142e084015109614bc08301528061396083015161438084015109614be08301528061396083015161442084015109614c00830152806139608301516144c084015109614c208301528061396083015161456084015109614c408301528061396083015161460084015109614c60830152806139608301516146a084015109614c808301528061396083015161474084015109614ca0830152806139608301516147e084015109614cc08301528061396083015161488084015109614ce0830152806139608301516149a084015109614d00830152806139608301516149c084015109614d20830152806139608301516149e084015109614d4083015280613960830151614a0084015109614d6083015280613960830151614a2084015109614d8083015280613960830151614ac084015109614da083015280614b00830151613f4084015108614dc083015280613020830151600109614de083015280610b20830151600109614e008301526001614e2083018181526002614e40850152614dc0840151614e6085015284919060409060608160075afa14169250614e20820151614e80830152614e40820151614ea08301526080820151614ec083015260a0820151614ee08301528260016040614e8085016080614e80870160065afa1416925060c0820151614f0083015260e0820151614f20830152613ac0820151614f408301528260016040614f0085016060614f00870160075afa14169250614e80820151614f60830152614ea0820151614f80830152614f00820151614fa0830152614f20820151614fc08301528260016040614f6085016080614f60870160065afa14169250610100820151614fe0830152610120820151615000830152613ce08201516150208301528260016040614fe085016060614fe0870160075afa14169250614f60820151615040830152614f80820151615060830152614fe08201516150808301526150008201516150a0830152826001604061504085016080615040870160065afa141692506103208201516150c08301526103408201516150e0830152613d0082015161510083015282600160406150c0850160606150c0870160075afa141692506150408201516151208301526150608201516151408301526150c08201516151608301526150e0820151615180830152826001604061512085016080615120870160065afa141692506103608201516151a08301526103808201516151c0830152613d208201516151e083015282600160406151a0850160606151a0870160075afa141692506151208201516152008301526151408201516152208301526151a08201516152408301526151c0820151615260830152826001604061520085016080615200870160065afa141692506102e08201516152808301526103008201516152a0830152613e208201516152c0830152826001604061528085016060615280870160075afa141692506152008201516152e08301526152208201516153008301526152808201516153208301526152a082015161534083015282600160406152e0850160806152e0870160065afa141692506101a08201516153608301526101c0820151615380830152613f208201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa141692506101e0820151615440830152610200820151615460830152614b20820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692507f2f76bb5b87a6969c4ebb851bb10df173a462316bec33392c426c2f2b3a23f18b6155208301527f1128e4c8af582c69c209db87ec18fa85466ea71b7198f6d8c79083103261fec3615540830152614b40820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f133492493eb62499c1ba03a8715f8d07e78490f157ef603bdfbafb396a1bdcbf6156008301527f079b0b5d58e739eea6bdfe4092e232bacee0d027bd0f5186c22977bfd24620d7615620830152614b60820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f187bddea7dbe1c5acd2e01afadc1c0df38180c00ab7439352151b7e801502a0b6156e08301527f0fc2689a279dba9a368a34988064e5dc4f1cd3f2598bd2a6949e1b1a02d10b76615700830152614b8082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f16fbd0af4b59dc890346304d35c999dd8dfad3a06ad8a10f474527fad9ea9c326157c08301527f2ab015bc2b8a19b48338928187638174065562d0a5a83b008546a9e6612ec6c46157e0830152614ba082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f1dcfb31490b59327642f4b9392465bd8824f732a9e94e46b0bad32b5706087af6158a08301527f16b484290b48dce843c6bab1e64e7f45eb424bb17ce605fbcea4650fb021f6006158c0830152614bc08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f1eeb3f7b26d5c9871bc2c16a4ed5056dbe613a4bad07a1865e94b5a3f1f468426159808301527f2226ac7577fc6b41920682f07383ed12ef175ee617888551e764434eda30a02e6159a0830152614be08201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f26e3fbd5c5a66607cd8371419cac48be464539f883f1edfaca3c6bf8507a7410615a608301527f08f6e991d52b47307f2f83f267b41f3f3310fa21831988da7ab39054fe2ac53b615a80830152614c00820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f1654ed6ee24ad6ebd5c4c2dc0febbb2e92d556bb946f336c7cc1566170f64cdd615b408301527f2e60765d74d1d5c043e2299c4e457312b1358f4e51cdea038ec00ef453f20a09615b60830152614c20820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f23a0c541643962fd3751f386670057a24c2a2966d6f975b8474b1df1df58aec5615c208301527f12adacf7628483c9dd1d014cb00243aa716100680f195d25d59bc85ee7fdf202615c40830152614c40820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f19780ae2901b7f5ddedf94c1b53b504977a5181f39a0502c6e86b8378203f22e615d008301527f1f5f311a3d179380fe7cd9e6d14150dc860629541bb2c8f88110e31de91c7bfa615d20830152614c60820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f021fa11f2c822b49466f473bc750e172be66ff9df35bc5a393cee59294f42b98615de08301527f2281445678651a0a05ccdbea47bde6e7a6c82e43de0a52a5414fe82995229130615e00830152614c80820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f0e67f06b3cd6ad600c3a3b705d3d178c2ea4afa419a60ff56b42774a44f2c151615ec08301527f1cc0dd45b27e99dcba7e4c721c4255ebde7a5b3aea6279859073398d6bf3ba1d615ee0830152614ca0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f279c16cd7feb17ed6cfe4ce27f00473872b340ebcae3dfe2c6d8aa97d9602273615fa08301527f0aaffc872c798473df012c13c5185eb7cca39ba51cbf0358a7f5b7903fbde64d615fc0830152614cc0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f1b711abfd5ca379b0c7a059a3c0a23f8aa6d033158b9bcb922f191cd11a374db6160808301527f2293e4350f716a42b09abf2696b53647b98656e217dfc39071b2207cb348c4946160a0830152614ce08201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa14169250610440820151616160830152610460820151616180830152614d008201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692506104808201516162408301526104a0820151616260830152614d20820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692506104c08201516163208301526104e0820151616340830152614d40820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa14169250610500820151616400830152610520820151616420830152614d60820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506105408201516164e0830152610560820151616500830152614d8082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506103a08201516165c08301526103c08201516165e0830152614da082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa14169250610ac08201516166a0830152610ae08201516166c0830152614de082015181036166e08301525081600160406166a0840160606166a0860160075afa141691506166208101516167008201526166408101516167208201526166a08101516167408201526166c0810151616760820152816001604061670084016080616700860160065afa14169150610b60810151616780820152610b808101516167a0820152614e008101516167c0820152816001604061678084016060616780860160075afa141691506167008101516167e08201526167208101516168008201526167808101516168208201526167a081015161684082015281600160406167e0840160806167e0860160065afa141691506167e08101516168608201526168008101516168808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26168a08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6168c08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6168e08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa616900820152610b60810151616920820152610b808101516169408201527f2bda3e3f6913dbd628d5cb2e235040d9902e3f5cd9b5f5669ed765984db32b556169608201527f14f987df3f0b40848192c76a191314d67fb1f2618fba33e163e28ce9e895ab806169808201527f2b11a57fe3e865318a9cba27a410871987a176b7746acccc7aa6c59c47c9c07b6169a08201527f071173db1791499cdfe9b9ca8a89c405cdf9a28e622dc3417b7d3c70882d034f6169c082015281600160206168608401610180616860860160085afa61686093909301516001149214161691505092915050565b604051806169c0016040528061034e906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e5d57614e5d614e1e565b604052919050565b600082601f830112614e7657600080fd5b813567ffffffffffffffff811115614e9057614e90614e1e565b614ea3601f8201601f1916602001614e34565b818152846020838601011115614eb857600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614ee857600080fd5b823567ffffffffffffffff80821115614f0057600080fd5b818501915085601f830112614f1457600080fd5b8135602082821115614f2857614f28614e1e565b8160051b614f37828201614e34565b928352848101820192828101908a851115614f5157600080fd5b958301955b84871015614f6f57863582529583019590830190614f56565b9750505086013592505080821115614f8657600080fd5b50614f9385828601614e65565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220fad36e747e649649da58b272be689e94c0e196a8172956777013195f5895998764736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004614ed5565b610057565b604051901515815260200160405180910390f35b60006001610063614dfe565b600080516020614fbe8339815191526100d9565b600080516020614f9e8339815191528083108183101690838009600080516020614f9e833981519152838409600080516020614f9e8339815191528482099050600080516020614f9e8339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301528060608701510660608301527f2711433a26ab4da2ec8740666db1f70d31818824e0a122a89a12a43a63a9b70d6000830152602085015180608084015260408601518060a0850152846101448284610077565b169450505060608501518060c084015260808601518060e08501528461016a8284610077565b169450505060a08501518061010084015260c086015180610120850152846101928284610077565b16945050506101406000830120610140830152610140820151818106610160840152806101808401525060e0850151806101a0840152610100860151806101c0850152846101e08284610077565b1694505050610120850151806101e0840152610140860151806102008501528461020a8284610077565b60a061018087012061022087018190528581066102408801526102608701521694506001915050610280830153602161026083012061028083018190528181066102a08401526102c08301526101608501516102e0830181905261018086015161030084018190528461027d8284610077565b16945050506101a0850151806103208401526101c086015180610340850152846102a78284610077565b16945050506101e08501518061036084015261020086015180610380850152846102d18284610077565b1694505050610220850151806103a0840152610240860151806103c0850152846102fb8284610077565b16945050506101206102c08301206103e08301526103e0820151818106610400840152806104208401525061026085015180610440840152610280860151806104608501528461034b8284610077565b16945050506102a0850151806104808401526102c0860151806104a0850152846103758284610077565b16945050506102e0850151806104c0840152610300860151806104e08501528461039f8284610077565b16945050506103208501518061050084015261034086015180610520850152846103c98284610077565b16945050506103608501518061054084015261038086015180610560850152846103f38284610077565b16945050506101606104208301206105808301526105808201518181066105a0840152806105c084015250806103a0860151066105e0830152806103c086015106610600830152806103e08601510661062083015280610400860151066106408301528061042086015106610660830152806104408601510661068083015280610460860151066106a083015280610480860151066106c0830152806104a0860151066106e0830152806104c086015106610700830152806104e08601510661072083015280610500860151066107408301528061052086015106610760830152806105408601510661078083015280610560860151066107a083015280610580860151066107c0830152806105a0860151066107e0830152806105c086015106610800830152806105e08601510661082083015280610600860151066108408301528061062086015106610860830152806106408601510661088083015280610660860151066108a083015280610680860151066108c0830152806106a0860151066108e0830152806106c086015106610900830152806106e08601510661092083015280610700860151066109408301528061072086015106610960830152806107408601510661098083015280610760860151066109a083015280610780860151066109c0830152806107a0860151066109e08301526104406105c0830120610a00830152610a00820151818106610a2084015280610a40840152506001610a608301536021610a40830120610a608301819052818106610a80840152610aa08301526107c0850151610ac083018190526107e0860151610ae08401819052846106608284610077565b16945050506060610aa0830120610b00830152610b00820151818106610b2084015280610b408401525061080085015180610b6084015261082086015180610b80850152846106af8284610077565b1694505050806105a08301516105a084015109610ba0830181905281908009610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610cc084015108610ce0830152807f3058355f447953c1ade231a513e0f80710e9db4e679b02351f90fd168b040001610ce084015109610d00830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb26610d0084015109610d20830152807f1a6cb0b91da01e6d7a1e7d76eeef7de63954cd24b5a8c2b95ad8712f455b04db6105a084015108610d40830152807f03b743d74fd9ddb41f920179ac30e04b0ebd93e580b9c0b50061087904110bd4610d0084015109610d60830152807f2cad0a9b9157c27598be443cd550781219765462f8ffafdc4380ed1aebeef42d6105a084015108610d80830152807f1f4d7180df5014849825f3c9b0e89d79432c51f48eb5846ae63b433f28aba10b610d0084015109610da0830152807f1116dcf201e18ba5202a51ecd098bae3e5079653eb03ec265da6b254c7545ef66105a084015108610dc0830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d0084015109610de0830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff6105a084015108610e00830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d0084015109610e20830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc6105a084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d0084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e6105a084015108610e80830152806001610d0084015109610ea0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a084015108610ec0830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d610d0084015109610ee0830152807f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44846105a084015108610f00830152807f0dd30b9ad8c173555d2a33029bc807ac165b61281e9054a173af7ff4e4fc88fc610d0084015109610f20830152807f229142d808702cd45b2612b3e5b950b111d887205b291befd032759f0b0377056105a084015108610f40830152610d408201518181610d8085015109905080610f608401528181610dc085015109905080610f808401528181610e0085015109905080610fa08401528181610e4085015109905080610fc08401528181610e8085015109905080610fe08401528181610ec0850151099050806110008401528181610f00850151099050806110208401528181610f40850151099050806110408401528181610ce0850151099050806110608401525060206110a083015260206110c083015260206110e08301526110608201516111008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff611120830152600080516020614fbe8339815191526111408301528260016020611080850160c06110a0870160055afa141692506110808201516000610ce08401519050828261104086015109610ce0850152828282099150610f408401519050828261102086015109610f40850152828282099150610f008401519050828261100086015109610f00850152828282099150610ec084015190508282610fe086015109610ec0850152828282099150610e8084015190508282610fc086015109610e80850152828282099150610e4084015190508282610fa086015109610e40850152828282099150610e0084015190508282610f8086015109610e00850152828282099150610dc084015190508282610f6086015109610dc0850152828282099150610d8084015190508282610d4086015109610d8085015282828209610d408501819052610d208501518493509091500961116083015280610d80830151610d608401510961118083015280610dc0830151610da0840151096111a083015280610e00830151610de0840151096111c083015280610e40830151610e20840151096111e083015280610e80830151610e608401510961120083015280610ec0830151610ea08401510961122083015280610f00830151610ee08401510961124083015280610f40830151610f20840151096112608301528060208301516112208401510981818360408601516112408701510908905081818360608601516112608701510908611280840152506107208201516105e0830151829190086112a08301819052819080096112c08301819052819080096112e0830152806112e08301516112a084015109611300830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561130084015109611320830152806107408301516106008401510861134083018190528190800961136083018190528190800961138083015280611380830151611340840151096113a0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e86113a0840151096113c0830152806113c0830151611320840151086113e08301528061062083015182036113e08401510861140083018190526107a08301518291096114208301528061142083015161040084015109611440830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961130084015109611460830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113a08401510961148083015280611480830151611460840151086114a08301528061064083015182036114a0840151086114c083018190526107a08301518291096114e0830152806114e08301516114408401510861150083015280611500830151610400840151096115208301528061066083015182036113008401510861154083018190526107c0830151829109611560830152806115608301516115208401510861158083015280611580830151610400840151096115a0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad5610660840151096115c0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611340840151096115e0830152806115e08301516115c08401510861160083018190526106e08301518291086116208301819052819080096116408301819052819080096116608301528061166083015161162084015109611680830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610620840151096116a0830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe610640840151096116c0830152806116c08301516116a0840151086116e0830152806116e083015182036116808401510861170083018190526107c0830151829109611720830152806117208301516115a0840151086117408301528061174083015161040084015109611760830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961066084015109611780830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c8611340840151096117a0830152806117a0830151611780840151086117c083018190526107008301518291086117e0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb0261062084015109611800830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6106408401510961182083015280611820830151611800840151086118408301528061184083015182036117e08401510861186083018190526107c083015182910961188083015280611880830151611760840151086118a0830152806118a0830151610400840151096118c08301528061078083015182036001086118e0830181905261078083015182910961190083015280610780830151820360020861192083018190526119008301518291096119408301528061078083015182036003086119608301819052611940830151829109611980830152806105e08301516106a0840151086119a08301528061062083015182036119a0840151086119c083018190526119808301518291096119e0830152806119e08301516118c084015108611a0083015280611a0083015161040084015109611a2083015280610640830151820361068084015108611a408301819052611980830151829109611a6083015280611a60830151611a2084015108611a8083015280611a8083015161040084015109611aa08301528061078083015161192084015109611ac083015280611ac083015161196084015109611ae0830152806107808301518203600408611b008301819052611ae0830151829109611b2083015280611b2083015161066084015109611b40830152806106608301518203600108611b608301819052611b40830151829109611b8083015280611b80830151611aa084015108611ba083015280611ba083015161040084015109611bc083015280610660830151600209611be0830152806105e0830151820361060084015108611c008301819052611be0830151829109611c20830152806105e0830151820361062084015108611c4083015280611c408301518203611c2084015108611c6083015280610640830151820361060084015108611c8083015280611c808301518203611c6084015108611ca08301819052611b20830151829109611cc083015280611cc0830151611bc084015108611ce083015280611ce083015161040084015109611d008301528061190083015161196084015109611d2083015280611d20830151611b0084015109611d40830152806106008301516105e084015108611d60830152806106608301518203611d6084015108611d808301819052611d40830151829109611da083015280611da0830151611d0084015108611dc083015280611dc083015161040084015109611de08301819052611da0830151829108611e0083015280611e0083015161040084015109611e2083015280611940830151611b0084015109611e408301528061060083015182036105e084015108611e6083015280600160701b611e6084015108611e80830152806106608301518203611e8084015108611ea08301819052611e40830151829109611ec083015280611ec0830151611e2084015108611ee083015280611ee083015161040084015109611f00830152806108c08301518203600108611f208301819052611220830151829109611f4083015280611f40830151611f0084015108611f6083015280611f6083015161040084015109611f8083015261092082015181908009611fa0830152806109208301518203611fa084015108611fc08301819052611160830151829109611fe083015280611fe0830151611f80840151086120008301528061200083015161040084015109612020830152806109008301518203610920840151086120408301819052611220830151829109612060830152806120608301516120208401510861208083015280612080830151610400840151096120a08301528061116083015182036001086120c0830152806111a0830151611180840151086120e083018190526111c083015182910861210083018190526111e083015182910861212083018190526112008301518291086121408301528061214083015182036120c0840151086121608301528061024083015161080084015109612180830152806121808301516106e0840151086121a083018190526102a08301518291086121c083015280610240830151610820840151096121e0830152806121e08301516105e08401510861220083018190526102a083015182910861222083018190526121c08301518291096122408301528061024083015161084084015109612260830152806122608301516106008401510861228083018190526102a08301518291086122a083018190526122408301518291096122c083015280610240830151610860840151096122e0830152806122e08301516107008401510861230083018190526102a083015182910861232083018190526122c083015182910961234083018190526108e083015182910961236083015280610240830151600109612380830152806123808301516105a0840151096123a0830152806123a08301516106e0840151086123c083018190526102a08301518291086123e0830152806102408301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a209612400830152806124008301516105a084015109612420830152806124208301516105e08401510861244083018190526102a083015182910861246083018190526123e0830151829109612480830152806102408301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096124a0830152806124a08301516105a0840151096124c0830152806124c0830151610600840151086124e083018190526102a08301518291086125008301819052612480830151829109612520830152806102408301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e5209612540830152806125408301516105a084015109612560830152806125608301516107008401510861258083018190526102a08301518291086125a083018190526125208301518291096125c083018190526108c08301518291096125e0830152806125e08301518203612360840151086126008301819052612160830151829109612620830152806126208301516120a0840151086126408301528061264083015161040084015109612660830152806102408301516108808401510961268083015280612680830151610660840151086126a083018190526102a08301518291086126c0830152806102408301516108a0840151096126e0830152806126e08301516112808401510861270083018190526102a083015182910861272083018190526126c08301518291096127408301819052610940830151829109612760830152806102408301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612780830152806127808301516105a0840151096127a0830152806127a0830151610660840151086127c083018190526102a08301518291086127e0830152806102408301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d09612800830152806128008301516105a084015109612820830152806128208301516112808401510861284083018190526102a083015182910861286083018190526127e083015182910961288083018190526109208301518291096128a0830152806128a08301518203612760840151086128c083018190526121608301518291096128e0830152806128e08301516126608401510861290083015280612900830151610400840151096129208301528061096083015182036001086129408301819052611220830151829109612960830152806129608301516129208401510861298083015280612980830151610400840151096129a0830152610960820151819080096129c08301528061096083015182036129c0840151086129e08301819052611160830151829109612a0083015280612a008301516129a084015108612a2083015280612a2083015161040084015109612a40830152806102408301516109a084015108612a608301819052610980830151829109612a80830152806102a08301516109e084015108612aa08301819052612a80830151829109612ac0830152806106c083015161010009612ae083015280612ae0830151820361066084015108612b008301819052610760830151829109612b208301819052610240830151829108612b408301819052610960830151829109612b60830152806102a083015161072084015108612b808301819052612b60830151829109612ba083015280612ba08301518203612ac084015108612bc08301819052612160830151829109612be083015280612be0830151612a4084015108612c0083015280612c0083015161040084015109612c20830152806109e083015182036109a084015108612c408301819052611220830151829109612c6083015280612c60830151612c2084015108612c8083015280612c8083015161040084015109612ca083015280612160830151612c4084015109612cc0830152806109c083015182036109a084015108612ce08301819052612cc0830151829109612d0083015280612d00830151612ca084015108612d20830152610cc082015181908009612d408301819052610cc0830151829109612d608301819052610cc0830151829109612d808301819052610cc0830151829109612da083015280610cc0830151600109612dc083015280612d40830151600109612de083015280612d60830151600109612e0083015280612d80830151600109612e2083015280610ce0830151612d2084015109612e40830152806105a0830151610ba084015109612e608301528060016105a084015109612e8083015280612e808301518203610b2084015108612ea0830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e36105a084015109612ec083015280612ec08301518203610b2084015108612ee0830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb266105a084015109612f0083015280612f008301518203610b2084015108612f20830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d6105a084015109612f4083015280612f408301518203610b2084015108612f6083015280817f2b0bd16731aaf34928c0661ba43310fbbf44baa457b980ce19affba7315792a4610ba085015109610b2084015109818183847f05587d0baf86ace08f8fdf9add4e476168ef2da421ffefc32a31f9ecbea86d5d610ba0880151096105a08701510908905080612f808401525080817f1e42214ea9b2db33296ba55096815a0a6d468af715ccfa9fab93b1e3701b7f62610ba085015109610b2084015109818183847f1648cc055b11af4e0f62923d9627e377b1d413c0864af4963a826fcc6a0231fa610ba0880151096105a08701510908905080612fa08401525080817f2960d84a95d8f00f740a3d1478feb6d4b196e34bf86b62b75041b14b389d49ce610ba085015109610b2084015109818183847f21fe615ace99028841c84393e39435ea26675e494fd4886263e6fedd3cba1f16610ba0880151096105a08701510908612fc084015250612ea08201518190600109612fe08301819052612f608301518291096130008301819052612ee083015182910961302083015280817f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44856105a085015109610b2084015109818183847f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a0880151096105a087015109089050806130408401525080817f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a085015109610b2084015109818183847f1d05f683f7bacf55bccd495a5703cb329ada890af08ac0d24959599e24c832816105a0880151096105a087015109089050806130608401525080817f23af40e47e2f59a03809484a29d5e3afbf105f1fa100de8be21295a92fa75534610ba085015109610b2084015109818183847f0cb50d8e630246898046fd6c57ab74ad69238928d8b8920561cf5feac058aacd610ba0880151096105a087015109089050806130808401525080817f259eb1d15d2e74dc1a22c32210de87566d7ae67bcc859ce1e33117e171cbbcd2610ba085015109610b2084015109818183847f0705f7901a0ba3736dff0830a813cdc7350ce79c852ba2d86353d0ff84d80bb5610ba0880151096105a087015109089050806130a08401525080817f2a6bbeb56332f220c30fcaac737fd885c3596480f0ca2ff07d2733561911b7bd610ba085015109610b2084015109818183847f26a0f84d76444b5e0a60f8966cc6c88c09cf0713bd044ba9fe6c9b2e8b6263b7610ba0880151096105a087015109086130c084015250612f20820151613000830151829190096130e083015280817f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1f6105a085015109610b2084015109818183847f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a0880151096105a087015109089050806131008401525080817f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a085015109610b2084015109818183847f017829d43aa3529ba5ed3f4879cd1c09ff9f06e716afb2bc6cc72847d12771ae6105a0880151096105a0870151090861312084015250612ee0820151612fe083015182919009613140830152806001610b20840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a0870151090861316084015250612f80820151612fa083015182908290099050806131808401528181612fc0850151099050806131a08401528181613040850151099050806131c08401528181613060850151099050806131e084015281816130008501510990508061320084015281816130808501510990508061322084015281816130a08501510990508061324084015281816130c08501510990508061326084015281816130e0850151099050806132808401528181613100850151099050806132a08401528181613120850151099050806132c08401528181613140850151099050806132e08401528181613160850151099050806133008401528181612fe085015109905080613320840152506020613360830152602061338083015260206133a08301526133208201516133c08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6133e0830152600080516020614fbe8339815191526134008301528260016020613340850160c0613360870160055afa141692506133408201516000612fe08401519050828261330086015109612fe0850152828282099150613160840151905082826132e086015109613160850152828282099150613140840151905082826132c086015109613140850152828282099150613120840151905082826132a08601510961312085015282828209915061310084015190508282613280860151096131008501528282820991506130e084015190508282613260860151096130e08501528282820991506130c084015190508282613240860151096130c08501528282820991506130a084015190508282613220860151096130a08501528282820991506130808401519050828261320086015109613080850152828282099150613000840151905082826131e086015109613000850152828282099150613060840151905082826131c086015109613060850152828282099150613040840151905082826131a086015109613040850152828282099150612fc08401519050828261318086015109612fc0850152828282099150612fa084015190508282612f8086015109612fa085015282828209612f808501819052612fa085015190925083915082900890508181612fc0850151086134208401525061300082015161302083015182919009613440830152613040820151818161306085015108613460840152506130e08201516130208301518291900961348083015261308082015181816130a085015108905081816130c0850151086134a084015250613140820151613020830151829190096134c08301526131008201518181613120850151086134e084015250612fe082015161302083015182919009613500830152613160820151806135208401525061342082015181816134608501510990508061354084015281816134a08501510990508061356084015281816134e0850151099050806135808401528181613520850151099050806135a08401525060206135e0830152602061360083015260206136208301526135a08201516136408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff613660830152600080516020614fbe83398151915261368083015282600160206135c0850160c06135e0870160055afa141692506135c0820151600061352084015190508282613580860151096135208501528282820991506134e084015190508282613560860151096134e08501528282820991506134a084015190508282613540860151096134a08501528282820991506134608401519050828261342086015109613460850152828282096134208501525050613460820151613440830151829190096136a0830152806134a0830151613480840151096136c0830152806134e08301516134c0840151096136e08301528061352083015161350084015109613700830152610a20820151819080096137208301819052610a208301518291096137408301819052610a208301518291096137608301819052610a208301518291096137808301819052610a208301518291096137a08301819052610a208301518291096137c08301819052610a208301518291096137e08301819052610a208301518291096138008301819052610a208301518291096138208301819052610a208301518291096138408301819052610a208301518291096138608301819052610a208301518291096138808301819052610a208301518291096138a08301819052610a208301518291096138c08301819052610a208301518291096138e08301819052610a20830151829109613900830152610a80820151819080096139208301819052610a808301518291096139408301819052610a808301518291096139608301819052610a8083015182910961398083015280612f808301516105e084015109818183612fa086015161062087015109089050818183612fc08601516106a087015109086139a0840181905261342084015183925090096139c08301528060016139c08401518303096139e083015280612f8083015161060084015109818183612fa086015161064087015109089050818183612fc08601516106808701510908613a0084018190526134208401518392509009613a208301819052610a208301518291820309613a4083015280610a20830151600109613a6083015280613a408301516139e084015108613a80830152806001613a8084015109613aa0830152806001613a6084015109613ac083015280613440830151600109613ae083015280613040830151610660840151098181836130608601516106c08701510908613b0084018190526136a08401518392509009613b20830152806001613b20840151830309613b40830152806001613ae084015109613b6083015280613040830151610920840151098181836130608601516109408701510908613b8084018190526136a08401518392509009613ba08301819052610a208301518291820309613bc083015280610a20830151613ae084015109613be083015280613bc0830151613b4084015108613c0083015280613040830151610960840151098181836130608601516109808701510908613c2084018190526136a08401518392509009613c4083018190526137208301518291820309613c6083015280613720830151613ae084015109613c8083015280613c60830151613c0084015108613ca08301819052610a80830151829109613cc083015280610a80830151613b6084015109613ce083015280610a80830151613be084015109613d0083015280610a80830151613c8084015109613d2083015280613cc0830151613aa084015108613d4083015280613480830151600109613d60830152806130808301516108c0840151098181836130a08601516108e0870151090890508181836130c08601516109008701510908613d8084018190526136c08401518392509009613da0830152806001613da0840151830309613dc0830152806001613d6084015109613de083015280613920830151613dc084015109613e0083015280613920830151613de084015109613e2083015280613e00830151613d4084015108613e40830152806134c0830151600109613e60830152806131008301516109a0840151098181836131208601516109c08701510908613e8084018190526136e08401518392509009613ea0830152806001613ea0840151830309613ec0830152806001613e6084015109613ee083015280613940830151613ec084015109613f0083015280613940830151613ee084015109613f2083015280613f00830151613e4084015108613f4083015280613500830151600109613f60830152806131608301516109e084015109613f808301819052613700830151829109613fa0830152806001613fa0840151830309613fc0830152806001613f6084015109613fe0830152806131608301516106e08401510961400083018190526137008301518291096140208301819052610a20830151829182030961404083015280610a20830151613f608401510961406083015280614040830151613fc08401510861408083015280613160830151610700840151096140a083018190526137008301518291096140c0830181905261372083015182918203096140e083015280613720830151613f6084015109614100830152806140e083015161408084015108614120830152806131608301516107208401510961414083018190526137008301518291096141608301819052613740830151829182030961418083015280613740830151613f60840151096141a083015280614180830151614120840151086141c083015280613160830151610740840151096141e083018190526137008301518291096142008301819052613760830151829182030961422083015280613760830151613f6084015109614240830152806142208301516141c084015108614260830152806131608301516107608401510961428083018190526137008301518291096142a0830181905261378083015182918203096142c083015280613780830151613f60840151096142e0830152806142c0830151614260840151086143008301528061316083015161078084015109614320830181905261370083015182910961434083018190526137a08301518291820309614360830152806137a0830151613f608401510961438083015280614360830151614300840151086143a0830152806131608301516107a0840151096143c083018190526137008301518291096143e083018190526137c08301518291820309614400830152806137c0830151613f6084015109614420830152806144008301516143a084015108614440830152806131608301516107c084015109614460830181905261370083015182910961448083018190526137e083015182918203096144a0830152806137e0830151613f60840151096144c0830152806144a0830151614440840151086144e0830152806131608301516108008401510961450083018190526137008301518291096145208301819052613800830151829182030961454083015280613800830151613f6084015109614560830152806145408301516144e08401510861458083015280613160830151610820840151096145a083018190526137008301518291096145c0830181905261382083015182918203096145e083015280613820830151613f6084015109614600830152806145e083015161458084015108614620830152806131608301516108408401510961464083018190526137008301518291096146608301819052613840830151829182030961468083015280613840830151613f60840151096146a083015280614680830151614620840151086146c083015280613160830151610860840151096146e083018190526137008301518291096147008301819052613860830151829182030961472083015280613860830151613f6084015109614740830152806147208301516146c084015108614760830152806131608301516108808401510961478083018190526137008301518291096147a0830181905261388083015182918203096147c083015280613880830151613f60840151096147e0830152806147c083015161476084015108614800830152806131608301516108a084015109614820830181905261370083015182910961484083018190526138a08301518291820309614860830152806138a0830151613f608401510961488083015280614860830151614800840151086148a083015280613500830151612dc0840151096148c083015280613500830151612de0840151096148e083015280613500830151612e008401510961490083015280613500830151612e208401510961492083015280613160830151612e4084015109614940830181905261370083015182910961496083018190526138c08301518291820309614980830152806138c0830151613f60840151096149a0830152806138c08301516148c0840151096149c0830152806138c08301516148e0840151096149e0830152806138c083015161490084015109614a00830152806138c083015161492084015109614a20830152806149808301516148a084015108614a40830152806131608301516107e084015109614a608301819052613700830151829109614a8083018190526138e08301518291820309614aa0830152806138e0830151613f6084015109614ac083015280614aa0830151614a4084015108614ae08301819052613960830151829109614b0083015280613960830151613fe084015109614b208301528061396083015161406084015109614b408301528061396083015161410084015109614b60830152806139608301516141a084015109614b808301528061396083015161424084015109614ba0830152806139608301516142e084015109614bc08301528061396083015161438084015109614be08301528061396083015161442084015109614c00830152806139608301516144c084015109614c208301528061396083015161456084015109614c408301528061396083015161460084015109614c60830152806139608301516146a084015109614c808301528061396083015161474084015109614ca0830152806139608301516147e084015109614cc08301528061396083015161488084015109614ce0830152806139608301516149a084015109614d00830152806139608301516149c084015109614d20830152806139608301516149e084015109614d4083015280613960830151614a0084015109614d6083015280613960830151614a2084015109614d8083015280613960830151614ac084015109614da083015280614b00830151613f4084015108614dc083015280613020830151600109614de083015280610b20830151600109614e008301526001614e2083018181526002614e40850152614dc0840151614e6085015284919060409060608160075afa14169250614e20820151614e80830152614e40820151614ea08301526080820151614ec083015260a0820151614ee08301528260016040614e8085016080614e80870160065afa1416925060c0820151614f0083015260e0820151614f20830152613ac0820151614f408301528260016040614f0085016060614f00870160075afa14169250614e80820151614f60830152614ea0820151614f80830152614f00820151614fa0830152614f20820151614fc08301528260016040614f6085016080614f60870160065afa14169250610100820151614fe0830152610120820151615000830152613ce08201516150208301528260016040614fe085016060614fe0870160075afa14169250614f60820151615040830152614f80820151615060830152614fe08201516150808301526150008201516150a0830152826001604061504085016080615040870160065afa141692506103208201516150c08301526103408201516150e0830152613d0082015161510083015282600160406150c0850160606150c0870160075afa141692506150408201516151208301526150608201516151408301526150c08201516151608301526150e0820151615180830152826001604061512085016080615120870160065afa141692506103608201516151a08301526103808201516151c0830152613d208201516151e083015282600160406151a0850160606151a0870160075afa141692506151208201516152008301526151408201516152208301526151a08201516152408301526151c0820151615260830152826001604061520085016080615200870160065afa141692506102e08201516152808301526103008201516152a0830152613e208201516152c0830152826001604061528085016060615280870160075afa141692506152008201516152e08301526152208201516153008301526152808201516153208301526152a082015161534083015282600160406152e0850160806152e0870160065afa141692506101a08201516153608301526101c0820151615380830152613f208201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa141692506101e0820151615440830152610200820151615460830152614b20820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692507f2f76bb5b87a6969c4ebb851bb10df173a462316bec33392c426c2f2b3a23f18b6155208301527f1128e4c8af582c69c209db87ec18fa85466ea71b7198f6d8c79083103261fec3615540830152614b40820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f133492493eb62499c1ba03a8715f8d07e78490f157ef603bdfbafb396a1bdcbf6156008301527f079b0b5d58e739eea6bdfe4092e232bacee0d027bd0f5186c22977bfd24620d7615620830152614b60820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f187bddea7dbe1c5acd2e01afadc1c0df38180c00ab7439352151b7e801502a0b6156e08301527f0fc2689a279dba9a368a34988064e5dc4f1cd3f2598bd2a6949e1b1a02d10b76615700830152614b8082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f16fbd0af4b59dc890346304d35c999dd8dfad3a06ad8a10f474527fad9ea9c326157c08301527f2ab015bc2b8a19b48338928187638174065562d0a5a83b008546a9e6612ec6c46157e0830152614ba082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f1dcfb31490b59327642f4b9392465bd8824f732a9e94e46b0bad32b5706087af6158a08301527f16b484290b48dce843c6bab1e64e7f45eb424bb17ce605fbcea4650fb021f6006158c0830152614bc08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f1eeb3f7b26d5c9871bc2c16a4ed5056dbe613a4bad07a1865e94b5a3f1f468426159808301527f2226ac7577fc6b41920682f07383ed12ef175ee617888551e764434eda30a02e6159a0830152614be08201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f26e3fbd5c5a66607cd8371419cac48be464539f883f1edfaca3c6bf8507a7410615a608301527f08f6e991d52b47307f2f83f267b41f3f3310fa21831988da7ab39054fe2ac53b615a80830152614c00820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f1654ed6ee24ad6ebd5c4c2dc0febbb2e92d556bb946f336c7cc1566170f64cdd615b408301527f2e60765d74d1d5c043e2299c4e457312b1358f4e51cdea038ec00ef453f20a09615b60830152614c20820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f23a0c541643962fd3751f386670057a24c2a2966d6f975b8474b1df1df58aec5615c208301527f12adacf7628483c9dd1d014cb00243aa716100680f195d25d59bc85ee7fdf202615c40830152614c40820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f19780ae2901b7f5ddedf94c1b53b504977a5181f39a0502c6e86b8378203f22e615d008301527f1f5f311a3d179380fe7cd9e6d14150dc860629541bb2c8f88110e31de91c7bfa615d20830152614c60820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f021fa11f2c822b49466f473bc750e172be66ff9df35bc5a393cee59294f42b98615de08301527f2281445678651a0a05ccdbea47bde6e7a6c82e43de0a52a5414fe82995229130615e00830152614c80820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f0e67f06b3cd6ad600c3a3b705d3d178c2ea4afa419a60ff56b42774a44f2c151615ec08301527f1cc0dd45b27e99dcba7e4c721c4255ebde7a5b3aea6279859073398d6bf3ba1d615ee0830152614ca0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f279c16cd7feb17ed6cfe4ce27f00473872b340ebcae3dfe2c6d8aa97d9602273615fa08301527f0aaffc872c798473df012c13c5185eb7cca39ba51cbf0358a7f5b7903fbde64d615fc0830152614cc0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f1b711abfd5ca379b0c7a059a3c0a23f8aa6d033158b9bcb922f191cd11a374db6160808301527f2293e4350f716a42b09abf2696b53647b98656e217dfc39071b2207cb348c4946160a0830152614ce08201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa14169250610440820151616160830152610460820151616180830152614d008201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692506104808201516162408301526104a0820151616260830152614d20820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692506104c08201516163208301526104e0820151616340830152614d40820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa14169250610500820151616400830152610520820151616420830152614d60820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506105408201516164e0830152610560820151616500830152614d8082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506103a08201516165c08301526103c08201516165e0830152614da082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa14169250610ac08201516166a0830152610ae08201516166c0830152614de082015181036166e08301525081600160406166a0840160606166a0860160075afa141691506166208101516167008201526166408101516167208201526166a08101516167408201526166c0810151616760820152816001604061670084016080616700860160065afa14169150610b60810151616780820152610b808101516167a0820152614e008101516167c0820152816001604061678084016060616780860160075afa141691506167008101516167e08201526167208101516168008201526167808101516168208201526167a081015161684082015281600160406167e0840160806167e0860160065afa141691506167e08101516168608201526168008101516168808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26168a08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6168c08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6168e08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa616900820152610b60810151616920820152610b808101516169408201527f2bda3e3f6913dbd628d5cb2e235040d9902e3f5cd9b5f5669ed765984db32b556169608201527f14f987df3f0b40848192c76a191314d67fb1f2618fba33e163e28ce9e895ab806169808201527f2b11a57fe3e865318a9cba27a410871987a176b7746acccc7aa6c59c47c9c07b6169a08201527f071173db1791499cdfe9b9ca8a89c405cdf9a28e622dc3417b7d3c70882d034f6169c082015281600160206168608401610180616860860160085afa61686093909301516001149214161691505092915050565b604051806169c0016040528061034e906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e5d57614e5d614e1e565b604052919050565b600082601f830112614e7657600080fd5b813567ffffffffffffffff811115614e9057614e90614e1e565b614ea3601f8201601f1916602001614e34565b818152846020838601011115614eb857600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614ee857600080fd5b823567ffffffffffffffff80821115614f0057600080fd5b818501915085601f830112614f1457600080fd5b8135602082821115614f2857614f28614e1e565b8160051b614f37828201614e34565b928352848101820192828101908a851115614f5157600080fd5b958301955b84871015614f6f57863582529583019590830190614f56565b9750505086013592505080821115614f8657600080fd5b50614f9385828601614e65565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220fad36e747e649649da58b272be689e94c0e196a8172956777013195f5895998764736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/abi/Summa.json b/backend/src/contracts/abi/Summa.json index 2356f3a1..fd7e3ec0 100644 --- a/backend/src/contracts/abi/Summa.json +++ b/backend/src/contracts/abi/Summa.json @@ -1 +1 @@ -{"_format":"hh-sol-artifact-1","contractName":"Summa","sourceName":"src/Summa.sol","abi":[{"inputs":[{"internalType":"contract IVerifier","name":"_solvencyVerifier","type":"address"},{"internalType":"contract IVerifier","name":"_inclusionVerifier","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"indexed":false,"internalType":"struct Summa.AddressOwnershipProof[]","name":"addressOwnershipProofs","type":"tuple[]"}],"name":"AddressOwnershipProofSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mstRoot","type":"uint256"},{"components":[{"internalType":"string","name":"assetName","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct Summa.Asset[]","name":"assets","type":"tuple[]"}],"name":"SolvencyProofSubmitted","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressOwnershipProofs","outputs":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mstRoots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"ownershipProofByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Summa.AddressOwnershipProof[]","name":"_addressOwnershipProofs","type":"tuple[]"}],"name":"submitProofOfAddressOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mstRoot","type":"uint256"},{"components":[{"internalType":"string","name":"assetName","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Summa.Asset[]","name":"assets","type":"tuple[]"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"submitProofOfSolvency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"publicInputs","type":"uint256[]"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"verifyInclusionProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"publicInputs","type":"uint256[]"}],"name":"verifySolvencyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x60c06040523480156200001157600080fd5b50604051620016f3380380620016f38339810160408190526200003491620000c4565b6200003f3362000057565b6001600160a01b039182166080521660a052620000fc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000bf57600080fd5b919050565b60008060408385031215620000d857600080fd5b620000e383620000a7565b9150620000f360208401620000a7565b90509250929050565b60805160a0516115d1620001226000396000610a850152600061045e01526115d16000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610136578063a3c4bcf814610151578063c7ddca0e14610174578063c8e5814714610187578063f2fde38b1461019a57600080fd5b806323eb94a0146100a3578063413a9f2d146100d65780636c7684fe146100eb578063715018a61461010e5780637f3bfb2e14610116575b600080fd5b6100c36100b1366004610c28565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b6100e96100e4366004610d68565b6101ad565b005b6100fe6100f9366004610f22565b610444565b60405190151581526020016100cd565b6100e96104df565b6100c3610124366004610c28565b60036020526000908152604090205481565b6000546040516001600160a01b0390911681526020016100cd565b61016461015f366004610c28565b6104f3565b6040516100cd9493929190610fcc565b6100e9610182366004611024565b610753565b6100fe61019536600461117e565b6109fd565b6100e96101a83660046111eb565b610b05565b6101b5610b7e565b60015460000361022b5760405162461bcd60e51b815260206004820152603660248201527f5468652043455820686173206e6f74207375626d697474656420616e792061646044820152756472657373206f776e6572736869702070726f6f667360501b60648201526084015b60405180910390fd5b60008351600161023b9190611231565b67ffffffffffffffff81111561025357610253610c41565b60405190808252806020026020018201604052801561027c578160200160208202803683370190505b509050848160008151811061029357610293611244565b60200260200101818152505060005b845181101561038e578481815181106102bd576102bd611244565b602002602001015160200151516000141580156102f957508481815181106102e7576102e7611244565b60200260200101516000015151600014155b6103355760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908185cdcd95d609a1b6044820152606401610222565b84818151811061034757610347611244565b602002602001015160400151828260016103619190611231565b8151811061037157610371611244565b6020908102919091010152806103868161125a565b9150506102a2565b506103998382610444565b6103d85760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2102d2590383937b7b360811b6044820152606401610222565b6000828152600360205260408120869055815183917f0473581c3cf437afc52207d88ce1541afbc7ce9fdb83b4d4d3b7214beed56ff59184919061041e5761041e611244565b602002602001015186604051610435929190611273565b60405180910390a25050505050565b604051630bd205a960e41b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610495908590879060040161130a565b602060405180830381865afa1580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d69190611361565b90505b92915050565b6104e7610b7e565b6104f16000610bd8565b565b6001818154811061050357600080fd5b906000526020600020906004020160009150905080600001805461052690611383565b80601f016020809104026020016040519081016040528092919081815260200182805461055290611383565b801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b5050505050908060010180546105b490611383565b80601f01602080910402602001604051908101604052809291908181526020018280546105e090611383565b801561062d5780601f106106025761010080835404028352916020019161062d565b820191906000526020600020905b81548152906001019060200180831161061057829003601f168201915b50505050509080600201805461064290611383565b80601f016020809104026020016040519081016040528092919081815260200182805461066e90611383565b80156106bb5780601f10610690576101008083540402835291602001916106bb565b820191906000526020600020905b81548152906001019060200180831161069e57829003601f168201915b5050505050908060030180546106d090611383565b80601f01602080910402602001604051908101604052809291908181526020018280546106fc90611383565b80156107495780601f1061071e57610100808354040283529160200191610749565b820191906000526020600020905b81548152906001019060200180831161072c57829003601f168201915b5050505050905084565b61075b610b7e565b60005b81518110156109c257600082828151811061077b5761077b611244565b60200260200101516000015160405160200161079791906113bd565b60408051601f19818403018152918152815160209283012060008181526002909352912054909150801561080d5760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920766572696669656400000000000000006044820152606401610222565b610818836001611231565b600083815260026020526040902055835160019085908590811061083e5761083e611244565b60209081029190910181015182546001810184556000938452919092208251600490920201908190610870908261141f565b5060208201516001820190610885908261141f565b506040820151600282019061089a908261141f565b50606082015160038201906108af908261141f565b5050508383815181106108c4576108c4611244565b6020026020010151600001515160001415801561090057508383815181106108ee576108ee611244565b60200260200101516020015151600014155b801561092b575083838151811061091957610919611244565b60200260200101516040015151600014155b8015610956575083838151811061094457610944611244565b60200260200101516060015151600014155b6109ad5760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b6064820152608401610222565b505080806109ba9061125a565b91505061075e565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516109f291906114df565b60405180910390a150565b600082600181518110610a1257610a12611244565b6020026020010151600360008481526020019081526020016000205414610a6e5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081354d5081c9bdbdd60821b6044820152606401610222565b604051630bd205a960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610abc908690889060040161130a565b602060405180830381865afa158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd9190611361565b949350505050565b610b0d610b7e565b6001600160a01b038116610b725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610222565b610b7b81610bd8565b50565b6000546001600160a01b031633146104f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610222565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610c3a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b60405290565b6040516080810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b604051601f8201601f1916810167ffffffffffffffff81118282101715610ccc57610ccc610c41565b604052919050565b600067ffffffffffffffff821115610cee57610cee610c41565b5060051b60200190565b600082601f830112610d0957600080fd5b813567ffffffffffffffff811115610d2357610d23610c41565b610d36601f8201601f1916602001610ca3565b818152846020838601011115610d4b57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215610d7e57600080fd5b84359350602085013567ffffffffffffffff80821115610d9d57600080fd5b818701915087601f830112610db157600080fd5b610dc3610dbe8335610cd4565b610ca3565b82358082526020808301929160051b8501018a811115610de257600080fd5b602085015b81811015610e84578481351115610dfd57600080fd5b803586016060818e03601f19011215610e1557600080fd5b610e1d610c57565b602082013587811115610e2f57600080fd5b610e3e8f602083860101610cf8565b825250604082013587811115610e5357600080fd5b610e628f602083860101610cf8565b6020838101919091526060939093013560408301525085529384019301610de7565b5090965050506040870135915080821115610e9e57600080fd5b50610eab87828801610cf8565b949793965093946060013593505050565b600082601f830112610ecd57600080fd5b81356020610edd610dbe83610cd4565b82815260059290921b84018101918181019086841115610efc57600080fd5b8286015b84811015610f175780358352918301918301610f00565b509695505050505050565b60008060408385031215610f3557600080fd5b823567ffffffffffffffff80821115610f4d57600080fd5b610f5986838701610cf8565b93506020850135915080821115610f6f57600080fd5b50610f7c85828601610ebc565b9150509250929050565b6000815180845260005b81811015610fac57602081850181015186830182015201610f90565b506000602082860101526020601f19601f83011685010191505092915050565b608081526000610fdf6080830187610f86565b8281036020840152610ff18187610f86565b905082810360408401526110058186610f86565b905082810360608401526110198185610f86565b979650505050505050565b6000602080838503121561103757600080fd5b823567ffffffffffffffff8082111561104f57600080fd5b818501915085601f83011261106357600080fd5b8135611071610dbe82610cd4565b81815260059190911b8301840190848101908883111561109057600080fd5b8585015b83811015611171578035858111156110ab57600080fd5b86016080818c03601f190112156110c25760008081fd5b6110ca610c80565b88820135878111156110dc5760008081fd5b6110ea8d8b83860101610cf8565b825250604080830135888111156111015760008081fd5b61110f8e8c83870101610cf8565b8b84015250606080840135898111156111285760008081fd5b6111368f8d83880101610cf8565b838501525060808401359150888211156111505760008081fd5b61115e8e8c84870101610cf8565b9083015250845250918601918601611094565b5098975050505050505050565b60008060006060848603121561119357600080fd5b833567ffffffffffffffff808211156111ab57600080fd5b6111b787838801610cf8565b945060208601359150808211156111cd57600080fd5b506111da86828701610ebc565b925050604084013590509250925092565b6000602082840312156111fd57600080fd5b81356001600160a01b038116811461121457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104d9576104d961121b565b634e487b7160e01b600052603260045260246000fd5b60006001820161126c5761126c61121b565b5060010190565b6000604080830185845260208281860152818651808452606093508387019150838160051b88010183890160005b838110156112fa57898303605f19018552815180518885526112c589860182610f86565b905087820151858203898701526112dc8282610f86565b928b0151958b019590955250948601949250908501906001016112a1565b50909a9950505050505050505050565b604080825283519082018190526000906020906060840190828701845b8281101561134357815184529284019290840190600101611327565b505050838103828501526113578186610f86565b9695505050505050565b60006020828403121561137357600080fd5b8151801515811461121457600080fd5b600181811c9082168061139757607f821691505b6020821081036113b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020815260006104d66020830184610f86565b601f82111561141a57600081815260208120601f850160051c810160208610156113f75750805b601f850160051c820191505b8181101561141657828155600101611403565b5050505b505050565b815167ffffffffffffffff81111561143957611439610c41565b61144d816114478454611383565b846113d0565b602080601f831160018114611482576000841561146a5750858301515b600019600386901b1c1916600185901b178555611416565b600085815260208120601f198616915b828110156114b157888601518255948401946001909101908401611492565b50858210156114cf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561158d57603f1989840301855281516080815181865261152c82870182610f86565b915050888201518582038a8701526115448282610f86565b915050878201518582038987015261155c8282610f86565b915050606080830151925085820381870152506115798183610f86565b968901969450505090860190600101611506565b50909897505050505050505056fea26469706673582212205892833baedff2908a642dc60ace741d7f4d60e2a24958e9ef1d8db67a8df3b264736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610136578063a3c4bcf814610151578063c7ddca0e14610174578063c8e5814714610187578063f2fde38b1461019a57600080fd5b806323eb94a0146100a3578063413a9f2d146100d65780636c7684fe146100eb578063715018a61461010e5780637f3bfb2e14610116575b600080fd5b6100c36100b1366004610c28565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b6100e96100e4366004610d68565b6101ad565b005b6100fe6100f9366004610f22565b610444565b60405190151581526020016100cd565b6100e96104df565b6100c3610124366004610c28565b60036020526000908152604090205481565b6000546040516001600160a01b0390911681526020016100cd565b61016461015f366004610c28565b6104f3565b6040516100cd9493929190610fcc565b6100e9610182366004611024565b610753565b6100fe61019536600461117e565b6109fd565b6100e96101a83660046111eb565b610b05565b6101b5610b7e565b60015460000361022b5760405162461bcd60e51b815260206004820152603660248201527f5468652043455820686173206e6f74207375626d697474656420616e792061646044820152756472657373206f776e6572736869702070726f6f667360501b60648201526084015b60405180910390fd5b60008351600161023b9190611231565b67ffffffffffffffff81111561025357610253610c41565b60405190808252806020026020018201604052801561027c578160200160208202803683370190505b509050848160008151811061029357610293611244565b60200260200101818152505060005b845181101561038e578481815181106102bd576102bd611244565b602002602001015160200151516000141580156102f957508481815181106102e7576102e7611244565b60200260200101516000015151600014155b6103355760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908185cdcd95d609a1b6044820152606401610222565b84818151811061034757610347611244565b602002602001015160400151828260016103619190611231565b8151811061037157610371611244565b6020908102919091010152806103868161125a565b9150506102a2565b506103998382610444565b6103d85760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2102d2590383937b7b360811b6044820152606401610222565b6000828152600360205260408120869055815183917f0473581c3cf437afc52207d88ce1541afbc7ce9fdb83b4d4d3b7214beed56ff59184919061041e5761041e611244565b602002602001015186604051610435929190611273565b60405180910390a25050505050565b604051630bd205a960e41b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610495908590879060040161130a565b602060405180830381865afa1580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d69190611361565b90505b92915050565b6104e7610b7e565b6104f16000610bd8565b565b6001818154811061050357600080fd5b906000526020600020906004020160009150905080600001805461052690611383565b80601f016020809104026020016040519081016040528092919081815260200182805461055290611383565b801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b5050505050908060010180546105b490611383565b80601f01602080910402602001604051908101604052809291908181526020018280546105e090611383565b801561062d5780601f106106025761010080835404028352916020019161062d565b820191906000526020600020905b81548152906001019060200180831161061057829003601f168201915b50505050509080600201805461064290611383565b80601f016020809104026020016040519081016040528092919081815260200182805461066e90611383565b80156106bb5780601f10610690576101008083540402835291602001916106bb565b820191906000526020600020905b81548152906001019060200180831161069e57829003601f168201915b5050505050908060030180546106d090611383565b80601f01602080910402602001604051908101604052809291908181526020018280546106fc90611383565b80156107495780601f1061071e57610100808354040283529160200191610749565b820191906000526020600020905b81548152906001019060200180831161072c57829003601f168201915b5050505050905084565b61075b610b7e565b60005b81518110156109c257600082828151811061077b5761077b611244565b60200260200101516000015160405160200161079791906113bd565b60408051601f19818403018152918152815160209283012060008181526002909352912054909150801561080d5760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920766572696669656400000000000000006044820152606401610222565b610818836001611231565b600083815260026020526040902055835160019085908590811061083e5761083e611244565b60209081029190910181015182546001810184556000938452919092208251600490920201908190610870908261141f565b5060208201516001820190610885908261141f565b506040820151600282019061089a908261141f565b50606082015160038201906108af908261141f565b5050508383815181106108c4576108c4611244565b6020026020010151600001515160001415801561090057508383815181106108ee576108ee611244565b60200260200101516020015151600014155b801561092b575083838151811061091957610919611244565b60200260200101516040015151600014155b8015610956575083838151811061094457610944611244565b60200260200101516060015151600014155b6109ad5760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b6064820152608401610222565b505080806109ba9061125a565b91505061075e565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516109f291906114df565b60405180910390a150565b600082600181518110610a1257610a12611244565b6020026020010151600360008481526020019081526020016000205414610a6e5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081354d5081c9bdbdd60821b6044820152606401610222565b604051630bd205a960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610abc908690889060040161130a565b602060405180830381865afa158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd9190611361565b949350505050565b610b0d610b7e565b6001600160a01b038116610b725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610222565b610b7b81610bd8565b50565b6000546001600160a01b031633146104f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610222565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610c3a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b60405290565b6040516080810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b604051601f8201601f1916810167ffffffffffffffff81118282101715610ccc57610ccc610c41565b604052919050565b600067ffffffffffffffff821115610cee57610cee610c41565b5060051b60200190565b600082601f830112610d0957600080fd5b813567ffffffffffffffff811115610d2357610d23610c41565b610d36601f8201601f1916602001610ca3565b818152846020838601011115610d4b57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215610d7e57600080fd5b84359350602085013567ffffffffffffffff80821115610d9d57600080fd5b818701915087601f830112610db157600080fd5b610dc3610dbe8335610cd4565b610ca3565b82358082526020808301929160051b8501018a811115610de257600080fd5b602085015b81811015610e84578481351115610dfd57600080fd5b803586016060818e03601f19011215610e1557600080fd5b610e1d610c57565b602082013587811115610e2f57600080fd5b610e3e8f602083860101610cf8565b825250604082013587811115610e5357600080fd5b610e628f602083860101610cf8565b6020838101919091526060939093013560408301525085529384019301610de7565b5090965050506040870135915080821115610e9e57600080fd5b50610eab87828801610cf8565b949793965093946060013593505050565b600082601f830112610ecd57600080fd5b81356020610edd610dbe83610cd4565b82815260059290921b84018101918181019086841115610efc57600080fd5b8286015b84811015610f175780358352918301918301610f00565b509695505050505050565b60008060408385031215610f3557600080fd5b823567ffffffffffffffff80821115610f4d57600080fd5b610f5986838701610cf8565b93506020850135915080821115610f6f57600080fd5b50610f7c85828601610ebc565b9150509250929050565b6000815180845260005b81811015610fac57602081850181015186830182015201610f90565b506000602082860101526020601f19601f83011685010191505092915050565b608081526000610fdf6080830187610f86565b8281036020840152610ff18187610f86565b905082810360408401526110058186610f86565b905082810360608401526110198185610f86565b979650505050505050565b6000602080838503121561103757600080fd5b823567ffffffffffffffff8082111561104f57600080fd5b818501915085601f83011261106357600080fd5b8135611071610dbe82610cd4565b81815260059190911b8301840190848101908883111561109057600080fd5b8585015b83811015611171578035858111156110ab57600080fd5b86016080818c03601f190112156110c25760008081fd5b6110ca610c80565b88820135878111156110dc5760008081fd5b6110ea8d8b83860101610cf8565b825250604080830135888111156111015760008081fd5b61110f8e8c83870101610cf8565b8b84015250606080840135898111156111285760008081fd5b6111368f8d83880101610cf8565b838501525060808401359150888211156111505760008081fd5b61115e8e8c84870101610cf8565b9083015250845250918601918601611094565b5098975050505050505050565b60008060006060848603121561119357600080fd5b833567ffffffffffffffff808211156111ab57600080fd5b6111b787838801610cf8565b945060208601359150808211156111cd57600080fd5b506111da86828701610ebc565b925050604084013590509250925092565b6000602082840312156111fd57600080fd5b81356001600160a01b038116811461121457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104d9576104d961121b565b634e487b7160e01b600052603260045260246000fd5b60006001820161126c5761126c61121b565b5060010190565b6000604080830185845260208281860152818651808452606093508387019150838160051b88010183890160005b838110156112fa57898303605f19018552815180518885526112c589860182610f86565b905087820151858203898701526112dc8282610f86565b928b0151958b019590955250948601949250908501906001016112a1565b50909a9950505050505050505050565b604080825283519082018190526000906020906060840190828701845b8281101561134357815184529284019290840190600101611327565b505050838103828501526113578186610f86565b9695505050505050565b60006020828403121561137357600080fd5b8151801515811461121457600080fd5b600181811c9082168061139757607f821691505b6020821081036113b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020815260006104d66020830184610f86565b601f82111561141a57600081815260208120601f850160051c810160208610156113f75750805b601f850160051c820191505b8181101561141657828155600101611403565b5050505b505050565b815167ffffffffffffffff81111561143957611439610c41565b61144d816114478454611383565b846113d0565b602080601f831160018114611482576000841561146a5750858301515b600019600386901b1c1916600185901b178555611416565b600085815260208120601f198616915b828110156114b157888601518255948401946001909101908401611492565b50858210156114cf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561158d57603f1989840301855281516080815181865261152c82870182610f86565b915050888201518582038a8701526115448282610f86565b915050878201518582038987015261155c8282610f86565b915050606080830151925085820381870152506115798183610f86565b968901969450505090860190600101611506565b50909897505050505050505056fea26469706673582212205892833baedff2908a642dc60ace741d7f4d60e2a24958e9ef1d8db67a8df3b264736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file +{"_format":"hh-sol-artifact-1","contractName":"Summa","sourceName":"src/Summa.sol","abi":[{"inputs":[{"internalType":"contract IVerifier","name":"_solvencyVerifier","type":"address"},{"internalType":"contract IVerifier","name":"_inclusionVerifier","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"indexed":false,"internalType":"struct Summa.AddressOwnershipProof[]","name":"addressOwnershipProofs","type":"tuple[]"}],"name":"AddressOwnershipProofSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mstRoot","type":"uint256"},{"components":[{"internalType":"string","name":"assetName","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct Summa.Asset[]","name":"assets","type":"tuple[]"}],"name":"SolvencyProofSubmitted","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressOwnershipProofs","outputs":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mstRoots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"ownershipProofByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Summa.AddressOwnershipProof[]","name":"_addressOwnershipProofs","type":"tuple[]"}],"name":"submitProofOfAddressOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mstRoot","type":"uint256"},{"components":[{"internalType":"string","name":"assetName","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Summa.Asset[]","name":"assets","type":"tuple[]"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"submitProofOfSolvency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"publicInputs","type":"uint256[]"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"verifyInclusionProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"publicInputs","type":"uint256[]"}],"name":"verifySolvencyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x60c06040523480156200001157600080fd5b50604051620016f3380380620016f38339810160408190526200003491620000c4565b6200003f3362000057565b6001600160a01b039182166080521660a052620000fc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000bf57600080fd5b919050565b60008060408385031215620000d857600080fd5b620000e383620000a7565b9150620000f360208401620000a7565b90509250929050565b60805160a0516115d1620001226000396000610a850152600061045e01526115d16000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610136578063a3c4bcf814610151578063c7ddca0e14610174578063c8e5814714610187578063f2fde38b1461019a57600080fd5b806323eb94a0146100a3578063413a9f2d146100d65780636c7684fe146100eb578063715018a61461010e5780637f3bfb2e14610116575b600080fd5b6100c36100b1366004610c28565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b6100e96100e4366004610d68565b6101ad565b005b6100fe6100f9366004610f22565b610444565b60405190151581526020016100cd565b6100e96104df565b6100c3610124366004610c28565b60036020526000908152604090205481565b6000546040516001600160a01b0390911681526020016100cd565b61016461015f366004610c28565b6104f3565b6040516100cd9493929190610fcc565b6100e9610182366004611024565b610753565b6100fe61019536600461117e565b6109fd565b6100e96101a83660046111eb565b610b05565b6101b5610b7e565b60015460000361022b5760405162461bcd60e51b815260206004820152603660248201527f5468652043455820686173206e6f74207375626d697474656420616e792061646044820152756472657373206f776e6572736869702070726f6f667360501b60648201526084015b60405180910390fd5b60008351600161023b9190611231565b67ffffffffffffffff81111561025357610253610c41565b60405190808252806020026020018201604052801561027c578160200160208202803683370190505b509050848160008151811061029357610293611244565b60200260200101818152505060005b845181101561038e578481815181106102bd576102bd611244565b602002602001015160200151516000141580156102f957508481815181106102e7576102e7611244565b60200260200101516000015151600014155b6103355760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908185cdcd95d609a1b6044820152606401610222565b84818151811061034757610347611244565b602002602001015160400151828260016103619190611231565b8151811061037157610371611244565b6020908102919091010152806103868161125a565b9150506102a2565b506103998382610444565b6103d85760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2102d2590383937b7b360811b6044820152606401610222565b6000828152600360205260408120869055815183917f0473581c3cf437afc52207d88ce1541afbc7ce9fdb83b4d4d3b7214beed56ff59184919061041e5761041e611244565b602002602001015186604051610435929190611273565b60405180910390a25050505050565b604051630bd205a960e41b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610495908590879060040161130a565b602060405180830381865afa1580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d69190611361565b90505b92915050565b6104e7610b7e565b6104f16000610bd8565b565b6001818154811061050357600080fd5b906000526020600020906004020160009150905080600001805461052690611383565b80601f016020809104026020016040519081016040528092919081815260200182805461055290611383565b801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b5050505050908060010180546105b490611383565b80601f01602080910402602001604051908101604052809291908181526020018280546105e090611383565b801561062d5780601f106106025761010080835404028352916020019161062d565b820191906000526020600020905b81548152906001019060200180831161061057829003601f168201915b50505050509080600201805461064290611383565b80601f016020809104026020016040519081016040528092919081815260200182805461066e90611383565b80156106bb5780601f10610690576101008083540402835291602001916106bb565b820191906000526020600020905b81548152906001019060200180831161069e57829003601f168201915b5050505050908060030180546106d090611383565b80601f01602080910402602001604051908101604052809291908181526020018280546106fc90611383565b80156107495780601f1061071e57610100808354040283529160200191610749565b820191906000526020600020905b81548152906001019060200180831161072c57829003601f168201915b5050505050905084565b61075b610b7e565b60005b81518110156109c257600082828151811061077b5761077b611244565b60200260200101516000015160405160200161079791906113bd565b60408051601f19818403018152918152815160209283012060008181526002909352912054909150801561080d5760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920766572696669656400000000000000006044820152606401610222565b610818836001611231565b600083815260026020526040902055835160019085908590811061083e5761083e611244565b60209081029190910181015182546001810184556000938452919092208251600490920201908190610870908261141f565b5060208201516001820190610885908261141f565b506040820151600282019061089a908261141f565b50606082015160038201906108af908261141f565b5050508383815181106108c4576108c4611244565b6020026020010151600001515160001415801561090057508383815181106108ee576108ee611244565b60200260200101516020015151600014155b801561092b575083838151811061091957610919611244565b60200260200101516040015151600014155b8015610956575083838151811061094457610944611244565b60200260200101516060015151600014155b6109ad5760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b6064820152608401610222565b505080806109ba9061125a565b91505061075e565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516109f291906114df565b60405180910390a150565b600082600181518110610a1257610a12611244565b6020026020010151600360008481526020019081526020016000205414610a6e5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081354d5081c9bdbdd60821b6044820152606401610222565b604051630bd205a960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610abc908690889060040161130a565b602060405180830381865afa158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd9190611361565b949350505050565b610b0d610b7e565b6001600160a01b038116610b725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610222565b610b7b81610bd8565b50565b6000546001600160a01b031633146104f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610222565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610c3a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b60405290565b6040516080810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b604051601f8201601f1916810167ffffffffffffffff81118282101715610ccc57610ccc610c41565b604052919050565b600067ffffffffffffffff821115610cee57610cee610c41565b5060051b60200190565b600082601f830112610d0957600080fd5b813567ffffffffffffffff811115610d2357610d23610c41565b610d36601f8201601f1916602001610ca3565b818152846020838601011115610d4b57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215610d7e57600080fd5b84359350602085013567ffffffffffffffff80821115610d9d57600080fd5b818701915087601f830112610db157600080fd5b610dc3610dbe8335610cd4565b610ca3565b82358082526020808301929160051b8501018a811115610de257600080fd5b602085015b81811015610e84578481351115610dfd57600080fd5b803586016060818e03601f19011215610e1557600080fd5b610e1d610c57565b602082013587811115610e2f57600080fd5b610e3e8f602083860101610cf8565b825250604082013587811115610e5357600080fd5b610e628f602083860101610cf8565b6020838101919091526060939093013560408301525085529384019301610de7565b5090965050506040870135915080821115610e9e57600080fd5b50610eab87828801610cf8565b949793965093946060013593505050565b600082601f830112610ecd57600080fd5b81356020610edd610dbe83610cd4565b82815260059290921b84018101918181019086841115610efc57600080fd5b8286015b84811015610f175780358352918301918301610f00565b509695505050505050565b60008060408385031215610f3557600080fd5b823567ffffffffffffffff80821115610f4d57600080fd5b610f5986838701610cf8565b93506020850135915080821115610f6f57600080fd5b50610f7c85828601610ebc565b9150509250929050565b6000815180845260005b81811015610fac57602081850181015186830182015201610f90565b506000602082860101526020601f19601f83011685010191505092915050565b608081526000610fdf6080830187610f86565b8281036020840152610ff18187610f86565b905082810360408401526110058186610f86565b905082810360608401526110198185610f86565b979650505050505050565b6000602080838503121561103757600080fd5b823567ffffffffffffffff8082111561104f57600080fd5b818501915085601f83011261106357600080fd5b8135611071610dbe82610cd4565b81815260059190911b8301840190848101908883111561109057600080fd5b8585015b83811015611171578035858111156110ab57600080fd5b86016080818c03601f190112156110c25760008081fd5b6110ca610c80565b88820135878111156110dc5760008081fd5b6110ea8d8b83860101610cf8565b825250604080830135888111156111015760008081fd5b61110f8e8c83870101610cf8565b8b84015250606080840135898111156111285760008081fd5b6111368f8d83880101610cf8565b838501525060808401359150888211156111505760008081fd5b61115e8e8c84870101610cf8565b9083015250845250918601918601611094565b5098975050505050505050565b60008060006060848603121561119357600080fd5b833567ffffffffffffffff808211156111ab57600080fd5b6111b787838801610cf8565b945060208601359150808211156111cd57600080fd5b506111da86828701610ebc565b925050604084013590509250925092565b6000602082840312156111fd57600080fd5b81356001600160a01b038116811461121457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104d9576104d961121b565b634e487b7160e01b600052603260045260246000fd5b60006001820161126c5761126c61121b565b5060010190565b6000604080830185845260208281860152818651808452606093508387019150838160051b88010183890160005b838110156112fa57898303605f19018552815180518885526112c589860182610f86565b905087820151858203898701526112dc8282610f86565b928b0151958b019590955250948601949250908501906001016112a1565b50909a9950505050505050505050565b604080825283519082018190526000906020906060840190828701845b8281101561134357815184529284019290840190600101611327565b505050838103828501526113578186610f86565b9695505050505050565b60006020828403121561137357600080fd5b8151801515811461121457600080fd5b600181811c9082168061139757607f821691505b6020821081036113b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020815260006104d66020830184610f86565b601f82111561141a57600081815260208120601f850160051c810160208610156113f75750805b601f850160051c820191505b8181101561141657828155600101611403565b5050505b505050565b815167ffffffffffffffff81111561143957611439610c41565b61144d816114478454611383565b846113d0565b602080601f831160018114611482576000841561146a5750858301515b600019600386901b1c1916600185901b178555611416565b600085815260208120601f198616915b828110156114b157888601518255948401946001909101908401611492565b50858210156114cf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561158d57603f1989840301855281516080815181865261152c82870182610f86565b915050888201518582038a8701526115448282610f86565b915050878201518582038987015261155c8282610f86565b915050606080830151925085820381870152506115798183610f86565b968901969450505090860190600101611506565b50909897505050505050505056fea2646970667358221220f32f840eddc80cec82eb8f05c34e311f2c0922da70b900e8971882d940e5044964736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610136578063a3c4bcf814610151578063c7ddca0e14610174578063c8e5814714610187578063f2fde38b1461019a57600080fd5b806323eb94a0146100a3578063413a9f2d146100d65780636c7684fe146100eb578063715018a61461010e5780637f3bfb2e14610116575b600080fd5b6100c36100b1366004610c28565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b6100e96100e4366004610d68565b6101ad565b005b6100fe6100f9366004610f22565b610444565b60405190151581526020016100cd565b6100e96104df565b6100c3610124366004610c28565b60036020526000908152604090205481565b6000546040516001600160a01b0390911681526020016100cd565b61016461015f366004610c28565b6104f3565b6040516100cd9493929190610fcc565b6100e9610182366004611024565b610753565b6100fe61019536600461117e565b6109fd565b6100e96101a83660046111eb565b610b05565b6101b5610b7e565b60015460000361022b5760405162461bcd60e51b815260206004820152603660248201527f5468652043455820686173206e6f74207375626d697474656420616e792061646044820152756472657373206f776e6572736869702070726f6f667360501b60648201526084015b60405180910390fd5b60008351600161023b9190611231565b67ffffffffffffffff81111561025357610253610c41565b60405190808252806020026020018201604052801561027c578160200160208202803683370190505b509050848160008151811061029357610293611244565b60200260200101818152505060005b845181101561038e578481815181106102bd576102bd611244565b602002602001015160200151516000141580156102f957508481815181106102e7576102e7611244565b60200260200101516000015151600014155b6103355760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908185cdcd95d609a1b6044820152606401610222565b84818151811061034757610347611244565b602002602001015160400151828260016103619190611231565b8151811061037157610371611244565b6020908102919091010152806103868161125a565b9150506102a2565b506103998382610444565b6103d85760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2102d2590383937b7b360811b6044820152606401610222565b6000828152600360205260408120869055815183917f0473581c3cf437afc52207d88ce1541afbc7ce9fdb83b4d4d3b7214beed56ff59184919061041e5761041e611244565b602002602001015186604051610435929190611273565b60405180910390a25050505050565b604051630bd205a960e41b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610495908590879060040161130a565b602060405180830381865afa1580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d69190611361565b90505b92915050565b6104e7610b7e565b6104f16000610bd8565b565b6001818154811061050357600080fd5b906000526020600020906004020160009150905080600001805461052690611383565b80601f016020809104026020016040519081016040528092919081815260200182805461055290611383565b801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b5050505050908060010180546105b490611383565b80601f01602080910402602001604051908101604052809291908181526020018280546105e090611383565b801561062d5780601f106106025761010080835404028352916020019161062d565b820191906000526020600020905b81548152906001019060200180831161061057829003601f168201915b50505050509080600201805461064290611383565b80601f016020809104026020016040519081016040528092919081815260200182805461066e90611383565b80156106bb5780601f10610690576101008083540402835291602001916106bb565b820191906000526020600020905b81548152906001019060200180831161069e57829003601f168201915b5050505050908060030180546106d090611383565b80601f01602080910402602001604051908101604052809291908181526020018280546106fc90611383565b80156107495780601f1061071e57610100808354040283529160200191610749565b820191906000526020600020905b81548152906001019060200180831161072c57829003601f168201915b5050505050905084565b61075b610b7e565b60005b81518110156109c257600082828151811061077b5761077b611244565b60200260200101516000015160405160200161079791906113bd565b60408051601f19818403018152918152815160209283012060008181526002909352912054909150801561080d5760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920766572696669656400000000000000006044820152606401610222565b610818836001611231565b600083815260026020526040902055835160019085908590811061083e5761083e611244565b60209081029190910181015182546001810184556000938452919092208251600490920201908190610870908261141f565b5060208201516001820190610885908261141f565b506040820151600282019061089a908261141f565b50606082015160038201906108af908261141f565b5050508383815181106108c4576108c4611244565b6020026020010151600001515160001415801561090057508383815181106108ee576108ee611244565b60200260200101516020015151600014155b801561092b575083838151811061091957610919611244565b60200260200101516040015151600014155b8015610956575083838151811061094457610944611244565b60200260200101516060015151600014155b6109ad5760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b6064820152608401610222565b505080806109ba9061125a565b91505061075e565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516109f291906114df565b60405180910390a150565b600082600181518110610a1257610a12611244565b6020026020010151600360008481526020019081526020016000205414610a6e5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081354d5081c9bdbdd60821b6044820152606401610222565b604051630bd205a960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610abc908690889060040161130a565b602060405180830381865afa158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd9190611361565b949350505050565b610b0d610b7e565b6001600160a01b038116610b725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610222565b610b7b81610bd8565b50565b6000546001600160a01b031633146104f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610222565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610c3a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b60405290565b6040516080810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b604051601f8201601f1916810167ffffffffffffffff81118282101715610ccc57610ccc610c41565b604052919050565b600067ffffffffffffffff821115610cee57610cee610c41565b5060051b60200190565b600082601f830112610d0957600080fd5b813567ffffffffffffffff811115610d2357610d23610c41565b610d36601f8201601f1916602001610ca3565b818152846020838601011115610d4b57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215610d7e57600080fd5b84359350602085013567ffffffffffffffff80821115610d9d57600080fd5b818701915087601f830112610db157600080fd5b610dc3610dbe8335610cd4565b610ca3565b82358082526020808301929160051b8501018a811115610de257600080fd5b602085015b81811015610e84578481351115610dfd57600080fd5b803586016060818e03601f19011215610e1557600080fd5b610e1d610c57565b602082013587811115610e2f57600080fd5b610e3e8f602083860101610cf8565b825250604082013587811115610e5357600080fd5b610e628f602083860101610cf8565b6020838101919091526060939093013560408301525085529384019301610de7565b5090965050506040870135915080821115610e9e57600080fd5b50610eab87828801610cf8565b949793965093946060013593505050565b600082601f830112610ecd57600080fd5b81356020610edd610dbe83610cd4565b82815260059290921b84018101918181019086841115610efc57600080fd5b8286015b84811015610f175780358352918301918301610f00565b509695505050505050565b60008060408385031215610f3557600080fd5b823567ffffffffffffffff80821115610f4d57600080fd5b610f5986838701610cf8565b93506020850135915080821115610f6f57600080fd5b50610f7c85828601610ebc565b9150509250929050565b6000815180845260005b81811015610fac57602081850181015186830182015201610f90565b506000602082860101526020601f19601f83011685010191505092915050565b608081526000610fdf6080830187610f86565b8281036020840152610ff18187610f86565b905082810360408401526110058186610f86565b905082810360608401526110198185610f86565b979650505050505050565b6000602080838503121561103757600080fd5b823567ffffffffffffffff8082111561104f57600080fd5b818501915085601f83011261106357600080fd5b8135611071610dbe82610cd4565b81815260059190911b8301840190848101908883111561109057600080fd5b8585015b83811015611171578035858111156110ab57600080fd5b86016080818c03601f190112156110c25760008081fd5b6110ca610c80565b88820135878111156110dc5760008081fd5b6110ea8d8b83860101610cf8565b825250604080830135888111156111015760008081fd5b61110f8e8c83870101610cf8565b8b84015250606080840135898111156111285760008081fd5b6111368f8d83880101610cf8565b838501525060808401359150888211156111505760008081fd5b61115e8e8c84870101610cf8565b9083015250845250918601918601611094565b5098975050505050505050565b60008060006060848603121561119357600080fd5b833567ffffffffffffffff808211156111ab57600080fd5b6111b787838801610cf8565b945060208601359150808211156111cd57600080fd5b506111da86828701610ebc565b925050604084013590509250925092565b6000602082840312156111fd57600080fd5b81356001600160a01b038116811461121457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104d9576104d961121b565b634e487b7160e01b600052603260045260246000fd5b60006001820161126c5761126c61121b565b5060010190565b6000604080830185845260208281860152818651808452606093508387019150838160051b88010183890160005b838110156112fa57898303605f19018552815180518885526112c589860182610f86565b905087820151858203898701526112dc8282610f86565b928b0151958b019590955250948601949250908501906001016112a1565b50909a9950505050505050505050565b604080825283519082018190526000906020906060840190828701845b8281101561134357815184529284019290840190600101611327565b505050838103828501526113578186610f86565b9695505050505050565b60006020828403121561137357600080fd5b8151801515811461121457600080fd5b600181811c9082168061139757607f821691505b6020821081036113b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020815260006104d66020830184610f86565b601f82111561141a57600081815260208120601f850160051c810160208610156113f75750805b601f850160051c820191505b8181101561141657828155600101611403565b5050505b505050565b815167ffffffffffffffff81111561143957611439610c41565b61144d816114478454611383565b846113d0565b602080601f831160018114611482576000841561146a5750858301515b600019600386901b1c1916600185901b178555611416565b600085815260208120601f198616915b828110156114b157888601518255948401946001909101908401611492565b50858210156114cf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561158d57603f1989840301855281516080815181865261152c82870182610f86565b915050888201518582038a8701526115448282610f86565b915050878201518582038987015261155c8282610f86565b915050606080830151925085820381870152506115798183610f86565b968901969450505090860190600101611506565b50909897505050505050505056fea2646970667358221220f32f840eddc80cec82eb8f05c34e311f2c0922da70b900e8971882d940e5044964736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/deployments.json b/backend/src/contracts/deployments.json index bb516bb3..0dadb21b 100644 --- a/backend/src/contracts/deployments.json +++ b/backend/src/contracts/deployments.json @@ -1 +1 @@ -{ "31337": { "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" } } +{"31337":{"address":"0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0"}} \ No newline at end of file diff --git a/backend/src/contracts/generated/inclusion_verifier.rs b/backend/src/contracts/generated/inclusion_verifier.rs index 56b5f744..b7798a28 100644 --- a/backend/src/contracts/generated/inclusion_verifier.rs +++ b/backend/src/contracts/generated/inclusion_verifier.rs @@ -41,7 +41,7 @@ pub mod inclusion_verifier { 80, 97, 84, - 103, + 104, 128, 97, 0, @@ -113,7 +113,7 @@ pub mod inclusion_verifier { 4, 97, 83, - 41, + 42, 86, 91, 97, @@ -150,7 +150,7 @@ pub mod inclusion_verifier { 99, 97, 82, - 82, + 83, 86, 91, 96, @@ -161,7 +161,7 @@ pub mod inclusion_verifier { 32, 97, 84, - 18, + 19, 131, 57, 129, @@ -181,7 +181,7 @@ pub mod inclusion_verifier { 32, 97, 83, - 242, + 243, 131, 57, 129, @@ -207,7 +207,7 @@ pub mod inclusion_verifier { 32, 97, 83, - 242, + 243, 131, 57, 129, @@ -225,7 +225,7 @@ pub mod inclusion_verifier { 32, 97, 83, - 242, + 243, 131, 57, 129, @@ -245,7 +245,7 @@ pub mod inclusion_verifier { 32, 97, 83, - 242, + 243, 131, 57, 129, @@ -296,38 +296,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 38, - 193, - 43, - 159, - 215, - 235, - 27, - 179, - 58, - 37, - 52, - 26, - 180, - 175, - 45, - 179, - 52, - 191, - 10, + 40, + 200, + 148, + 244, + 31, 194, - 219, - 95, - 24, - 162, - 24, - 72, + 45, + 196, + 49, + 68, + 4, + 213, 32, - 168, + 133, + 128, + 84, + 184, + 115, + 227, + 250, + 130, + 75, + 11, + 121, + 194, + 128, + 105, + 134, 65, - 244, - 142, - 166, + 40, + 149, + 156, 96, 0, 131, @@ -2974,7 +2974,7 @@ pub mod inclusion_verifier { 32, 97, 84, - 18, + 19, 131, 57, 129, @@ -10271,7 +10271,7 @@ pub mod inclusion_verifier { 32, 97, 84, - 18, + 19, 131, 57, 129, @@ -11103,7 +11103,7 @@ pub mod inclusion_verifier { 32, 97, 84, - 18, + 19, 131, 57, 129, @@ -15917,38 +15917,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 20, - 17, - 61, - 45, - 168, - 3, - 126, - 199, - 127, - 85, - 223, - 251, - 145, - 21, - 26, - 142, - 123, + 35, + 163, + 185, + 11, + 82, + 16, + 31, + 10, + 107, + 87, + 67, 179, - 238, - 234, - 47, - 228, - 79, - 104, - 4, - 112, - 61, - 15, - 130, - 243, - 68, - 160, + 233, + 1, + 204, + 28, + 163, + 254, + 220, + 245, + 102, + 57, + 227, + 245, + 208, + 146, + 193, + 254, + 137, + 24, + 221, + 73, 97, 86, 0, @@ -15956,38 +15956,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 28, - 91, - 95, - 76, - 40, - 52, - 108, - 253, - 223, - 8, - 237, - 222, - 141, - 180, - 146, - 241, - 154, - 36, - 181, - 247, - 63, + 45, + 26, 194, - 189, - 72, - 220, - 25, - 19, - 122, - 17, - 206, - 83, - 191, + 156, + 89, + 138, + 132, + 47, + 120, + 101, + 167, + 131, + 89, + 254, + 146, + 90, + 176, + 18, + 144, + 125, + 243, + 239, + 34, + 236, + 238, + 140, + 62, + 56, + 119, + 92, + 71, + 253, 97, 86, 32, @@ -16105,38 +16105,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 4, - 145, - 113, - 78, - 160, - 41, - 83, - 70, - 145, - 149, - 202, - 7, - 104, - 181, - 170, - 251, 3, - 22, - 107, - 39, - 40, - 77, - 231, - 204, + 136, 159, - 250, - 123, - 56, - 121, - 169, - 89, - 165, + 97, + 43, + 209, + 126, + 1, + 27, + 19, + 144, + 38, + 115, + 167, + 6, + 136, + 187, + 172, + 223, + 34, + 112, + 76, + 200, + 41, + 87, + 64, + 160, + 184, + 85, + 149, + 95, + 192, 97, 86, 224, @@ -16144,38 +16144,38 @@ pub mod inclusion_verifier { 1, 82, 127, + 7, + 122, + 73, + 29, + 221, + 129, + 219, + 209, + 128, 45, - 186, + 137, + 115, + 90, + 232, + 129, + 197, + 109, 169, - 165, - 157, - 199, - 253, - 150, - 87, - 121, - 141, - 217, - 192, - 15, - 252, - 133, - 210, - 3, - 62, - 149, - 85, + 127, + 144, + 142, + 11, 182, - 153, - 244, + 163, + 168, + 173, + 111, 217, - 112, - 107, - 194, - 183, - 125, - 206, - 119, + 247, + 45, + 177, + 35, 97, 87, 0, @@ -16293,38 +16293,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 22, - 218, - 143, - 205, + 41, + 63, + 62, + 234, + 190, + 179, + 135, 231, - 133, - 198, - 223, - 31, - 225, - 58, - 236, - 74, - 8, + 140, + 151, + 164, + 222, + 66, + 13, + 35, + 54, + 255, 142, - 6, - 121, - 7, - 80, - 223, - 169, - 162, - 233, - 198, - 224, - 84, - 100, - 160, - 107, - 153, - 103, - 157, + 209, + 170, + 173, + 247, + 151, + 199, + 220, + 62, + 98, + 44, + 159, + 20, + 64, + 82, 97, 87, 192, @@ -16332,38 +16332,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 25, - 255, - 250, - 93, - 145, - 84, - 156, - 222, - 199, - 55, - 38, + 4, + 248, + 20, + 17, + 72, + 160, + 131, + 237, + 120, + 210, + 100, + 182, + 34, + 204, + 211, + 159, + 220, 46, - 108, - 197, - 250, - 1, - 194, - 241, - 195, - 156, - 123, - 95, - 86, - 125, + 90, + 77, + 67, + 9, + 222, + 248, + 60, 101, - 214, - 142, - 44, - 243, - 7, - 123, - 219, + 246, + 65, + 250, + 31, + 115, + 174, 97, 87, 224, @@ -16482,37 +16482,37 @@ pub mod inclusion_verifier { 80, 127, 21, + 56, 66, - 215, + 247, + 195, 212, - 113, - 4, - 156, - 52, - 110, - 155, - 151, - 171, - 194, - 163, - 81, + 33, + 61, + 26, + 11, + 223, + 2, + 114, + 220, + 10, + 192, + 91, + 135, 148, - 141, - 35, - 67, + 148, + 149, + 169, + 70, 128, - 25, - 167, - 109, - 242, - 177, - 152, - 156, - 143, - 118, - 178, - 135, - 96, + 234, + 7, + 245, + 82, + 140, + 212, + 203, + 101, 97, 88, 160, @@ -16520,38 +16520,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 14, - 38, - 225, + 25, + 116, + 129, + 238, + 227, + 146, + 24, + 145, + 129, + 211, 61, - 177, - 241, - 120, - 248, - 93, - 188, - 184, + 81, + 136, 59, - 10, 97, - 125, - 118, - 108, - 11, - 54, - 252, - 74, - 73, - 186, - 250, - 177, - 59, - 32, - 232, - 61, - 5, - 87, - 243, + 45, + 196, + 185, + 183, + 180, + 10, + 195, + 197, + 22, + 208, + 78, + 245, + 139, + 68, + 88, + 248, + 65, 97, 88, 192, @@ -16669,38 +16669,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 43, - 105, - 43, - 145, - 153, + 46, + 178, + 223, + 150, + 73, + 23, + 94, + 214, 137, - 31, - 134, - 227, - 252, - 86, - 19, - 153, - 30, - 114, - 180, - 112, + 174, + 155, + 24, + 189, + 156, + 45, + 165, + 94, + 6, + 242, + 139, + 139, + 173, + 228, + 14, + 206, + 88, + 79, + 230, + 70, 152, - 34, - 12, - 157, - 136, - 52, - 21, - 36, - 66, - 113, - 204, - 116, - 177, - 33, - 141, + 122, + 242, 97, 89, 128, @@ -16708,38 +16708,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 4, - 47, - 146, - 154, - 254, - 75, - 197, - 98, 6, - 180, - 172, - 228, - 26, - 61, - 40, - 56, - 72, - 117, - 61, - 80, - 20, - 89, - 123, + 11, + 216, + 98, + 210, + 103, + 214, + 34, + 190, + 207, + 68, + 124, + 150, + 224, + 10, + 7, + 90, + 85, + 106, + 18, + 213, + 122, + 137, 205, - 14, - 193, - 79, - 138, - 146, - 97, - 197, - 132, + 252, + 204, + 213, + 145, + 128, + 214, + 225, + 131, 97, 89, 160, @@ -16857,38 +16857,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 41, - 192, - 159, - 32, - 106, - 47, + 38, + 26, 176, - 75, - 21, - 163, - 160, - 194, - 32, - 2, - 76, - 107, - 15, - 250, - 68, - 138, - 25, - 254, - 61, - 78, - 196, - 95, - 250, - 32, - 116, - 143, - 201, + 71, + 202, + 203, + 246, + 253, + 169, + 16, + 181, + 148, + 229, + 164, + 127, + 206, + 23, + 215, + 191, + 89, + 18, + 168, + 3, + 161, + 89, + 114, 70, + 56, + 172, + 154, + 146, + 147, 97, 90, 96, @@ -16896,38 +16896,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 29, - 39, - 198, - 159, - 191, - 169, - 156, - 174, + 28, + 25, 207, - 6, - 55, - 109, - 121, - 203, - 222, + 153, + 205, + 153, + 192, + 162, + 153, + 94, + 123, 84, - 54, - 114, - 104, - 54, + 15, + 14, + 19, + 29, + 90, + 118, 173, - 99, - 88, - 41, - 84, + 161, + 159, + 82, + 219, + 249, + 123, + 243, + 247, + 224, + 72, 226, - 97, - 141, - 56, - 153, - 166, - 246, + 77, + 87, 97, 90, 128, @@ -17045,38 +17045,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 32, - 163, + 9, + 133, + 44, + 196, + 215, + 228, + 53, + 133, + 248, + 10, + 113, + 187, + 101, + 141, 17, - 58, - 72, - 188, - 153, - 209, - 64, - 22, - 102, - 105, - 144, - 217, - 130, - 175, - 63, - 200, - 239, + 124, + 139, + 173, + 74, + 253, + 56, + 197, 98, - 105, - 194, - 243, - 126, - 5, - 59, - 187, - 128, - 30, - 27, - 218, - 55, + 80, + 247, + 158, + 47, + 229, + 234, + 54, + 203, + 234, 97, 91, 64, @@ -17084,38 +17084,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 17, - 135, - 74, - 51, - 72, - 166, - 1, - 19, - 237, - 149, - 178, - 92, - 75, - 219, - 25, - 131, - 105, + 14, + 175, + 223, + 29, + 192, + 235, + 197, + 12, + 102, + 162, + 142, + 244, 228, - 73, - 150, + 206, + 17, + 214, 125, - 254, - 127, - 227, - 37, - 60, - 179, - 154, - 253, + 194, + 104, + 53, 238, - 38, - 114, + 143, + 202, + 136, + 83, + 8, + 196, + 232, + 0, + 229, + 3, + 219, 97, 91, 96, @@ -17233,38 +17233,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 34, - 238, - 103, - 125, - 43, - 225, - 86, - 138, - 94, - 216, - 155, + 6, + 13, + 5, + 217, + 52, 115, - 200, - 73, - 157, - 65, - 92, + 24, + 184, + 196, + 130, + 244, + 61, + 88, + 155, + 171, + 227, + 76, + 79, + 234, + 198, + 126, + 99, + 59, 124, - 72, - 177, - 33, - 132, - 164, - 135, - 129, - 228, - 240, - 141, - 55, - 117, - 87, - 87, + 125, + 32, + 81, + 36, + 229, + 148, + 32, + 49, 97, 92, 32, @@ -17272,38 +17272,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 22, - 242, - 116, - 75, - 184, - 218, - 230, - 91, - 92, - 90, - 110, + 18, + 107, + 206, + 94, + 6, + 83, + 23, + 244, + 44, + 78, + 160, + 145, + 101, + 208, + 0, 8, - 54, - 205, - 91, - 89, - 1, - 76, - 37, + 32, + 36, + 56, + 225, + 196, + 144, + 213, + 114, + 198, + 183, + 102, + 19, 242, - 72, - 27, - 2, - 77, - 236, - 33, - 204, + 26, + 30, 191, - 38, - 169, - 128, - 140, 97, 92, 64, @@ -17421,38 +17421,38 @@ pub mod inclusion_verifier { 146, 80, 127, + 29, 15, - 204, + 148, 243, - 125, - 198, - 134, - 140, - 180, - 80, - 193, - 204, - 151, - 26, - 144, - 5, - 194, - 10, - 207, - 25, - 221, - 177, - 200, - 43, - 156, - 234, - 231, - 87, + 83, + 94, + 88, + 181, + 208, + 108, + 51, + 155, + 99, + 100, + 183, + 124, + 175, + 195, + 137, + 79, + 1, + 137, + 215, + 119, + 160, + 143, + 32, + 206, + 35, 154, - 170, - 246, - 229, - 220, + 26, + 52, 97, 93, 0, @@ -17460,38 +17460,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 16, + 11, 83, - 165, 173, - 187, - 132, - 28, - 235, - 12, - 128, - 76, - 142, - 65, - 136, - 178, - 235, - 3, - 13, - 10, - 98, - 58, - 225, - 153, - 85, - 49, - 115, - 216, - 24, - 223, + 80, + 124, 70, + 154, + 35, + 130, + 57, + 249, + 62, + 66, + 224, + 113, + 148, + 118, + 31, + 57, + 105, + 72, 168, - 248, + 212, + 175, + 27, + 46, + 243, + 237, + 160, + 186, + 54, + 159, 97, 93, 32, @@ -17609,38 +17609,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 3, - 195, - 197, - 121, - 35, - 148, - 172, + 5, + 255, 214, + 244, + 127, + 173, + 193, + 61, + 65, + 63, + 247, + 61, + 61, + 205, + 43, + 84, + 19, + 151, + 13, 35, - 1, - 116, - 52, - 44, - 15, - 180, - 206, - 186, - 155, - 53, - 195, - 141, - 74, - 176, - 221, - 180, - 160, - 251, - 23, - 125, - 181, - 67, - 8, + 40, + 172, + 229, + 81, + 179, + 177, + 213, + 242, + 10, + 104, + 115, + 117, 97, 93, 224, @@ -17648,37 +17648,37 @@ pub mod inclusion_verifier { 1, 82, 127, - 31, - 215, - 211, - 174, - 87, - 226, - 239, - 76, - 123, - 16, - 35, - 206, - 73, - 85, - 3, - 228, - 12, - 168, + 38, + 117, 149, - 50, - 203, + 171, + 39, + 198, + 143, 246, - 167, - 64, - 229, - 125, - 159, - 165, - 125, - 43, - 111, + 157, + 6, + 200, + 194, + 133, + 133, + 151, + 62, + 240, + 251, + 173, + 142, + 9, + 130, + 135, + 26, + 25, + 59, + 2, + 101, + 65, + 226, + 120, 147, 97, 94, @@ -17797,38 +17797,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 21, - 182, - 76, - 242, - 35, - 211, - 117, + 7, + 45, 202, - 108, - 152, - 58, - 184, - 65, - 2, - 169, - 96, - 191, - 235, - 84, - 160, - 162, - 154, - 8, - 88, - 68, - 224, - 229, - 113, - 176, - 159, - 61, + 75, 113, + 54, + 251, + 211, + 151, + 66, + 97, + 14, + 234, + 226, + 1, + 231, + 107, + 194, + 41, + 93, + 220, + 32, + 204, + 24, + 221, + 107, + 25, + 170, + 123, + 114, + 75, + 19, 97, 94, 192, @@ -17837,37 +17837,37 @@ pub mod inclusion_verifier { 82, 127, 35, - 216, - 64, - 132, - 132, - 182, - 177, - 11, - 137, - 127, + 4, + 142, 155, - 12, - 195, - 51, - 20, - 217, - 6, - 13, - 172, - 72, - 244, - 58, + 178, + 222, + 190, + 175, + 207, + 149, 98, - 160, - 229, + 138, + 184, + 27, + 3, + 39, + 92, + 222, + 227, + 59, + 202, + 24, + 213, + 121, + 221, + 226, 102, - 11, - 229, - 136, - 42, - 122, - 142, + 31, + 100, + 100, + 94, + 197, 97, 94, 224, @@ -17985,38 +17985,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 43, - 6, - 157, - 142, - 46, - 87, + 5, + 70, + 156, + 36, + 15, + 123, + 95, + 237, + 193, + 37, + 186, + 30, 230, - 173, - 214, - 242, - 22, - 129, - 106, - 49, - 147, - 106, - 242, + 108, + 174, + 19, + 119, + 236, 117, - 64, + 87, 149, - 155, - 253, - 123, - 132, - 93, - 62, - 116, - 216, - 65, - 150, + 153, + 39, + 143, 99, - 157, + 15, + 45, + 118, + 64, + 153, + 79, + 236, 97, 95, 160, @@ -18025,37 +18025,37 @@ pub mod inclusion_verifier { 82, 127, 8, - 64, 184, - 192, - 189, - 187, - 118, - 10, - 146, - 108, - 64, - 70, - 218, - 38, 20, - 225, - 77, - 60, - 139, - 47, - 175, - 193, - 140, + 207, + 162, + 96, 116, - 113, - 206, - 33, - 41, - 140, - 165, - 124, - 23, + 170, + 222, + 123, + 171, + 19, + 180, + 148, + 245, + 152, + 170, + 91, + 253, + 188, + 73, + 208, + 223, + 76, + 67, + 144, + 221, + 105, + 40, + 93, + 3, + 208, 97, 95, 192, @@ -18173,38 +18173,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 42, - 110, - 66, - 191, - 104, - 175, - 164, + 7, + 250, + 246, + 25, + 188, + 121, + 246, + 232, + 236, + 211, + 126, + 225, 82, - 53, - 31, - 170, + 230, + 190, + 252, + 123, + 119, + 137, + 193, + 181, 148, - 157, - 194, - 121, - 249, - 254, - 60, - 104, - 177, - 38, + 84, + 75, + 242, + 8, + 73, + 51, + 146, + 168, + 238, 40, - 10, - 202, - 39, - 129, - 33, - 136, - 143, - 203, - 175, - 115, 97, 96, 128, @@ -18212,38 +18212,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 4, + 42, + 145, + 132, + 46, + 24, + 243, + 172, + 118, + 30, + 95, + 101, + 237, + 198, + 64, 221, + 66, + 239, + 109, + 145, + 21, 182, - 86, - 251, - 79, - 41, - 6, - 154, - 218, - 101, - 200, - 72, - 178, - 171, - 23, - 123, 73, - 92, - 8, - 105, - 171, - 166, - 254, - 146, - 22, - 218, - 179, - 160, - 67, - 247, - 89, + 173, + 58, + 205, + 255, + 108, + 206, + 215, + 162, + 116, + 170, 97, 96, 160, @@ -18361,38 +18361,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 1, - 130, + 15, + 212, + 68, + 47, + 83, + 230, + 181, 165, - 9, - 192, - 132, - 135, - 184, - 195, - 213, + 248, + 96, + 194, + 200, + 17, + 207, + 78, + 73, + 134, + 66, + 49, + 74, + 188, + 53, + 78, + 10, + 23, + 75, + 230, 184, - 80, - 114, - 81, - 204, - 138, - 70, - 245, - 179, - 19, - 198, - 135, - 193, - 231, - 38, - 45, - 8, - 235, - 141, - 250, - 76, - 16, + 188, + 14, + 39, + 229, 97, 97, 96, @@ -18400,38 +18400,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 4, - 116, - 170, + 9, + 31, + 63, + 203, + 232, + 154, + 35, + 196, + 69, + 140, + 46, + 56, + 199, + 182, + 68, + 78, + 40, + 216, + 36, + 76, + 8, + 84, + 158, + 149, 37, - 143, - 162, - 212, - 26, - 252, - 101, - 89, - 108, - 58, - 218, + 206, + 237, + 244, + 163, 32, - 184, - 137, - 160, - 242, - 120, - 37, - 144, - 90, - 42, - 23, - 101, - 96, - 178, - 126, - 45, - 44, - 142, + 203, + 192, 97, 97, 128, @@ -18549,38 +18549,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 27, - 91, - 47, - 116, - 135, + 5, + 12, + 186, + 44, + 164, + 140, + 200, + 130, 104, - 195, - 67, - 190, - 105, - 253, - 118, - 29, - 241, + 122, + 158, + 102, + 134, + 126, + 152, + 78, + 44, + 229, 73, - 16, + 71, + 120, + 168, + 188, + 175, + 253, + 210, + 41, + 107, 169, - 38, - 167, - 125, - 160, - 149, + 171, 219, - 41, - 18, - 233, - 106, - 201, - 247, - 58, - 182, - 162, + 86, 97, 98, 64, @@ -18588,38 +18588,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 44, - 11, - 181, - 32, - 188, - 96, - 20, - 151, - 198, - 183, - 241, - 191, - 104, - 60, - 131, - 202, - 179, - 160, + 14, 68, + 208, + 171, + 33, + 51, + 113, + 74, + 252, + 233, + 58, + 53, + 77, + 98, + 113, + 71, 12, + 41, + 63, + 24, + 239, + 41, + 236, + 200, + 116, 65, - 216, - 253, - 251, - 174, - 12, - 119, - 90, - 87, - 231, - 39, - 245, + 111, + 129, + 255, + 185, + 40, + 24, 97, 98, 96, @@ -18736,38 +18736,39 @@ pub mod inclusion_verifier { 22, 146, 80, - 126, - 19, - 223, - 180, - 66, - 72, - 117, + 127, + 47, + 105, + 164, + 31, + 255, 92, - 241, - 45, - 203, - 172, + 190, + 85, + 218, + 7, + 211, 14, - 197, - 86, - 62, - 87, - 126, - 91, - 128, + 120, + 154, + 13, + 118, + 96, + 211, + 232, + 65, + 199, + 14, + 187, + 50, + 111, + 88, + 37, + 97, + 10, 74, - 222, - 4, - 171, - 196, - 233, - 186, - 173, - 172, - 0, - 231, - 255, + 92, + 8, 97, 99, 32, @@ -18775,38 +18776,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 38, - 77, - 66, - 132, - 86, - 98, - 169, - 17, - 165, - 195, - 122, + 31, 231, - 28, - 206, + 231, + 65, + 26, + 89, + 158, + 138, + 221, + 245, 70, - 60, - 28, - 56, - 124, - 18, - 238, - 209, - 166, - 117, - 233, - 87, - 68, - 0, - 32, - 4, - 92, - 177, + 71, + 17, + 148, + 164, + 133, + 29, + 54, + 199, + 17, + 168, + 142, + 146, + 102, + 50, + 245, + 113, + 240, + 217, + 31, + 201, + 246, 97, 99, 64, @@ -18924,38 +18925,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 35, - 134, - 213, - 37, - 136, - 70, - 179, - 252, - 30, - 95, - 252, - 167, - 127, - 222, - 67, - 49, - 111, - 209, - 94, - 160, - 142, - 124, - 233, - 64, - 146, + 38, + 165, + 168, + 9, 127, - 114, + 102, + 5, + 10, + 154, + 61, + 129, + 93, + 57, + 21, + 235, 18, - 193, - 179, + 45, + 117, + 2, + 7, + 119, + 249, + 232, 123, - 183, + 22, + 14, + 103, + 204, + 127, + 161, + 126, + 94, 97, 100, 0, @@ -18963,38 +18964,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 35, - 48, - 110, + 18, + 192, + 23, + 63, + 222, + 196, + 245, + 78, + 114, + 160, + 171, + 57, + 253, + 154, + 95, + 250, + 20, + 54, + 75, + 187, + 30, + 243, + 4, + 97, 10, - 83, - 186, + 241, 113, - 4, - 119, - 67, - 87, - 140, - 143, - 177, - 53, - 210, - 184, - 67, - 168, - 221, - 237, - 129, - 107, - 90, - 158, - 11, - 6, - 183, - 47, - 7, - 190, - 150, + 149, + 185, + 147, + 179, + 22, 97, 100, 32, @@ -20927,38 +20928,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 30, - 70, - 242, - 153, - 22, + 29, + 52, + 186, + 110, + 59, + 82, 175, - 123, - 232, - 18, - 45, - 56, - 206, - 112, - 14, - 159, - 115, - 180, - 152, - 48, - 180, - 170, - 103, - 45, - 88, - 197, + 168, + 168, + 223, + 5, + 107, + 252, + 81, + 87, 250, - 131, - 218, - 166, - 244, - 144, - 56, + 22, + 226, + 197, + 187, + 4, + 90, + 171, + 113, + 134, + 170, + 181, + 143, + 112, + 146, + 127, + 188, 97, 112, 96, @@ -20966,38 +20967,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 32, - 60, - 202, - 188, - 27, - 69, - 182, - 154, - 109, - 253, - 146, - 254, - 17, - 125, - 251, - 219, - 235, - 72, + 11, + 74, + 2, + 46, + 184, + 252, + 80, + 61, + 157, + 145, + 102, + 12, + 120, + 63, + 198, + 227, + 122, 230, - 132, - 220, - 205, - 248, - 203, - 47, - 70, - 111, - 75, - 134, - 7, - 48, - 52, + 21, + 112, + 235, + 228, + 136, + 63, + 54, + 99, + 213, + 180, + 164, + 53, + 102, + 94, 97, 112, 128, @@ -21005,38 +21006,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 11, - 210, - 45, - 203, - 231, - 26, - 31, - 174, - 234, - 41, - 191, - 103, - 131, - 203, - 198, - 63, - 6, - 120, - 143, - 249, - 234, 36, - 136, - 162, - 175, - 144, - 54, - 172, - 82, - 212, - 174, - 130, + 149, + 224, + 61, + 94, + 92, + 157, + 106, + 207, + 98, + 205, + 247, + 21, + 17, + 142, + 235, + 189, + 169, + 18, + 227, + 9, + 45, + 254, + 62, + 152, + 19, + 237, + 100, + 44, + 223, + 4, + 18, 97, 112, 160, @@ -21044,38 +21045,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 35, - 183, - 178, - 195, - 50, - 252, - 161, - 104, - 86, - 204, - 139, - 209, - 202, 11, - 86, - 246, - 135, - 46, - 217, - 94, + 154, + 140, + 207, + 27, + 201, + 241, + 179, + 107, + 116, + 121, + 42, + 209, + 0, + 7, + 206, + 87, + 158, + 139, + 165, + 87, + 74, + 152, + 128, + 214, + 223, 244, - 41, - 25, - 23, - 252, - 225, - 36, - 191, - 72, - 193, - 54, - 9, + 218, + 132, + 118, + 142, + 254, 97, 112, 192, @@ -21213,14 +21214,14 @@ pub mod inclusion_verifier { 21, 97, 82, - 177, + 178, 87, 97, 82, - 177, + 178, 97, 82, - 114, + 115, 86, 91, 96, @@ -21241,7 +21242,7 @@ pub mod inclusion_verifier { 18, 97, 82, - 202, + 203, 87, 96, 0, @@ -21264,19 +21265,19 @@ pub mod inclusion_verifier { 21, 97, 82, - 228, + 229, 87, 97, 82, - 228, + 229, 97, 82, - 114, + 115, 86, 91, 97, 82, - 247, + 248, 96, 31, 130, @@ -21290,7 +21291,7 @@ pub mod inclusion_verifier { 1, 97, 82, - 136, + 137, 86, 91, 129, @@ -21307,7 +21308,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 12, + 13, 87, 96, 0, @@ -21355,7 +21356,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 60, + 61, 87, 96, 0, @@ -21379,7 +21380,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 84, + 85, 87, 96, 0, @@ -21399,7 +21400,7 @@ pub mod inclusion_verifier { 18, 97, 83, - 104, + 105, 87, 96, 0, @@ -21416,14 +21417,14 @@ pub mod inclusion_verifier { 21, 97, 83, - 124, + 125, 87, 97, 83, - 124, + 125, 97, 82, - 114, + 115, 86, 91, 129, @@ -21432,13 +21433,13 @@ pub mod inclusion_verifier { 27, 97, 83, - 139, + 140, 130, 130, 1, 97, 82, - 136, + 137, 86, 91, 146, @@ -21460,7 +21461,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 165, + 166, 87, 96, 0, @@ -21478,7 +21479,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 195, + 196, 87, 134, 53, @@ -21494,7 +21495,7 @@ pub mod inclusion_verifier { 144, 97, 83, - 170, + 171, 86, 91, 151, @@ -21513,7 +21514,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 218, + 219, 87, 96, 0, @@ -21523,14 +21524,14 @@ pub mod inclusion_verifier { 80, 97, 83, - 231, + 232, 133, 130, 134, 1, 97, 82, - 185, + 186, 86, 91, 145, @@ -21617,38 +21618,38 @@ pub mod inclusion_verifier { 34, 18, 32, - 122, - 73, - 104, - 181, - 49, - 112, - 35, - 197, - 180, - 122, - 33, - 8, - 134, - 62, - 72, - 80, - 163, - 77, - 109, - 126, - 214, - 154, - 195, - 11, - 43, - 187, - 11, - 201, + 172, + 206, + 110, + 12, + 63, + 213, + 170, + 87, + 115, + 229, + 140, + 90, + 241, + 129, + 24, 92, - 30, - 208, - 21, + 117, + 238, + 219, + 174, + 224, + 140, + 222, + 165, + 248, + 100, + 60, + 101, + 117, + 178, + 91, + 74, 100, 115, 111, @@ -21727,7 +21728,7 @@ pub mod inclusion_verifier { 4, 97, 83, - 41, + 42, 86, 91, 97, @@ -21764,7 +21765,7 @@ pub mod inclusion_verifier { 99, 97, 82, - 82, + 83, 86, 91, 96, @@ -21775,7 +21776,7 @@ pub mod inclusion_verifier { 32, 97, 84, - 18, + 19, 131, 57, 129, @@ -21795,7 +21796,7 @@ pub mod inclusion_verifier { 32, 97, 83, - 242, + 243, 131, 57, 129, @@ -21821,7 +21822,7 @@ pub mod inclusion_verifier { 32, 97, 83, - 242, + 243, 131, 57, 129, @@ -21839,7 +21840,7 @@ pub mod inclusion_verifier { 32, 97, 83, - 242, + 243, 131, 57, 129, @@ -21859,7 +21860,7 @@ pub mod inclusion_verifier { 32, 97, 83, - 242, + 243, 131, 57, 129, @@ -21910,38 +21911,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 38, - 193, - 43, - 159, - 215, - 235, - 27, - 179, - 58, - 37, - 52, - 26, - 180, - 175, - 45, - 179, - 52, - 191, - 10, + 40, + 200, + 148, + 244, + 31, 194, - 219, - 95, - 24, - 162, - 24, - 72, + 45, + 196, + 49, + 68, + 4, + 213, 32, - 168, + 133, + 128, + 84, + 184, + 115, + 227, + 250, + 130, + 75, + 11, + 121, + 194, + 128, + 105, + 134, 65, - 244, - 142, - 166, + 40, + 149, + 156, 96, 0, 131, @@ -24588,7 +24589,7 @@ pub mod inclusion_verifier { 32, 97, 84, - 18, + 19, 131, 57, 129, @@ -31885,7 +31886,7 @@ pub mod inclusion_verifier { 32, 97, 84, - 18, + 19, 131, 57, 129, @@ -32717,7 +32718,7 @@ pub mod inclusion_verifier { 32, 97, 84, - 18, + 19, 131, 57, 129, @@ -37531,38 +37532,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 20, - 17, - 61, - 45, - 168, - 3, - 126, - 199, - 127, - 85, - 223, - 251, - 145, - 21, - 26, - 142, - 123, + 35, + 163, + 185, + 11, + 82, + 16, + 31, + 10, + 107, + 87, + 67, 179, - 238, - 234, - 47, - 228, - 79, - 104, - 4, - 112, - 61, - 15, - 130, - 243, - 68, - 160, + 233, + 1, + 204, + 28, + 163, + 254, + 220, + 245, + 102, + 57, + 227, + 245, + 208, + 146, + 193, + 254, + 137, + 24, + 221, + 73, 97, 86, 0, @@ -37570,38 +37571,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 28, - 91, - 95, - 76, - 40, - 52, - 108, - 253, - 223, - 8, - 237, - 222, - 141, - 180, - 146, - 241, - 154, - 36, - 181, - 247, - 63, + 45, + 26, 194, - 189, - 72, - 220, - 25, - 19, - 122, - 17, - 206, - 83, - 191, + 156, + 89, + 138, + 132, + 47, + 120, + 101, + 167, + 131, + 89, + 254, + 146, + 90, + 176, + 18, + 144, + 125, + 243, + 239, + 34, + 236, + 238, + 140, + 62, + 56, + 119, + 92, + 71, + 253, 97, 86, 32, @@ -37719,38 +37720,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 4, - 145, - 113, - 78, - 160, - 41, - 83, - 70, - 145, - 149, - 202, - 7, - 104, - 181, - 170, - 251, 3, - 22, - 107, - 39, - 40, - 77, - 231, - 204, + 136, 159, - 250, - 123, - 56, - 121, - 169, - 89, - 165, + 97, + 43, + 209, + 126, + 1, + 27, + 19, + 144, + 38, + 115, + 167, + 6, + 136, + 187, + 172, + 223, + 34, + 112, + 76, + 200, + 41, + 87, + 64, + 160, + 184, + 85, + 149, + 95, + 192, 97, 86, 224, @@ -37758,38 +37759,38 @@ pub mod inclusion_verifier { 1, 82, 127, + 7, + 122, + 73, + 29, + 221, + 129, + 219, + 209, + 128, 45, - 186, + 137, + 115, + 90, + 232, + 129, + 197, + 109, 169, - 165, - 157, - 199, - 253, - 150, - 87, - 121, - 141, - 217, - 192, - 15, - 252, - 133, - 210, - 3, - 62, - 149, - 85, + 127, + 144, + 142, + 11, 182, - 153, - 244, + 163, + 168, + 173, + 111, 217, - 112, - 107, - 194, - 183, - 125, - 206, - 119, + 247, + 45, + 177, + 35, 97, 87, 0, @@ -37907,38 +37908,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 22, - 218, - 143, - 205, + 41, + 63, + 62, + 234, + 190, + 179, + 135, 231, - 133, - 198, - 223, - 31, - 225, - 58, - 236, - 74, - 8, + 140, + 151, + 164, + 222, + 66, + 13, + 35, + 54, + 255, 142, - 6, - 121, - 7, - 80, - 223, - 169, - 162, - 233, - 198, - 224, - 84, - 100, - 160, - 107, - 153, - 103, - 157, + 209, + 170, + 173, + 247, + 151, + 199, + 220, + 62, + 98, + 44, + 159, + 20, + 64, + 82, 97, 87, 192, @@ -37946,38 +37947,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 25, - 255, - 250, - 93, - 145, - 84, - 156, - 222, - 199, - 55, - 38, + 4, + 248, + 20, + 17, + 72, + 160, + 131, + 237, + 120, + 210, + 100, + 182, + 34, + 204, + 211, + 159, + 220, 46, - 108, - 197, - 250, - 1, - 194, - 241, - 195, - 156, - 123, - 95, - 86, - 125, + 90, + 77, + 67, + 9, + 222, + 248, + 60, 101, - 214, - 142, - 44, - 243, - 7, - 123, - 219, + 246, + 65, + 250, + 31, + 115, + 174, 97, 87, 224, @@ -38096,37 +38097,37 @@ pub mod inclusion_verifier { 80, 127, 21, + 56, 66, - 215, + 247, + 195, 212, - 113, - 4, - 156, - 52, - 110, - 155, - 151, - 171, - 194, - 163, - 81, + 33, + 61, + 26, + 11, + 223, + 2, + 114, + 220, + 10, + 192, + 91, + 135, 148, - 141, - 35, - 67, + 148, + 149, + 169, + 70, 128, - 25, - 167, - 109, - 242, - 177, - 152, - 156, - 143, - 118, - 178, - 135, - 96, + 234, + 7, + 245, + 82, + 140, + 212, + 203, + 101, 97, 88, 160, @@ -38134,38 +38135,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 14, - 38, - 225, + 25, + 116, + 129, + 238, + 227, + 146, + 24, + 145, + 129, + 211, 61, - 177, - 241, - 120, - 248, - 93, - 188, - 184, + 81, + 136, 59, - 10, 97, - 125, - 118, - 108, - 11, - 54, - 252, - 74, - 73, - 186, - 250, - 177, - 59, - 32, - 232, - 61, - 5, - 87, - 243, + 45, + 196, + 185, + 183, + 180, + 10, + 195, + 197, + 22, + 208, + 78, + 245, + 139, + 68, + 88, + 248, + 65, 97, 88, 192, @@ -38283,38 +38284,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 43, - 105, - 43, - 145, - 153, + 46, + 178, + 223, + 150, + 73, + 23, + 94, + 214, 137, - 31, - 134, - 227, - 252, - 86, - 19, - 153, - 30, - 114, - 180, - 112, + 174, + 155, + 24, + 189, + 156, + 45, + 165, + 94, + 6, + 242, + 139, + 139, + 173, + 228, + 14, + 206, + 88, + 79, + 230, + 70, 152, - 34, - 12, - 157, - 136, - 52, - 21, - 36, - 66, - 113, - 204, - 116, - 177, - 33, - 141, + 122, + 242, 97, 89, 128, @@ -38322,38 +38323,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 4, - 47, - 146, - 154, - 254, - 75, - 197, - 98, 6, - 180, - 172, - 228, - 26, - 61, - 40, - 56, - 72, - 117, - 61, - 80, - 20, - 89, - 123, + 11, + 216, + 98, + 210, + 103, + 214, + 34, + 190, + 207, + 68, + 124, + 150, + 224, + 10, + 7, + 90, + 85, + 106, + 18, + 213, + 122, + 137, 205, - 14, - 193, - 79, - 138, - 146, - 97, - 197, - 132, + 252, + 204, + 213, + 145, + 128, + 214, + 225, + 131, 97, 89, 160, @@ -38471,77 +38472,77 @@ pub mod inclusion_verifier { 146, 80, 127, - 41, - 192, - 159, - 32, - 106, - 47, + 38, + 26, 176, - 75, - 21, - 163, - 160, - 194, - 32, - 2, - 76, - 107, - 15, - 250, - 68, - 138, - 25, - 254, - 61, - 78, - 196, - 95, - 250, - 32, - 116, - 143, - 201, - 70, - 97, - 90, - 96, - 131, - 1, - 82, - 127, - 29, - 39, - 198, - 159, - 191, + 71, + 202, + 203, + 246, + 253, 169, - 156, - 174, + 16, + 181, + 148, + 229, + 164, + 127, + 206, + 23, + 215, + 191, + 89, + 18, + 168, + 3, + 161, + 89, + 114, + 70, + 56, + 172, + 154, + 146, + 147, + 97, + 90, + 96, + 131, + 1, + 82, + 127, + 28, + 25, 207, - 6, - 55, - 109, - 121, - 203, - 222, + 153, + 205, + 153, + 192, + 162, + 153, + 94, + 123, 84, - 54, - 114, - 104, - 54, + 15, + 14, + 19, + 29, + 90, + 118, 173, - 99, - 88, - 41, - 84, + 161, + 159, + 82, + 219, + 249, + 123, + 243, + 247, + 224, + 72, 226, - 97, - 141, - 56, - 153, - 166, - 246, + 77, + 87, 97, 90, 128, @@ -38659,38 +38660,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 32, - 163, + 9, + 133, + 44, + 196, + 215, + 228, + 53, + 133, + 248, + 10, + 113, + 187, + 101, + 141, 17, - 58, - 72, - 188, - 153, - 209, - 64, - 22, - 102, - 105, - 144, - 217, - 130, - 175, - 63, - 200, - 239, + 124, + 139, + 173, + 74, + 253, + 56, + 197, 98, - 105, - 194, - 243, - 126, - 5, - 59, - 187, - 128, - 30, - 27, - 218, - 55, + 80, + 247, + 158, + 47, + 229, + 234, + 54, + 203, + 234, 97, 91, 64, @@ -38698,38 +38699,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 17, - 135, - 74, - 51, - 72, - 166, - 1, - 19, - 237, - 149, - 178, - 92, - 75, - 219, - 25, - 131, - 105, + 14, + 175, + 223, + 29, + 192, + 235, + 197, + 12, + 102, + 162, + 142, + 244, 228, - 73, - 150, + 206, + 17, + 214, 125, - 254, - 127, - 227, - 37, - 60, - 179, - 154, - 253, + 194, + 104, + 53, 238, - 38, - 114, + 143, + 202, + 136, + 83, + 8, + 196, + 232, + 0, + 229, + 3, + 219, 97, 91, 96, @@ -38847,38 +38848,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 34, - 238, - 103, - 125, - 43, - 225, - 86, - 138, - 94, - 216, - 155, + 6, + 13, + 5, + 217, + 52, 115, - 200, - 73, - 157, - 65, - 92, + 24, + 184, + 196, + 130, + 244, + 61, + 88, + 155, + 171, + 227, + 76, + 79, + 234, + 198, + 126, + 99, + 59, 124, - 72, - 177, - 33, - 132, - 164, - 135, - 129, - 228, - 240, - 141, - 55, - 117, - 87, - 87, + 125, + 32, + 81, + 36, + 229, + 148, + 32, + 49, 97, 92, 32, @@ -38886,38 +38887,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 22, - 242, - 116, - 75, - 184, - 218, - 230, - 91, - 92, - 90, - 110, + 18, + 107, + 206, + 94, + 6, + 83, + 23, + 244, + 44, + 78, + 160, + 145, + 101, + 208, + 0, 8, - 54, - 205, - 91, - 89, - 1, - 76, - 37, + 32, + 36, + 56, + 225, + 196, + 144, + 213, + 114, + 198, + 183, + 102, + 19, 242, - 72, - 27, - 2, - 77, - 236, - 33, - 204, + 26, + 30, 191, - 38, - 169, - 128, - 140, 97, 92, 64, @@ -39035,38 +39036,38 @@ pub mod inclusion_verifier { 146, 80, 127, + 29, 15, - 204, + 148, 243, - 125, - 198, - 134, - 140, - 180, - 80, - 193, - 204, - 151, - 26, - 144, - 5, - 194, - 10, - 207, - 25, - 221, - 177, - 200, - 43, - 156, - 234, - 231, - 87, + 83, + 94, + 88, + 181, + 208, + 108, + 51, + 155, + 99, + 100, + 183, + 124, + 175, + 195, + 137, + 79, + 1, + 137, + 215, + 119, + 160, + 143, + 32, + 206, + 35, 154, - 170, - 246, - 229, - 220, + 26, + 52, 97, 93, 0, @@ -39074,38 +39075,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 16, + 11, 83, - 165, 173, - 187, - 132, - 28, - 235, - 12, - 128, - 76, - 142, - 65, - 136, - 178, - 235, - 3, - 13, - 10, - 98, - 58, - 225, - 153, - 85, - 49, - 115, - 216, - 24, - 223, + 80, + 124, 70, + 154, + 35, + 130, + 57, + 249, + 62, + 66, + 224, + 113, + 148, + 118, + 31, + 57, + 105, + 72, 168, - 248, + 212, + 175, + 27, + 46, + 243, + 237, + 160, + 186, + 54, + 159, 97, 93, 32, @@ -39223,38 +39224,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 3, - 195, - 197, - 121, - 35, - 148, - 172, + 5, + 255, 214, + 244, + 127, + 173, + 193, + 61, + 65, + 63, + 247, + 61, + 61, + 205, + 43, + 84, + 19, + 151, + 13, 35, - 1, - 116, - 52, - 44, - 15, - 180, - 206, - 186, - 155, - 53, - 195, - 141, - 74, - 176, - 221, - 180, - 160, - 251, - 23, - 125, - 181, - 67, - 8, + 40, + 172, + 229, + 81, + 179, + 177, + 213, + 242, + 10, + 104, + 115, + 117, 97, 93, 224, @@ -39262,37 +39263,37 @@ pub mod inclusion_verifier { 1, 82, 127, - 31, - 215, - 211, - 174, - 87, - 226, - 239, - 76, - 123, - 16, - 35, - 206, - 73, - 85, - 3, - 228, - 12, - 168, + 38, + 117, 149, - 50, - 203, + 171, + 39, + 198, + 143, 246, - 167, - 64, - 229, - 125, - 159, - 165, - 125, - 43, - 111, + 157, + 6, + 200, + 194, + 133, + 133, + 151, + 62, + 240, + 251, + 173, + 142, + 9, + 130, + 135, + 26, + 25, + 59, + 2, + 101, + 65, + 226, + 120, 147, 97, 94, @@ -39411,38 +39412,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 21, - 182, - 76, - 242, - 35, - 211, - 117, + 7, + 45, 202, - 108, - 152, - 58, - 184, - 65, - 2, - 169, - 96, - 191, - 235, - 84, - 160, - 162, - 154, - 8, - 88, - 68, - 224, - 229, - 113, - 176, - 159, - 61, + 75, 113, + 54, + 251, + 211, + 151, + 66, + 97, + 14, + 234, + 226, + 1, + 231, + 107, + 194, + 41, + 93, + 220, + 32, + 204, + 24, + 221, + 107, + 25, + 170, + 123, + 114, + 75, + 19, 97, 94, 192, @@ -39451,37 +39452,37 @@ pub mod inclusion_verifier { 82, 127, 35, - 216, - 64, - 132, - 132, - 182, - 177, - 11, - 137, - 127, + 4, + 142, 155, - 12, - 195, - 51, - 20, - 217, - 6, - 13, - 172, - 72, - 244, - 58, + 178, + 222, + 190, + 175, + 207, + 149, 98, - 160, - 229, + 138, + 184, + 27, + 3, + 39, + 92, + 222, + 227, + 59, + 202, + 24, + 213, + 121, + 221, + 226, 102, - 11, - 229, - 136, - 42, - 122, - 142, + 31, + 100, + 100, + 94, + 197, 97, 94, 224, @@ -39599,38 +39600,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 43, - 6, - 157, - 142, - 46, - 87, + 5, + 70, + 156, + 36, + 15, + 123, + 95, + 237, + 193, + 37, + 186, + 30, 230, - 173, - 214, - 242, - 22, - 129, - 106, - 49, - 147, - 106, - 242, + 108, + 174, + 19, + 119, + 236, 117, - 64, + 87, 149, - 155, - 253, - 123, - 132, - 93, - 62, - 116, - 216, - 65, - 150, + 153, + 39, + 143, 99, - 157, + 15, + 45, + 118, + 64, + 153, + 79, + 236, 97, 95, 160, @@ -39639,37 +39640,37 @@ pub mod inclusion_verifier { 82, 127, 8, - 64, 184, - 192, - 189, - 187, - 118, - 10, - 146, - 108, - 64, - 70, - 218, - 38, 20, - 225, - 77, - 60, - 139, - 47, - 175, - 193, - 140, + 207, + 162, + 96, 116, - 113, - 206, - 33, - 41, - 140, - 165, - 124, - 23, + 170, + 222, + 123, + 171, + 19, + 180, + 148, + 245, + 152, + 170, + 91, + 253, + 188, + 73, + 208, + 223, + 76, + 67, + 144, + 221, + 105, + 40, + 93, + 3, + 208, 97, 95, 192, @@ -39787,38 +39788,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 42, - 110, - 66, - 191, - 104, - 175, - 164, + 7, + 250, + 246, + 25, + 188, + 121, + 246, + 232, + 236, + 211, + 126, + 225, 82, - 53, - 31, - 170, + 230, + 190, + 252, + 123, + 119, + 137, + 193, + 181, 148, - 157, - 194, - 121, - 249, - 254, - 60, - 104, - 177, - 38, + 84, + 75, + 242, + 8, + 73, + 51, + 146, + 168, + 238, 40, - 10, - 202, - 39, - 129, - 33, - 136, - 143, - 203, - 175, - 115, 97, 96, 128, @@ -39826,38 +39827,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 4, + 42, + 145, + 132, + 46, + 24, + 243, + 172, + 118, + 30, + 95, + 101, + 237, + 198, + 64, 221, + 66, + 239, + 109, + 145, + 21, 182, - 86, - 251, - 79, - 41, - 6, - 154, - 218, - 101, - 200, - 72, - 178, - 171, - 23, - 123, 73, - 92, - 8, - 105, - 171, - 166, - 254, - 146, - 22, - 218, - 179, - 160, - 67, - 247, - 89, + 173, + 58, + 205, + 255, + 108, + 206, + 215, + 162, + 116, + 170, 97, 96, 160, @@ -39975,38 +39976,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 1, - 130, + 15, + 212, + 68, + 47, + 83, + 230, + 181, 165, - 9, - 192, - 132, - 135, - 184, - 195, - 213, + 248, + 96, + 194, + 200, + 17, + 207, + 78, + 73, + 134, + 66, + 49, + 74, + 188, + 53, + 78, + 10, + 23, + 75, + 230, 184, - 80, - 114, - 81, - 204, - 138, - 70, - 245, - 179, - 19, - 198, - 135, - 193, - 231, - 38, - 45, - 8, - 235, - 141, - 250, - 76, - 16, + 188, + 14, + 39, + 229, 97, 97, 96, @@ -40014,38 +40015,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 4, - 116, - 170, + 9, + 31, + 63, + 203, + 232, + 154, + 35, + 196, + 69, + 140, + 46, + 56, + 199, + 182, + 68, + 78, + 40, + 216, + 36, + 76, + 8, + 84, + 158, + 149, 37, - 143, - 162, - 212, - 26, - 252, - 101, - 89, - 108, - 58, - 218, + 206, + 237, + 244, + 163, 32, - 184, - 137, - 160, - 242, - 120, - 37, - 144, - 90, - 42, - 23, - 101, - 96, - 178, - 126, - 45, - 44, - 142, + 203, + 192, 97, 97, 128, @@ -40163,38 +40164,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 27, - 91, - 47, - 116, - 135, + 5, + 12, + 186, + 44, + 164, + 140, + 200, + 130, 104, - 195, - 67, - 190, - 105, - 253, - 118, - 29, - 241, + 122, + 158, + 102, + 134, + 126, + 152, + 78, + 44, + 229, 73, - 16, + 71, + 120, + 168, + 188, + 175, + 253, + 210, + 41, + 107, 169, - 38, - 167, - 125, - 160, - 149, + 171, 219, - 41, - 18, - 233, - 106, - 201, - 247, - 58, - 182, - 162, + 86, 97, 98, 64, @@ -40202,38 +40203,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 44, - 11, - 181, - 32, - 188, - 96, - 20, - 151, - 198, - 183, - 241, - 191, - 104, - 60, - 131, - 202, - 179, - 160, + 14, 68, + 208, + 171, + 33, + 51, + 113, + 74, + 252, + 233, + 58, + 53, + 77, + 98, + 113, + 71, 12, + 41, + 63, + 24, + 239, + 41, + 236, + 200, + 116, 65, - 216, - 253, - 251, - 174, - 12, - 119, - 90, - 87, - 231, - 39, - 245, + 111, + 129, + 255, + 185, + 40, + 24, 97, 98, 96, @@ -40350,38 +40351,39 @@ pub mod inclusion_verifier { 22, 146, 80, - 126, - 19, - 223, - 180, - 66, - 72, - 117, + 127, + 47, + 105, + 164, + 31, + 255, 92, - 241, - 45, - 203, - 172, + 190, + 85, + 218, + 7, + 211, 14, - 197, - 86, - 62, - 87, - 126, - 91, - 128, + 120, + 154, + 13, + 118, + 96, + 211, + 232, + 65, + 199, + 14, + 187, + 50, + 111, + 88, + 37, + 97, + 10, 74, - 222, - 4, - 171, - 196, - 233, - 186, - 173, - 172, - 0, - 231, - 255, + 92, + 8, 97, 99, 32, @@ -40389,38 +40391,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 38, - 77, - 66, - 132, - 86, - 98, - 169, - 17, - 165, - 195, - 122, + 31, 231, - 28, - 206, + 231, + 65, + 26, + 89, + 158, + 138, + 221, + 245, 70, - 60, - 28, - 56, - 124, - 18, - 238, - 209, - 166, - 117, - 233, - 87, - 68, - 0, - 32, - 4, - 92, - 177, + 71, + 17, + 148, + 164, + 133, + 29, + 54, + 199, + 17, + 168, + 142, + 146, + 102, + 50, + 245, + 113, + 240, + 217, + 31, + 201, + 246, 97, 99, 64, @@ -40538,38 +40540,38 @@ pub mod inclusion_verifier { 146, 80, 127, - 35, - 134, - 213, - 37, - 136, - 70, - 179, - 252, - 30, - 95, - 252, - 167, - 127, - 222, - 67, - 49, - 111, - 209, - 94, - 160, - 142, - 124, - 233, - 64, - 146, + 38, + 165, + 168, + 9, 127, - 114, + 102, + 5, + 10, + 154, + 61, + 129, + 93, + 57, + 21, + 235, 18, - 193, - 179, + 45, + 117, + 2, + 7, + 119, + 249, + 232, 123, - 183, + 22, + 14, + 103, + 204, + 127, + 161, + 126, + 94, 97, 100, 0, @@ -40577,38 +40579,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 35, - 48, - 110, + 18, + 192, + 23, + 63, + 222, + 196, + 245, + 78, + 114, + 160, + 171, + 57, + 253, + 154, + 95, + 250, + 20, + 54, + 75, + 187, + 30, + 243, + 4, + 97, 10, - 83, - 186, + 241, 113, - 4, - 119, - 67, - 87, - 140, - 143, - 177, - 53, - 210, - 184, - 67, - 168, - 221, - 237, - 129, - 107, - 90, - 158, - 11, - 6, - 183, - 47, - 7, - 190, - 150, + 149, + 185, + 147, + 179, + 22, 97, 100, 32, @@ -42541,38 +42543,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 30, - 70, - 242, - 153, - 22, + 29, + 52, + 186, + 110, + 59, + 82, 175, - 123, - 232, - 18, - 45, - 56, - 206, - 112, - 14, - 159, - 115, - 180, - 152, - 48, - 180, - 170, - 103, - 45, - 88, - 197, + 168, + 168, + 223, + 5, + 107, + 252, + 81, + 87, 250, - 131, - 218, - 166, - 244, - 144, - 56, + 22, + 226, + 197, + 187, + 4, + 90, + 171, + 113, + 134, + 170, + 181, + 143, + 112, + 146, + 127, + 188, 97, 112, 96, @@ -42580,38 +42582,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 32, - 60, - 202, - 188, - 27, - 69, - 182, - 154, - 109, - 253, - 146, - 254, - 17, - 125, - 251, - 219, - 235, - 72, + 11, + 74, + 2, + 46, + 184, + 252, + 80, + 61, + 157, + 145, + 102, + 12, + 120, + 63, + 198, + 227, + 122, 230, - 132, - 220, - 205, - 248, - 203, - 47, - 70, - 111, - 75, - 134, - 7, - 48, - 52, + 21, + 112, + 235, + 228, + 136, + 63, + 54, + 99, + 213, + 180, + 164, + 53, + 102, + 94, 97, 112, 128, @@ -42619,38 +42621,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 11, - 210, - 45, - 203, - 231, - 26, - 31, - 174, - 234, - 41, - 191, - 103, - 131, - 203, - 198, - 63, - 6, - 120, - 143, - 249, - 234, 36, - 136, - 162, - 175, - 144, - 54, - 172, - 82, - 212, - 174, - 130, + 149, + 224, + 61, + 94, + 92, + 157, + 106, + 207, + 98, + 205, + 247, + 21, + 17, + 142, + 235, + 189, + 169, + 18, + 227, + 9, + 45, + 254, + 62, + 152, + 19, + 237, + 100, + 44, + 223, + 4, + 18, 97, 112, 160, @@ -42658,38 +42660,38 @@ pub mod inclusion_verifier { 1, 82, 127, - 35, - 183, - 178, - 195, - 50, - 252, - 161, - 104, - 86, - 204, - 139, - 209, - 202, 11, - 86, - 246, - 135, - 46, - 217, - 94, + 154, + 140, + 207, + 27, + 201, + 241, + 179, + 107, + 116, + 121, + 42, + 209, + 0, + 7, + 206, + 87, + 158, + 139, + 165, + 87, + 74, + 152, + 128, + 214, + 223, 244, - 41, - 25, - 23, - 252, - 225, - 36, - 191, - 72, - 193, - 54, - 9, + 218, + 132, + 118, + 142, + 254, 97, 112, 192, @@ -42827,14 +42829,14 @@ pub mod inclusion_verifier { 21, 97, 82, - 177, + 178, 87, 97, 82, - 177, + 178, 97, 82, - 114, + 115, 86, 91, 96, @@ -42855,7 +42857,7 @@ pub mod inclusion_verifier { 18, 97, 82, - 202, + 203, 87, 96, 0, @@ -42878,19 +42880,19 @@ pub mod inclusion_verifier { 21, 97, 82, - 228, + 229, 87, 97, 82, - 228, + 229, 97, 82, - 114, + 115, 86, 91, 97, 82, - 247, + 248, 96, 31, 130, @@ -42904,7 +42906,7 @@ pub mod inclusion_verifier { 1, 97, 82, - 136, + 137, 86, 91, 129, @@ -42921,7 +42923,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 12, + 13, 87, 96, 0, @@ -42969,7 +42971,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 60, + 61, 87, 96, 0, @@ -42993,7 +42995,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 84, + 85, 87, 96, 0, @@ -43013,7 +43015,7 @@ pub mod inclusion_verifier { 18, 97, 83, - 104, + 105, 87, 96, 0, @@ -43030,14 +43032,14 @@ pub mod inclusion_verifier { 21, 97, 83, - 124, + 125, 87, 97, 83, - 124, + 125, 97, 82, - 114, + 115, 86, 91, 129, @@ -43046,13 +43048,13 @@ pub mod inclusion_verifier { 27, 97, 83, - 139, + 140, 130, 130, 1, 97, 82, - 136, + 137, 86, 91, 146, @@ -43074,7 +43076,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 165, + 166, 87, 96, 0, @@ -43092,7 +43094,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 195, + 196, 87, 134, 53, @@ -43108,7 +43110,7 @@ pub mod inclusion_verifier { 144, 97, 83, - 170, + 171, 86, 91, 151, @@ -43127,7 +43129,7 @@ pub mod inclusion_verifier { 21, 97, 83, - 218, + 219, 87, 96, 0, @@ -43137,14 +43139,14 @@ pub mod inclusion_verifier { 80, 97, 83, - 231, + 232, 133, 130, 134, 1, 97, 82, - 185, + 186, 86, 91, 145, @@ -43231,38 +43233,38 @@ pub mod inclusion_verifier { 34, 18, 32, - 122, - 73, - 104, - 181, - 49, - 112, - 35, - 197, - 180, - 122, - 33, - 8, - 134, - 62, - 72, - 80, - 163, - 77, - 109, - 126, - 214, - 154, - 195, - 11, - 43, - 187, - 11, - 201, + 172, + 206, + 110, + 12, + 63, + 213, + 170, + 87, + 115, + 229, + 140, + 90, + 241, + 129, + 24, 92, - 30, - 208, - 21, + 117, + 238, + 219, + 174, + 224, + 140, + 222, + 165, + 248, + 100, + 60, + 101, + 117, + 178, + 91, + 74, 100, 115, 111, diff --git a/backend/src/contracts/generated/solvency_verifier.rs b/backend/src/contracts/generated/solvency_verifier.rs index 8e820876..87a20a95 100644 --- a/backend/src/contracts/generated/solvency_verifier.rs +++ b/backend/src/contracts/generated/solvency_verifier.rs @@ -41,7 +41,7 @@ pub mod solvency_verifier { 80, 97, 80, - 18, + 19, 128, 97, 0, @@ -113,7 +113,7 @@ pub mod solvency_verifier { 4, 97, 78, - 212, + 213, 86, 91, 97, @@ -150,7 +150,7 @@ pub mod solvency_verifier { 99, 97, 77, - 253, + 254, 86, 91, 96, @@ -161,7 +161,7 @@ pub mod solvency_verifier { 32, 97, 79, - 189, + 190, 131, 57, 129, @@ -181,7 +181,7 @@ pub mod solvency_verifier { 32, 97, 79, - 157, + 158, 131, 57, 129, @@ -207,7 +207,7 @@ pub mod solvency_verifier { 32, 97, 79, - 157, + 158, 131, 57, 129, @@ -225,7 +225,7 @@ pub mod solvency_verifier { 32, 97, 79, - 157, + 158, 131, 57, 129, @@ -245,7 +245,7 @@ pub mod solvency_verifier { 32, 97, 79, - 157, + 158, 131, 57, 129, @@ -308,38 +308,38 @@ pub mod solvency_verifier { 1, 82, 127, - 22, + 39, + 17, + 67, + 58, 38, - 152, - 187, - 46, - 87, - 66, - 226, - 185, - 121, - 145, - 14, - 255, - 91, - 175, - 171, - 232, - 204, - 107, - 108, - 110, - 171, 171, - 182, - 165, - 54, - 39, + 77, + 162, + 236, + 135, + 64, + 102, + 109, + 177, + 247, + 13, + 49, + 129, 136, - 140, - 3, - 190, - 133, + 36, + 224, + 161, + 34, + 168, + 154, + 18, + 164, + 58, + 99, + 169, + 183, + 13, 96, 0, 131, @@ -3059,7 +3059,7 @@ pub mod solvency_verifier { 32, 97, 79, - 189, + 190, 131, 57, 129, @@ -10122,7 +10122,7 @@ pub mod solvency_verifier { 32, 97, 79, - 189, + 190, 131, 57, 129, @@ -10954,7 +10954,7 @@ pub mod solvency_verifier { 32, 97, 79, - 189, + 190, 131, 57, 129, @@ -15908,38 +15908,38 @@ pub mod solvency_verifier { 146, 80, 127, - 7, - 218, - 17, - 45, - 157, - 22, - 25, - 225, - 93, - 197, + 47, + 118, + 187, + 91, + 135, + 166, 150, - 59, - 99, - 226, - 31, + 156, + 78, + 187, + 133, 27, - 86, - 144, - 169, - 110, - 198, - 74, - 80, - 182, - 30, - 113, - 82, + 177, + 13, + 241, + 115, + 164, 98, + 49, + 107, + 236, + 51, + 57, + 44, + 66, + 108, + 47, + 43, + 58, 35, - 152, - 117, - 22, + 241, + 139, 97, 85, 32, @@ -15947,38 +15947,38 @@ pub mod solvency_verifier { 1, 82, 127, + 17, + 40, + 228, + 200, + 175, + 88, + 44, + 105, + 194, + 9, + 219, + 135, + 236, + 24, + 250, + 133, + 70, + 110, + 167, 27, - 216, - 100, - 205, - 226, - 196, - 10, - 215, - 83, - 201, - 25, - 99, - 114, - 210, - 59, - 79, - 94, - 61, - 0, - 86, - 186, - 196, - 143, - 233, - 156, - 102, - 95, + 113, 152, - 186, - 107, - 130, - 191, + 246, + 216, + 199, + 144, + 131, + 16, + 50, + 97, + 254, + 195, 97, 85, 64, @@ -16096,38 +16096,38 @@ pub mod solvency_verifier { 146, 80, 127, - 24, - 173, - 229, - 99, - 25, - 79, - 216, - 229, - 1, - 81, - 240, - 130, - 195, - 158, - 113, - 48, - 182, - 115, - 67, 19, - 106, - 127, - 86, + 52, 146, + 73, + 62, + 182, + 36, + 153, + 193, + 186, + 3, + 168, + 113, + 95, + 141, + 7, + 231, + 132, + 144, + 241, + 87, + 239, + 96, + 59, + 223, + 186, 251, - 211, - 109, - 29, - 255, - 124, - 60, - 187, + 57, + 106, + 27, + 220, + 191, 97, 86, 0, @@ -16135,38 +16135,38 @@ pub mod solvency_verifier { 1, 82, 127, - 46, - 67, - 184, + 7, + 155, + 11, + 93, + 88, + 231, + 57, + 238, + 166, + 189, + 254, + 64, + 146, + 226, + 50, + 186, 206, - 200, - 154, - 171, - 217, - 8, - 212, - 144, - 23, - 174, + 224, + 208, + 39, + 189, + 15, + 81, + 134, + 194, + 41, 119, - 121, - 4, - 10, - 79, - 88, - 225, - 132, - 115, - 113, - 14, + 191, + 210, 70, - 139, - 48, - 194, - 103, - 243, 32, - 49, + 215, 97, 86, 32, @@ -16284,38 +16284,38 @@ pub mod solvency_verifier { 146, 80, 127, - 39, - 155, - 177, - 177, - 168, - 72, - 39, - 240, - 139, + 24, + 123, + 221, + 234, + 125, + 190, + 28, 90, - 107, - 26, - 254, - 130, - 69, - 61, - 104, - 127, + 205, + 46, + 1, + 175, + 173, + 193, + 192, + 223, + 56, + 24, + 12, + 0, + 171, + 116, + 57, + 53, + 33, + 81, 183, - 22, - 218, - 26, - 86, - 112, - 231, - 234, - 23, - 37, - 51, - 15, - 41, - 143, + 232, + 1, + 80, + 42, + 11, 97, 86, 224, @@ -16323,38 +16323,38 @@ pub mod solvency_verifier { 1, 82, 127, - 31, - 179, - 239, - 68, - 73, + 15, + 194, + 104, + 154, + 39, 157, - 71, - 250, - 111, - 231, - 151, - 96, - 211, - 41, - 91, - 36, - 146, - 152, + 186, + 154, 54, - 149, - 99, - 44, - 200, - 5, - 215, - 161, + 138, + 52, + 152, + 128, + 100, + 229, + 220, + 79, + 28, + 211, 242, - 255, - 204, - 129, - 77, - 12, + 89, + 139, + 210, + 166, + 148, + 158, + 27, + 26, + 2, + 209, + 11, + 118, 97, 87, 0, @@ -16472,38 +16472,38 @@ pub mod solvency_verifier { 146, 80, 127, - 19, - 39, - 167, - 29, - 49, - 73, - 30, - 20, - 55, - 177, - 153, - 72, - 153, - 38, - 123, - 17, - 195, - 171, - 186, + 22, + 251, 208, - 52, - 11, + 175, + 75, + 89, + 220, + 137, + 3, + 70, + 48, + 77, + 53, + 201, + 153, + 221, + 141, + 250, + 211, + 160, + 106, + 216, + 161, + 15, 71, - 254, - 37, - 109, - 79, - 145, - 254, - 249, - 47, - 238, + 69, + 39, + 250, + 217, + 234, + 156, + 50, 97, 87, 192, @@ -16511,38 +16511,38 @@ pub mod solvency_verifier { 1, 82, 127, - 20, - 64, - 235, - 184, - 142, - 193, + 42, + 176, + 21, + 188, + 43, + 138, + 25, + 180, + 131, + 56, + 146, + 129, + 135, + 99, + 129, + 116, + 6, + 85, + 98, + 208, + 165, + 168, + 59, + 0, + 133, + 70, + 169, + 230, + 97, 46, - 113, - 179, - 220, - 248, - 74, 198, - 98, - 41, - 221, - 202, - 13, - 45, - 101, - 112, - 207, - 31, - 251, - 121, - 39, - 194, - 235, - 192, - 159, - 141, - 142, + 196, 97, 87, 224, @@ -16660,38 +16660,38 @@ pub mod solvency_verifier { 146, 80, 127, - 24, - 37, - 96, - 28, - 243, - 219, - 133, - 73, - 214, - 176, - 192, - 186, - 108, - 228, - 187, - 118, - 97, - 248, - 31, - 199, - 222, - 79, - 187, - 59, - 74, - 130, + 29, + 207, + 179, + 20, + 144, + 181, 147, - 255, - 9, - 56, - 200, - 229, + 39, + 100, + 47, + 75, + 147, + 146, + 70, + 91, + 216, + 130, + 79, + 115, + 42, + 158, + 148, + 228, + 107, + 11, + 173, + 50, + 181, + 112, + 96, + 135, + 175, 97, 88, 160, @@ -16699,38 +16699,38 @@ pub mod solvency_verifier { 1, 82, 127, - 26, - 3, - 152, - 63, - 35, - 59, - 0, - 195, - 169, - 106, - 229, - 85, - 44, - 116, - 149, + 22, + 180, + 132, + 41, + 11, + 72, + 220, + 232, + 67, + 198, + 186, + 177, + 230, + 78, 127, - 146, - 133, - 182, - 65, - 169, - 80, - 35, - 151, - 252, - 16, - 239, - 6, - 126, - 99, - 153, - 112, + 69, + 235, + 66, + 75, + 177, + 124, + 230, + 5, + 251, + 206, + 164, + 101, + 15, + 176, + 33, + 246, + 0, 97, 88, 192, @@ -16848,38 +16848,38 @@ pub mod solvency_verifier { 146, 80, 127, - 17, - 208, - 59, - 49, - 8, - 77, - 73, - 228, - 158, - 64, - 144, - 40, - 145, - 67, - 144, - 71, - 204, - 39, - 122, - 169, - 126, - 139, - 46, + 30, + 235, + 63, + 123, + 38, + 213, + 201, + 135, + 27, + 194, + 193, + 106, + 78, + 213, + 5, + 109, + 190, + 97, 58, - 60, - 91, - 46, - 128, - 218, - 197, - 195, - 100, + 75, + 173, + 7, + 161, + 134, + 94, + 148, + 181, + 163, + 241, + 244, + 104, + 66, 97, 89, 128, @@ -16887,38 +16887,38 @@ pub mod solvency_verifier { 1, 82, 127, - 21, - 30, - 149, - 64, + 34, + 38, 172, - 125, - 217, - 246, - 10, - 80, - 51, - 135, - 106, - 208, - 24, - 60, - 74, - 242, - 79, - 125, + 117, + 119, + 252, + 107, + 65, + 146, + 6, + 130, + 240, + 115, + 131, + 237, 18, - 205, - 142, - 190, - 152, + 239, + 23, + 94, + 230, + 23, + 136, + 133, + 81, 231, - 21, - 19, - 147, - 154, - 140, - 192, + 100, + 67, + 78, + 218, + 48, + 160, + 46, 97, 89, 160, @@ -17036,38 +17036,38 @@ pub mod solvency_verifier { 146, 80, 127, - 35, - 208, - 31, - 139, - 180, - 76, - 16, - 180, - 221, - 121, - 98, - 202, - 85, - 129, - 105, - 48, - 12, - 117, - 53, - 220, - 35, - 33, - 196, + 38, + 227, + 251, + 213, + 197, + 166, + 102, + 7, + 205, 131, - 37, - 24, + 113, 65, - 185, - 221, - 83, + 156, + 172, + 72, + 190, + 70, + 69, + 57, + 248, + 131, + 241, + 237, + 250, + 202, 60, - 15, + 107, + 248, + 80, + 122, + 116, + 16, 97, 90, 96, @@ -17075,38 +17075,38 @@ pub mod solvency_verifier { 1, 82, 127, - 21, - 153, - 174, - 86, - 192, - 200, - 67, - 79, - 191, + 8, + 246, + 233, + 145, + 213, + 43, + 71, + 48, + 127, + 47, + 131, + 242, + 103, + 180, + 31, + 63, + 51, + 16, + 250, + 33, + 131, + 25, + 136, + 218, + 122, + 179, + 144, + 84, + 254, + 42, 197, - 238, - 198, - 41, - 23, - 223, - 163, - 240, - 169, - 226, - 219, - 231, - 199, - 116, - 9, - 236, - 15, - 58, - 0, - 75, - 20, - 207, - 153, + 59, 97, 90, 128, @@ -17224,37 +17224,37 @@ pub mod solvency_verifier { 146, 80, 127, - 40, - 118, - 180, - 203, - 48, + 22, + 84, + 237, + 110, + 226, 74, - 113, - 177, + 214, 235, - 151, - 192, - 163, - 63, - 173, - 108, - 37, - 103, - 161, - 143, - 67, + 213, + 196, + 194, + 220, + 15, + 235, + 187, + 46, + 146, + 213, + 86, + 187, + 148, + 111, 51, - 210, - 130, - 135, - 129, - 3, - 168, - 165, - 47, - 154, - 68, + 108, + 124, + 193, + 86, + 97, + 112, + 246, + 76, 221, 97, 91, @@ -17263,38 +17263,38 @@ pub mod solvency_verifier { 1, 82, 127, - 28, - 240, - 58, - 158, - 125, - 159, - 22, - 137, - 186, - 208, + 46, 96, - 227, - 201, - 61, + 118, + 93, + 116, 209, - 61, + 213, + 192, 67, + 226, + 41, + 156, 78, - 111, - 199, - 83, - 75, - 102, - 43, - 160, + 69, + 115, + 18, + 177, + 53, + 143, + 78, + 81, + 205, + 234, 3, - 15, - 134, - 76, - 158, - 249, - 130, + 142, + 192, + 14, + 244, + 83, + 242, + 10, + 9, 97, 91, 96, @@ -17412,38 +17412,38 @@ pub mod solvency_verifier { 146, 80, 127, - 9, - 214, - 177, - 239, - 137, - 0, - 132, - 24, - 220, - 49, - 228, - 141, - 220, - 17, - 35, - 240, - 102, 35, - 24, - 60, - 44, - 163, - 190, - 63, - 135, - 198, - 28, + 160, + 197, + 65, + 100, + 57, + 98, + 253, + 55, + 81, + 243, + 134, + 103, + 0, + 87, + 162, 76, - 212, - 22, - 203, - 7, + 42, + 41, + 102, + 214, + 249, + 117, + 184, + 71, + 75, + 29, + 241, + 223, + 88, + 174, + 197, 97, 92, 32, @@ -17451,38 +17451,38 @@ pub mod solvency_verifier { 1, 82, 127, - 25, - 161, - 150, + 18, + 173, + 172, + 247, + 98, + 132, + 131, 201, - 140, - 23, - 59, - 125, - 57, - 156, - 20, - 190, - 19, - 234, - 160, - 227, - 235, - 243, - 175, - 220, - 128, - 182, - 187, - 84, - 49, - 163, - 150, - 183, - 134, + 221, + 29, + 1, + 76, + 176, + 2, + 67, + 170, + 113, + 97, + 0, + 104, 15, - 136, - 118, + 25, + 93, + 37, + 213, + 155, + 200, + 94, + 231, + 253, + 242, + 2, 97, 92, 64, @@ -17600,38 +17600,38 @@ pub mod solvency_verifier { 146, 80, 127, - 12, - 53, - 58, - 45, - 63, - 185, + 25, + 120, + 10, + 226, + 144, + 27, + 127, + 93, 222, - 90, - 99, - 174, - 32, - 194, - 157, - 40, - 3, - 30, - 254, - 175, + 223, + 148, + 193, + 181, + 59, 80, - 34, - 36, - 199, - 82, + 73, + 119, + 165, + 24, + 31, + 57, + 160, + 80, + 44, + 110, + 134, + 184, 55, - 47, - 7, - 150, - 157, - 39, + 130, + 3, + 242, 46, - 168, - 139, 97, 93, 0, @@ -17639,38 +17639,38 @@ pub mod solvency_verifier { 1, 82, 127, - 42, - 102, - 226, - 178, - 252, - 76, - 65, - 245, - 79, - 35, - 28, - 5, - 54, - 163, - 242, - 73, - 215, - 186, - 192, - 58, - 178, - 87, - 115, - 192, + 31, + 95, + 49, + 26, + 61, 23, - 153, - 243, - 138, - 158, - 194, - 253, - 44, + 147, + 128, + 254, + 124, + 217, + 230, + 209, + 65, + 80, + 220, + 134, + 6, + 41, + 84, + 27, + 178, + 200, + 248, + 129, + 16, + 227, + 29, + 233, + 28, + 123, + 250, 97, 93, 32, @@ -17788,38 +17788,38 @@ pub mod solvency_verifier { 146, 80, 127, - 9, - 251, - 88, - 47, - 255, - 176, - 110, - 71, + 2, + 31, + 161, + 31, 44, - 229, - 148, + 130, + 43, + 73, + 70, + 111, + 71, + 59, + 199, + 80, + 225, + 114, + 190, + 102, 255, - 4, - 83, - 12, - 159, - 51, - 215, - 3, - 18, - 185, - 184, + 157, + 243, + 91, + 197, + 163, + 147, + 206, 229, - 78, - 188, - 112, - 9, - 125, - 65, - 93, - 107, - 130, + 146, + 148, + 244, + 43, + 152, 97, 93, 224, @@ -17827,38 +17827,38 @@ pub mod solvency_verifier { 1, 82, 127, - 16, - 69, - 162, - 173, - 196, - 250, - 243, - 149, - 178, - 100, - 49, - 216, - 107, - 223, - 118, - 4, + 34, + 129, + 68, + 86, + 120, 101, - 30, - 6, - 249, - 124, - 186, - 233, - 237, - 142, - 0, - 103, - 97, + 26, + 10, + 5, + 204, + 219, + 234, 71, - 254, - 159, - 131, + 189, + 230, + 231, + 166, + 200, + 46, + 67, + 222, + 10, + 82, + 165, + 65, + 79, + 232, + 41, + 149, + 34, + 145, + 48, 97, 94, 0, @@ -17976,38 +17976,38 @@ pub mod solvency_verifier { 146, 80, 127, - 48, - 76, - 122, 14, - 215, - 176, - 125, - 114, - 218, - 11, - 253, - 10, - 99, - 144, - 131, - 85, - 184, - 37, - 102, - 155, - 90, - 98, - 185, - 155, + 103, + 240, + 107, + 60, + 214, + 173, + 96, + 12, + 58, + 59, + 112, + 93, + 61, + 23, + 140, + 46, + 164, + 175, + 164, + 25, + 166, + 15, + 245, + 107, + 66, 119, - 94, - 225, - 159, - 148, - 11, - 145, - 20, + 74, + 68, + 242, + 193, + 81, 97, 94, 192, @@ -18015,38 +18015,38 @@ pub mod solvency_verifier { 1, 82, 127, - 2, - 252, - 178, - 230, - 19, - 17, - 49, - 103, - 127, - 172, - 187, - 194, - 139, - 115, - 238, - 108, + 28, + 192, + 221, 69, - 113, - 161, - 212, - 144, - 52, - 168, - 95, + 178, + 126, + 153, + 220, + 186, + 126, + 76, 114, - 113, - 156, - 209, - 31, - 146, - 45, - 11, + 28, + 66, + 85, + 235, + 222, + 122, + 91, + 58, + 234, + 98, + 121, + 133, + 144, + 115, + 57, + 141, + 107, + 243, + 186, + 29, 97, 94, 224, @@ -18163,38 +18163,39 @@ pub mod solvency_verifier { 22, 146, 80, - 126, - 52, - 126, - 142, - 147, - 50, - 161, - 119, - 219, - 161, - 182, - 95, - 209, - 168, - 161, - 116, - 80, - 82, - 23, - 146, - 167, - 251, - 172, - 62, - 2, - 151, + 127, + 39, + 156, + 22, + 205, + 127, 235, - 222, - 110, - 120, + 23, + 237, + 108, + 254, + 76, + 226, + 127, + 0, + 71, 56, - 228, + 114, + 179, + 64, + 235, + 202, + 227, + 223, + 226, + 198, + 216, + 170, + 151, + 217, + 96, + 34, + 115, 97, 95, 160, @@ -18202,38 +18203,38 @@ pub mod solvency_verifier { 1, 82, 127, - 40, - 157, - 64, - 96, - 17, - 170, - 225, - 17, - 143, - 244, - 216, - 107, - 113, - 109, - 75, - 150, - 96, - 245, - 194, - 112, - 234, - 91, - 82, - 71, - 161, - 204, - 113, + 10, + 175, 252, - 7, - 69, - 196, - 199, + 135, + 44, + 121, + 132, + 115, + 223, + 1, + 44, + 19, + 197, + 24, + 94, + 183, + 204, + 163, + 155, + 165, + 28, + 191, + 3, + 88, + 167, + 245, + 183, + 144, + 63, + 189, + 230, + 77, 97, 95, 192, @@ -18351,38 +18352,38 @@ pub mod solvency_verifier { 146, 80, 127, - 35, - 130, - 137, - 5, - 49, - 118, - 214, - 238, + 27, + 113, + 26, + 191, + 213, + 202, + 55, + 155, + 12, 122, + 5, + 154, + 60, + 10, + 35, + 248, 170, - 54, - 217, - 130, - 73, - 199, - 221, - 228, - 254, - 231, - 244, - 220, - 144, + 109, + 3, 49, - 111, - 100, - 249, - 43, - 36, - 239, - 159, - 152, - 126, + 88, + 185, + 188, + 185, + 34, + 241, + 145, + 205, + 17, + 163, + 116, + 219, 97, 96, 128, @@ -18390,38 +18391,38 @@ pub mod solvency_verifier { 1, 82, 127, - 12, - 78, - 37, - 233, - 130, - 8, - 49, - 95, - 222, - 220, - 107, - 222, - 21, - 69, - 83, - 62, - 238, - 108, + 34, + 147, + 228, + 53, + 15, + 113, + 106, + 66, + 176, + 154, + 191, + 38, + 150, + 181, + 54, + 71, + 185, + 134, + 86, + 226, + 23, + 223, + 195, + 144, + 113, + 178, + 32, 124, - 75, - 137, - 207, - 164, - 79, - 118, - 78, 179, - 154, - 18, - 157, - 155, - 164, + 72, + 196, + 148, 97, 96, 160, @@ -19818,38 +19819,38 @@ pub mod solvency_verifier { 1, 82, 127, - 36, - 155, - 137, - 19, - 63, - 81, - 247, - 7, - 165, - 98, - 169, - 182, - 154, - 202, - 173, - 100, 43, - 208, - 140, - 145, - 121, - 170, - 144, - 200, - 24, - 143, + 218, + 62, + 63, + 105, + 19, + 219, + 214, + 40, + 213, + 203, + 46, + 35, + 80, 64, + 217, + 144, + 46, + 63, + 92, + 217, 181, - 32, - 93, - 173, - 67, + 245, + 102, + 158, + 215, + 101, + 152, + 77, + 179, + 43, + 85, 97, 105, 96, @@ -19857,38 +19858,38 @@ pub mod solvency_verifier { 1, 82, 127, - 41, + 20, + 249, + 135, + 223, + 63, + 11, + 64, + 132, 129, - 189, - 202, + 146, 199, - 23, - 31, - 133, - 55, - 241, - 6, - 77, - 224, + 106, + 25, + 19, + 20, + 214, + 127, + 177, + 242, 97, - 181, - 206, - 94, - 24, - 221, - 47, - 196, - 164, - 228, - 67, - 14, - 181, - 8, - 117, - 6, + 143, + 186, + 51, + 225, + 99, + 226, + 140, + 233, 232, - 237, - 130, + 149, + 171, + 128, 97, 105, 128, @@ -19896,38 +19897,38 @@ pub mod solvency_verifier { 1, 82, 127, - 19, - 5, - 249, - 255, - 68, - 9, - 200, - 211, - 98, - 8, - 215, - 82, - 153, + 43, + 17, + 165, + 127, + 227, + 232, + 101, + 49, + 138, + 156, + 186, + 39, + 164, + 16, 135, - 234, - 36, - 56, - 194, - 45, - 1, - 112, - 144, - 172, - 40, - 65, - 179, - 212, - 251, - 54, + 25, + 135, + 161, + 118, + 183, + 116, + 106, + 204, + 204, + 122, 166, - 234, - 111, + 197, + 156, + 71, + 201, + 192, + 123, 97, 105, 160, @@ -19935,38 +19936,38 @@ pub mod solvency_verifier { 1, 82, 127, - 20, - 237, - 54, - 48, - 18, - 201, - 235, - 39, - 186, - 71, - 158, - 160, - 48, - 253, - 100, - 103, - 233, - 161, - 244, - 232, - 109, - 120, - 9, - 127, - 59, - 55, - 167, + 7, + 17, + 115, + 219, + 23, + 145, + 73, + 156, + 223, 233, - 31, + 185, + 202, + 138, + 137, + 196, + 5, + 205, + 249, + 162, + 142, + 98, + 45, + 195, + 65, + 123, + 125, + 60, 112, - 17, - 220, + 136, + 45, + 3, + 79, 97, 105, 192, @@ -20104,14 +20105,14 @@ pub mod solvency_verifier { 21, 97, 78, - 92, + 93, 87, 97, 78, - 92, + 93, 97, 78, - 29, + 30, 86, 91, 96, @@ -20132,7 +20133,7 @@ pub mod solvency_verifier { 18, 97, 78, - 117, + 118, 87, 96, 0, @@ -20155,19 +20156,19 @@ pub mod solvency_verifier { 21, 97, 78, - 143, + 144, 87, 97, 78, - 143, + 144, 97, 78, - 29, + 30, 86, 91, 97, 78, - 162, + 163, 96, 31, 130, @@ -20181,7 +20182,7 @@ pub mod solvency_verifier { 1, 97, 78, - 51, + 52, 86, 91, 129, @@ -20198,7 +20199,7 @@ pub mod solvency_verifier { 21, 97, 78, - 183, + 184, 87, 96, 0, @@ -20246,7 +20247,7 @@ pub mod solvency_verifier { 21, 97, 78, - 231, + 232, 87, 96, 0, @@ -20269,8 +20270,8 @@ pub mod solvency_verifier { 17, 21, 97, - 78, - 255, + 79, + 0, 87, 96, 0, @@ -20290,7 +20291,7 @@ pub mod solvency_verifier { 18, 97, 79, - 19, + 20, 87, 96, 0, @@ -20307,14 +20308,14 @@ pub mod solvency_verifier { 21, 97, 79, - 39, + 40, 87, 97, 79, - 39, + 40, 97, 78, - 29, + 30, 86, 91, 129, @@ -20323,13 +20324,13 @@ pub mod solvency_verifier { 27, 97, 79, - 54, + 55, 130, 130, 1, 97, 78, - 51, + 52, 86, 91, 146, @@ -20351,7 +20352,7 @@ pub mod solvency_verifier { 21, 97, 79, - 80, + 81, 87, 96, 0, @@ -20369,7 +20370,7 @@ pub mod solvency_verifier { 21, 97, 79, - 110, + 111, 87, 134, 53, @@ -20385,7 +20386,7 @@ pub mod solvency_verifier { 144, 97, 79, - 85, + 86, 86, 91, 151, @@ -20404,7 +20405,7 @@ pub mod solvency_verifier { 21, 97, 79, - 133, + 134, 87, 96, 0, @@ -20414,14 +20415,14 @@ pub mod solvency_verifier { 80, 97, 79, - 146, + 147, 133, 130, 134, 1, 97, 78, - 100, + 101, 86, 91, 145, @@ -20508,38 +20509,38 @@ pub mod solvency_verifier { 34, 18, 32, - 137, - 255, - 9, - 9, - 168, - 255, - 197, - 49, - 162, - 137, - 198, - 232, - 147, - 24, - 198, - 22, - 46, + 250, + 211, + 110, + 116, + 126, + 100, + 150, + 73, + 218, + 88, + 178, + 114, 190, - 252, - 62, - 65, - 155, - 177, - 115, - 245, - 43, - 154, - 6, - 159, - 129, - 202, - 132, + 104, + 158, + 148, + 192, + 225, + 150, + 168, + 23, + 41, + 86, + 119, + 112, + 19, + 25, + 95, + 88, + 149, + 153, + 135, 100, 115, 111, @@ -20618,7 +20619,7 @@ pub mod solvency_verifier { 4, 97, 78, - 212, + 213, 86, 91, 97, @@ -20655,7 +20656,7 @@ pub mod solvency_verifier { 99, 97, 77, - 253, + 254, 86, 91, 96, @@ -20666,7 +20667,7 @@ pub mod solvency_verifier { 32, 97, 79, - 189, + 190, 131, 57, 129, @@ -20686,7 +20687,7 @@ pub mod solvency_verifier { 32, 97, 79, - 157, + 158, 131, 57, 129, @@ -20712,7 +20713,7 @@ pub mod solvency_verifier { 32, 97, 79, - 157, + 158, 131, 57, 129, @@ -20730,7 +20731,7 @@ pub mod solvency_verifier { 32, 97, 79, - 157, + 158, 131, 57, 129, @@ -20750,7 +20751,7 @@ pub mod solvency_verifier { 32, 97, 79, - 157, + 158, 131, 57, 129, @@ -20813,38 +20814,38 @@ pub mod solvency_verifier { 1, 82, 127, - 22, + 39, + 17, + 67, + 58, 38, - 152, - 187, - 46, - 87, - 66, - 226, - 185, - 121, - 145, - 14, - 255, - 91, - 175, - 171, - 232, - 204, - 107, - 108, - 110, 171, - 171, - 182, - 165, - 54, - 39, + 77, + 162, + 236, + 135, + 64, + 102, + 109, + 177, + 247, + 13, + 49, + 129, 136, - 140, - 3, - 190, - 133, + 36, + 224, + 161, + 34, + 168, + 154, + 18, + 164, + 58, + 99, + 169, + 183, + 13, 96, 0, 131, @@ -23564,7 +23565,7 @@ pub mod solvency_verifier { 32, 97, 79, - 189, + 190, 131, 57, 129, @@ -30627,7 +30628,7 @@ pub mod solvency_verifier { 32, 97, 79, - 189, + 190, 131, 57, 129, @@ -31459,7 +31460,7 @@ pub mod solvency_verifier { 32, 97, 79, - 189, + 190, 131, 57, 129, @@ -36413,38 +36414,38 @@ pub mod solvency_verifier { 146, 80, 127, - 7, - 218, - 17, - 45, - 157, - 22, - 25, - 225, - 93, - 197, + 47, + 118, + 187, + 91, + 135, + 166, 150, - 59, - 99, - 226, - 31, + 156, + 78, + 187, + 133, 27, - 86, - 144, - 169, - 110, - 198, - 74, - 80, - 182, - 30, - 113, - 82, + 177, + 13, + 241, + 115, + 164, 98, + 49, + 107, + 236, + 51, + 57, + 44, + 66, + 108, + 47, + 43, + 58, 35, - 152, - 117, - 22, + 241, + 139, 97, 85, 32, @@ -36452,38 +36453,38 @@ pub mod solvency_verifier { 1, 82, 127, + 17, + 40, + 228, + 200, + 175, + 88, + 44, + 105, + 194, + 9, + 219, + 135, + 236, + 24, + 250, + 133, + 70, + 110, + 167, 27, - 216, - 100, - 205, - 226, - 196, - 10, - 215, - 83, - 201, - 25, - 99, - 114, - 210, - 59, - 79, - 94, - 61, - 0, - 86, - 186, - 196, - 143, - 233, - 156, - 102, - 95, + 113, 152, - 186, - 107, - 130, - 191, + 246, + 216, + 199, + 144, + 131, + 16, + 50, + 97, + 254, + 195, 97, 85, 64, @@ -36589,50 +36590,50 @@ pub mod solvency_verifier { 128, 97, 85, - 128, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 24, - 173, - 229, - 99, - 25, - 79, - 216, - 229, - 1, - 81, - 240, - 130, - 195, - 158, - 113, - 48, - 182, - 115, - 67, - 19, - 106, + 128, + 135, + 1, + 96, + 6, + 90, + 250, + 20, + 22, + 146, + 80, 127, - 86, + 19, + 52, 146, + 73, + 62, + 182, + 36, + 153, + 193, + 186, + 3, + 168, + 113, + 95, + 141, + 7, + 231, + 132, + 144, + 241, + 87, + 239, + 96, + 59, + 223, + 186, 251, - 211, - 109, - 29, - 255, - 124, - 60, - 187, + 57, + 106, + 27, + 220, + 191, 97, 86, 0, @@ -36640,38 +36641,38 @@ pub mod solvency_verifier { 1, 82, 127, - 46, - 67, - 184, + 7, + 155, + 11, + 93, + 88, + 231, + 57, + 238, + 166, + 189, + 254, + 64, + 146, + 226, + 50, + 186, 206, - 200, - 154, - 171, - 217, - 8, - 212, - 144, - 23, - 174, + 224, + 208, + 39, + 189, + 15, + 81, + 134, + 194, + 41, 119, - 121, - 4, - 10, - 79, - 88, - 225, - 132, - 115, - 113, - 14, + 191, + 210, 70, - 139, - 48, - 194, - 103, - 243, 32, - 49, + 215, 97, 86, 32, @@ -36789,38 +36790,38 @@ pub mod solvency_verifier { 146, 80, 127, - 39, - 155, - 177, - 177, - 168, - 72, - 39, - 240, - 139, + 24, + 123, + 221, + 234, + 125, + 190, + 28, 90, - 107, - 26, - 254, - 130, - 69, - 61, - 104, - 127, + 205, + 46, + 1, + 175, + 173, + 193, + 192, + 223, + 56, + 24, + 12, + 0, + 171, + 116, + 57, + 53, + 33, + 81, 183, - 22, - 218, - 26, - 86, - 112, - 231, - 234, - 23, - 37, - 51, - 15, - 41, - 143, + 232, + 1, + 80, + 42, + 11, 97, 86, 224, @@ -36828,38 +36829,38 @@ pub mod solvency_verifier { 1, 82, 127, - 31, - 179, - 239, - 68, - 73, + 15, + 194, + 104, + 154, + 39, 157, - 71, - 250, - 111, - 231, - 151, - 96, - 211, - 41, - 91, - 36, - 146, - 152, + 186, + 154, 54, - 149, - 99, - 44, - 200, - 5, - 215, - 161, + 138, + 52, + 152, + 128, + 100, + 229, + 220, + 79, + 28, + 211, 242, - 255, - 204, - 129, - 77, - 12, + 89, + 139, + 210, + 166, + 148, + 158, + 27, + 26, + 2, + 209, + 11, + 118, 97, 87, 0, @@ -36977,38 +36978,38 @@ pub mod solvency_verifier { 146, 80, 127, - 19, - 39, - 167, - 29, - 49, - 73, - 30, - 20, - 55, - 177, - 153, - 72, - 153, - 38, - 123, - 17, - 195, - 171, - 186, + 22, + 251, 208, - 52, - 11, + 175, + 75, + 89, + 220, + 137, + 3, + 70, + 48, + 77, + 53, + 201, + 153, + 221, + 141, + 250, + 211, + 160, + 106, + 216, + 161, + 15, 71, - 254, - 37, - 109, - 79, - 145, - 254, - 249, - 47, - 238, + 69, + 39, + 250, + 217, + 234, + 156, + 50, 97, 87, 192, @@ -37016,38 +37017,38 @@ pub mod solvency_verifier { 1, 82, 127, - 20, - 64, - 235, - 184, - 142, - 193, + 42, + 176, + 21, + 188, + 43, + 138, + 25, + 180, + 131, + 56, + 146, + 129, + 135, + 99, + 129, + 116, + 6, + 85, + 98, + 208, + 165, + 168, + 59, + 0, + 133, + 70, + 169, + 230, + 97, 46, - 113, - 179, - 220, - 248, - 74, 198, - 98, - 41, - 221, - 202, - 13, - 45, - 101, - 112, - 207, - 31, - 251, - 121, - 39, - 194, - 235, - 192, - 159, - 141, - 142, + 196, 97, 87, 224, @@ -37165,38 +37166,38 @@ pub mod solvency_verifier { 146, 80, 127, - 24, - 37, - 96, - 28, - 243, - 219, - 133, - 73, - 214, - 176, - 192, - 186, - 108, - 228, - 187, - 118, - 97, - 248, - 31, - 199, - 222, - 79, - 187, - 59, - 74, - 130, + 29, + 207, + 179, + 20, + 144, + 181, 147, - 255, - 9, - 56, - 200, - 229, + 39, + 100, + 47, + 75, + 147, + 146, + 70, + 91, + 216, + 130, + 79, + 115, + 42, + 158, + 148, + 228, + 107, + 11, + 173, + 50, + 181, + 112, + 96, + 135, + 175, 97, 88, 160, @@ -37204,38 +37205,38 @@ pub mod solvency_verifier { 1, 82, 127, - 26, - 3, - 152, - 63, - 35, - 59, - 0, - 195, - 169, - 106, - 229, - 85, - 44, - 116, - 149, + 22, + 180, + 132, + 41, + 11, + 72, + 220, + 232, + 67, + 198, + 186, + 177, + 230, + 78, 127, - 146, - 133, - 182, - 65, - 169, - 80, - 35, - 151, - 252, - 16, - 239, - 6, - 126, - 99, - 153, - 112, + 69, + 235, + 66, + 75, + 177, + 124, + 230, + 5, + 251, + 206, + 164, + 101, + 15, + 176, + 33, + 246, + 0, 97, 88, 192, @@ -37353,38 +37354,38 @@ pub mod solvency_verifier { 146, 80, 127, - 17, - 208, - 59, - 49, - 8, - 77, - 73, - 228, - 158, - 64, - 144, - 40, - 145, - 67, - 144, - 71, - 204, - 39, - 122, - 169, - 126, - 139, - 46, - 58, - 60, - 91, - 46, - 128, - 218, - 197, - 195, - 100, + 30, + 235, + 63, + 123, + 38, + 213, + 201, + 135, + 27, + 194, + 193, + 106, + 78, + 213, + 5, + 109, + 190, + 97, + 58, + 75, + 173, + 7, + 161, + 134, + 94, + 148, + 181, + 163, + 241, + 244, + 104, + 66, 97, 89, 128, @@ -37392,38 +37393,38 @@ pub mod solvency_verifier { 1, 82, 127, - 21, - 30, - 149, - 64, + 34, + 38, 172, - 125, - 217, - 246, - 10, - 80, - 51, - 135, - 106, - 208, - 24, - 60, - 74, - 242, - 79, - 125, + 117, + 119, + 252, + 107, + 65, + 146, + 6, + 130, + 240, + 115, + 131, + 237, 18, - 205, - 142, - 190, - 152, + 239, + 23, + 94, + 230, + 23, + 136, + 133, + 81, 231, - 21, - 19, - 147, - 154, - 140, - 192, + 100, + 67, + 78, + 218, + 48, + 160, + 46, 97, 89, 160, @@ -37541,38 +37542,38 @@ pub mod solvency_verifier { 146, 80, 127, - 35, - 208, - 31, - 139, - 180, - 76, - 16, - 180, - 221, - 121, - 98, - 202, - 85, - 129, - 105, - 48, - 12, - 117, - 53, - 220, - 35, - 33, - 196, + 38, + 227, + 251, + 213, + 197, + 166, + 102, + 7, + 205, 131, - 37, - 24, + 113, 65, - 185, - 221, - 83, + 156, + 172, + 72, + 190, + 70, + 69, + 57, + 248, + 131, + 241, + 237, + 250, + 202, 60, - 15, + 107, + 248, + 80, + 122, + 116, + 16, 97, 90, 96, @@ -37580,38 +37581,38 @@ pub mod solvency_verifier { 1, 82, 127, - 21, - 153, - 174, - 86, - 192, - 200, - 67, - 79, - 191, + 8, + 246, + 233, + 145, + 213, + 43, + 71, + 48, + 127, + 47, + 131, + 242, + 103, + 180, + 31, + 63, + 51, + 16, + 250, + 33, + 131, + 25, + 136, + 218, + 122, + 179, + 144, + 84, + 254, + 42, 197, - 238, - 198, - 41, - 23, - 223, - 163, - 240, - 169, - 226, - 219, - 231, - 199, - 116, - 9, - 236, - 15, - 58, - 0, - 75, - 20, - 207, - 153, + 59, 97, 90, 128, @@ -37729,37 +37730,37 @@ pub mod solvency_verifier { 146, 80, 127, - 40, - 118, - 180, - 203, - 48, + 22, + 84, + 237, + 110, + 226, 74, - 113, - 177, + 214, 235, - 151, - 192, - 163, - 63, - 173, - 108, - 37, - 103, - 161, - 143, - 67, + 213, + 196, + 194, + 220, + 15, + 235, + 187, + 46, + 146, + 213, + 86, + 187, + 148, + 111, 51, - 210, - 130, - 135, - 129, - 3, - 168, - 165, - 47, - 154, - 68, + 108, + 124, + 193, + 86, + 97, + 112, + 246, + 76, 221, 97, 91, @@ -37768,38 +37769,38 @@ pub mod solvency_verifier { 1, 82, 127, - 28, - 240, - 58, - 158, - 125, - 159, - 22, - 137, - 186, - 208, + 46, 96, - 227, - 201, - 61, + 118, + 93, + 116, 209, - 61, + 213, + 192, 67, + 226, + 41, + 156, 78, - 111, - 199, - 83, - 75, - 102, - 43, - 160, + 69, + 115, + 18, + 177, + 53, + 143, + 78, + 81, + 205, + 234, 3, - 15, - 134, - 76, - 158, - 249, - 130, + 142, + 192, + 14, + 244, + 83, + 242, + 10, + 9, 97, 91, 96, @@ -37917,38 +37918,38 @@ pub mod solvency_verifier { 146, 80, 127, - 9, - 214, - 177, - 239, - 137, - 0, - 132, - 24, - 220, - 49, - 228, - 141, - 220, - 17, - 35, - 240, - 102, 35, - 24, - 60, - 44, - 163, - 190, - 63, - 135, - 198, - 28, + 160, + 197, + 65, + 100, + 57, + 98, + 253, + 55, + 81, + 243, + 134, + 103, + 0, + 87, + 162, 76, - 212, - 22, - 203, - 7, + 42, + 41, + 102, + 214, + 249, + 117, + 184, + 71, + 75, + 29, + 241, + 223, + 88, + 174, + 197, 97, 92, 32, @@ -37956,38 +37957,38 @@ pub mod solvency_verifier { 1, 82, 127, - 25, - 161, - 150, + 18, + 173, + 172, + 247, + 98, + 132, + 131, 201, - 140, - 23, - 59, - 125, - 57, - 156, - 20, - 190, - 19, - 234, - 160, - 227, - 235, - 243, - 175, - 220, - 128, - 182, - 187, - 84, - 49, - 163, - 150, - 183, - 134, + 221, + 29, + 1, + 76, + 176, + 2, + 67, + 170, + 113, + 97, + 0, + 104, 15, - 136, - 118, + 25, + 93, + 37, + 213, + 155, + 200, + 94, + 231, + 253, + 242, + 2, 97, 92, 64, @@ -38105,38 +38106,38 @@ pub mod solvency_verifier { 146, 80, 127, - 12, - 53, - 58, - 45, - 63, - 185, + 25, + 120, + 10, + 226, + 144, + 27, + 127, + 93, 222, - 90, - 99, - 174, - 32, - 194, - 157, - 40, - 3, - 30, - 254, - 175, + 223, + 148, + 193, + 181, + 59, 80, - 34, - 36, - 199, - 82, + 73, + 119, + 165, + 24, + 31, + 57, + 160, + 80, + 44, + 110, + 134, + 184, 55, - 47, - 7, - 150, - 157, - 39, + 130, + 3, + 242, 46, - 168, - 139, 97, 93, 0, @@ -38144,38 +38145,38 @@ pub mod solvency_verifier { 1, 82, 127, - 42, - 102, - 226, - 178, - 252, - 76, - 65, - 245, - 79, - 35, - 28, - 5, - 54, - 163, - 242, - 73, - 215, - 186, - 192, - 58, - 178, - 87, - 115, - 192, + 31, + 95, + 49, + 26, + 61, 23, - 153, - 243, - 138, - 158, - 194, - 253, - 44, + 147, + 128, + 254, + 124, + 217, + 230, + 209, + 65, + 80, + 220, + 134, + 6, + 41, + 84, + 27, + 178, + 200, + 248, + 129, + 16, + 227, + 29, + 233, + 28, + 123, + 250, 97, 93, 32, @@ -38293,38 +38294,38 @@ pub mod solvency_verifier { 146, 80, 127, - 9, - 251, - 88, - 47, - 255, - 176, - 110, - 71, + 2, + 31, + 161, + 31, 44, - 229, - 148, + 130, + 43, + 73, + 70, + 111, + 71, + 59, + 199, + 80, + 225, + 114, + 190, + 102, 255, - 4, - 83, - 12, - 159, - 51, - 215, - 3, - 18, - 185, - 184, + 157, + 243, + 91, + 197, + 163, + 147, + 206, 229, - 78, - 188, - 112, - 9, - 125, - 65, - 93, - 107, - 130, + 146, + 148, + 244, + 43, + 152, 97, 93, 224, @@ -38332,38 +38333,38 @@ pub mod solvency_verifier { 1, 82, 127, - 16, - 69, - 162, - 173, - 196, - 250, - 243, - 149, - 178, - 100, - 49, - 216, - 107, - 223, - 118, - 4, + 34, + 129, + 68, + 86, + 120, 101, - 30, - 6, - 249, - 124, - 186, - 233, - 237, - 142, - 0, - 103, - 97, + 26, + 10, + 5, + 204, + 219, + 234, 71, - 254, - 159, - 131, + 189, + 230, + 231, + 166, + 200, + 46, + 67, + 222, + 10, + 82, + 165, + 65, + 79, + 232, + 41, + 149, + 34, + 145, + 48, 97, 94, 0, @@ -38481,38 +38482,38 @@ pub mod solvency_verifier { 146, 80, 127, - 48, - 76, - 122, 14, - 215, - 176, - 125, - 114, - 218, - 11, - 253, - 10, - 99, - 144, - 131, - 85, - 184, - 37, - 102, - 155, - 90, - 98, - 185, - 155, + 103, + 240, + 107, + 60, + 214, + 173, + 96, + 12, + 58, + 59, + 112, + 93, + 61, + 23, + 140, + 46, + 164, + 175, + 164, + 25, + 166, + 15, + 245, + 107, + 66, 119, - 94, - 225, - 159, - 148, - 11, - 145, - 20, + 74, + 68, + 242, + 193, + 81, 97, 94, 192, @@ -38520,38 +38521,38 @@ pub mod solvency_verifier { 1, 82, 127, - 2, - 252, - 178, - 230, - 19, - 17, - 49, - 103, - 127, - 172, - 187, - 194, - 139, - 115, - 238, - 108, + 28, + 192, + 221, 69, - 113, - 161, - 212, - 144, - 52, - 168, - 95, + 178, + 126, + 153, + 220, + 186, + 126, + 76, 114, - 113, - 156, - 209, - 31, - 146, - 45, - 11, + 28, + 66, + 85, + 235, + 222, + 122, + 91, + 58, + 234, + 98, + 121, + 133, + 144, + 115, + 57, + 141, + 107, + 243, + 186, + 29, 97, 94, 224, @@ -38668,38 +38669,39 @@ pub mod solvency_verifier { 22, 146, 80, - 126, - 52, - 126, - 142, - 147, - 50, - 161, - 119, - 219, - 161, - 182, - 95, - 209, - 168, - 161, - 116, - 80, - 82, - 23, - 146, - 167, - 251, - 172, - 62, - 2, - 151, + 127, + 39, + 156, + 22, + 205, + 127, 235, - 222, - 110, - 120, + 23, + 237, + 108, + 254, + 76, + 226, + 127, + 0, + 71, 56, - 228, + 114, + 179, + 64, + 235, + 202, + 227, + 223, + 226, + 198, + 216, + 170, + 151, + 217, + 96, + 34, + 115, 97, 95, 160, @@ -38707,38 +38709,38 @@ pub mod solvency_verifier { 1, 82, 127, - 40, - 157, - 64, - 96, - 17, - 170, - 225, - 17, - 143, - 244, - 216, - 107, - 113, - 109, - 75, - 150, - 96, - 245, - 194, - 112, - 234, - 91, - 82, - 71, - 161, - 204, - 113, + 10, + 175, 252, - 7, - 69, - 196, - 199, + 135, + 44, + 121, + 132, + 115, + 223, + 1, + 44, + 19, + 197, + 24, + 94, + 183, + 204, + 163, + 155, + 165, + 28, + 191, + 3, + 88, + 167, + 245, + 183, + 144, + 63, + 189, + 230, + 77, 97, 95, 192, @@ -38856,38 +38858,38 @@ pub mod solvency_verifier { 146, 80, 127, - 35, - 130, - 137, - 5, - 49, - 118, - 214, - 238, + 27, + 113, + 26, + 191, + 213, + 202, + 55, + 155, + 12, 122, + 5, + 154, + 60, + 10, + 35, + 248, 170, - 54, - 217, - 130, - 73, - 199, - 221, - 228, - 254, - 231, - 244, - 220, - 144, + 109, + 3, 49, - 111, - 100, - 249, - 43, - 36, - 239, - 159, - 152, - 126, + 88, + 185, + 188, + 185, + 34, + 241, + 145, + 205, + 17, + 163, + 116, + 219, 97, 96, 128, @@ -38895,38 +38897,38 @@ pub mod solvency_verifier { 1, 82, 127, - 12, - 78, - 37, - 233, - 130, - 8, - 49, - 95, - 222, - 220, - 107, - 222, - 21, - 69, - 83, - 62, - 238, - 108, + 34, + 147, + 228, + 53, + 15, + 113, + 106, + 66, + 176, + 154, + 191, + 38, + 150, + 181, + 54, + 71, + 185, + 134, + 86, + 226, + 23, + 223, + 195, + 144, + 113, + 178, + 32, 124, - 75, - 137, - 207, - 164, - 79, - 118, - 78, 179, - 154, - 18, - 157, - 155, - 164, + 72, + 196, + 148, 97, 96, 160, @@ -40323,38 +40325,38 @@ pub mod solvency_verifier { 1, 82, 127, - 36, - 155, - 137, - 19, - 63, - 81, - 247, - 7, - 165, - 98, - 169, - 182, - 154, - 202, - 173, - 100, 43, - 208, - 140, - 145, - 121, - 170, - 144, - 200, - 24, - 143, + 218, + 62, + 63, + 105, + 19, + 219, + 214, + 40, + 213, + 203, + 46, + 35, + 80, 64, + 217, + 144, + 46, + 63, + 92, + 217, 181, - 32, - 93, - 173, - 67, + 245, + 102, + 158, + 215, + 101, + 152, + 77, + 179, + 43, + 85, 97, 105, 96, @@ -40362,38 +40364,38 @@ pub mod solvency_verifier { 1, 82, 127, - 41, + 20, + 249, + 135, + 223, + 63, + 11, + 64, + 132, 129, - 189, - 202, + 146, 199, - 23, - 31, - 133, - 55, - 241, - 6, - 77, - 224, + 106, + 25, + 19, + 20, + 214, + 127, + 177, + 242, 97, - 181, - 206, - 94, - 24, - 221, - 47, - 196, - 164, - 228, - 67, - 14, - 181, - 8, - 117, - 6, + 143, + 186, + 51, + 225, + 99, + 226, + 140, + 233, 232, - 237, - 130, + 149, + 171, + 128, 97, 105, 128, @@ -40401,38 +40403,38 @@ pub mod solvency_verifier { 1, 82, 127, - 19, - 5, - 249, - 255, - 68, - 9, - 200, - 211, - 98, - 8, - 215, - 82, - 153, + 43, + 17, + 165, + 127, + 227, + 232, + 101, + 49, + 138, + 156, + 186, + 39, + 164, + 16, 135, - 234, - 36, - 56, - 194, - 45, - 1, - 112, - 144, - 172, - 40, - 65, - 179, - 212, - 251, - 54, + 25, + 135, + 161, + 118, + 183, + 116, + 106, + 204, + 204, + 122, 166, - 234, - 111, + 197, + 156, + 71, + 201, + 192, + 123, 97, 105, 160, @@ -40440,38 +40442,38 @@ pub mod solvency_verifier { 1, 82, 127, - 20, - 237, - 54, - 48, - 18, - 201, - 235, - 39, - 186, - 71, - 158, - 160, - 48, - 253, - 100, - 103, - 233, - 161, - 244, - 232, - 109, - 120, - 9, - 127, - 59, - 55, - 167, + 7, + 17, + 115, + 219, + 23, + 145, + 73, + 156, + 223, 233, - 31, + 185, + 202, + 138, + 137, + 196, + 5, + 205, + 249, + 162, + 142, + 98, + 45, + 195, + 65, + 123, + 125, + 60, 112, - 17, - 220, + 136, + 45, + 3, + 79, 97, 105, 192, @@ -40609,14 +40611,14 @@ pub mod solvency_verifier { 21, 97, 78, - 92, + 93, 87, 97, 78, - 92, + 93, 97, 78, - 29, + 30, 86, 91, 96, @@ -40637,7 +40639,7 @@ pub mod solvency_verifier { 18, 97, 78, - 117, + 118, 87, 96, 0, @@ -40660,19 +40662,19 @@ pub mod solvency_verifier { 21, 97, 78, - 143, + 144, 87, 97, 78, - 143, + 144, 97, 78, - 29, + 30, 86, 91, 97, 78, - 162, + 163, 96, 31, 130, @@ -40686,7 +40688,7 @@ pub mod solvency_verifier { 1, 97, 78, - 51, + 52, 86, 91, 129, @@ -40703,7 +40705,7 @@ pub mod solvency_verifier { 21, 97, 78, - 183, + 184, 87, 96, 0, @@ -40751,7 +40753,7 @@ pub mod solvency_verifier { 21, 97, 78, - 231, + 232, 87, 96, 0, @@ -40774,8 +40776,8 @@ pub mod solvency_verifier { 17, 21, 97, - 78, - 255, + 79, + 0, 87, 96, 0, @@ -40795,7 +40797,7 @@ pub mod solvency_verifier { 18, 97, 79, - 19, + 20, 87, 96, 0, @@ -40812,14 +40814,14 @@ pub mod solvency_verifier { 21, 97, 79, - 39, + 40, 87, 97, 79, - 39, + 40, 97, 78, - 29, + 30, 86, 91, 129, @@ -40828,13 +40830,13 @@ pub mod solvency_verifier { 27, 97, 79, - 54, + 55, 130, 130, 1, 97, 78, - 51, + 52, 86, 91, 146, @@ -40856,7 +40858,7 @@ pub mod solvency_verifier { 21, 97, 79, - 80, + 81, 87, 96, 0, @@ -40874,7 +40876,7 @@ pub mod solvency_verifier { 21, 97, 79, - 110, + 111, 87, 134, 53, @@ -40890,7 +40892,7 @@ pub mod solvency_verifier { 144, 97, 79, - 85, + 86, 86, 91, 151, @@ -40909,7 +40911,7 @@ pub mod solvency_verifier { 21, 97, 79, - 133, + 134, 87, 96, 0, @@ -40919,14 +40921,14 @@ pub mod solvency_verifier { 80, 97, 79, - 146, + 147, 133, 130, 134, 1, 97, 78, - 100, + 101, 86, 91, 145, @@ -41013,38 +41015,38 @@ pub mod solvency_verifier { 34, 18, 32, - 137, - 255, - 9, - 9, - 168, - 255, - 197, - 49, - 162, - 137, - 198, - 232, - 147, - 24, - 198, - 22, - 46, + 250, + 211, + 110, + 116, + 126, + 100, + 150, + 73, + 218, + 88, + 178, + 114, 190, - 252, - 62, - 65, - 155, - 177, - 115, - 245, - 43, - 154, - 6, - 159, - 129, - 202, - 132, + 104, + 158, + 148, + 192, + 225, + 150, + 168, + 23, + 41, + 86, + 119, + 112, + 19, + 25, + 95, + 88, + 149, + 153, + 135, 100, 115, 111, diff --git a/backend/src/contracts/generated/summa_contract.rs b/backend/src/contracts/generated/summa_contract.rs index a2611ad0..7b33fdba 100644 --- a/backend/src/contracts/generated/summa_contract.rs +++ b/backend/src/contracts/generated/summa_contract.rs @@ -5849,38 +5849,38 @@ pub mod summa { 34, 18, 32, - 88, - 146, - 131, - 59, - 174, - 223, - 242, - 144, - 138, - 100, - 45, - 198, - 10, - 206, - 116, - 29, - 127, - 77, - 96, - 226, - 162, - 73, - 88, - 233, - 239, - 29, - 141, - 182, - 122, - 141, 243, - 178, + 47, + 132, + 14, + 221, + 200, + 12, + 236, + 130, + 235, + 143, + 5, + 195, + 78, + 49, + 31, + 44, + 9, + 34, + 218, + 112, + 185, + 0, + 232, + 151, + 24, + 130, + 217, + 64, + 229, + 4, + 73, 100, 115, 111, @@ -11441,38 +11441,38 @@ pub mod summa { 34, 18, 32, - 88, - 146, - 131, - 59, - 174, - 223, - 242, - 144, - 138, - 100, - 45, - 198, - 10, - 206, - 116, - 29, - 127, - 77, - 96, - 226, - 162, - 73, - 88, - 233, - 239, - 29, - 141, - 182, - 122, - 141, 243, - 178, + 47, + 132, + 14, + 221, + 200, + 12, + 236, + 130, + 235, + 143, + 5, + 195, + 78, + 49, + 31, + 44, + 9, + 34, + 218, + 112, + 185, + 0, + 232, + 151, + 24, + 130, + 217, + 64, + 229, + 4, + 73, 100, 115, 111, diff --git a/contracts/src/InclusionVerifier.sol b/contracts/src/InclusionVerifier.sol index aca9729e..0a279148 100644 --- a/contracts/src/InclusionVerifier.sol +++ b/contracts/src/InclusionVerifier.sol @@ -8,4 +8,4 @@ ) public view returns (bool) { bool success = true; bytes32[902] memory transcript; - assembly { let f_p := 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 let f_q := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 function validate_ec_point(x, y) -> valid { { let x_lt_p := lt(x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let y_lt_p := lt(y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) valid := and(x_lt_p, y_lt_p) } { let y_square := mulmod(y, y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_square := mulmod(x, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube := mulmod(x_square, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube_plus_3 := addmod(x_cube, 3, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let is_affine := eq(x_cube_plus_3, y_square) valid := and(valid, is_affine) } } mstore(add(transcript, 0x20), mod(mload(add(pubInputs, 0x20)), f_q))mstore(add(transcript, 0x40), mod(mload(add(pubInputs, 0x40)), f_q))mstore(add(transcript, 0x0), 17529190814129643618827022425812408993103566606845457031195635551857697656486) { let x := mload(add(proof, 0x20)) mstore(add(transcript, 0x60), x) let y := mload(add(proof, 0x40)) mstore(add(transcript, 0x80), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x60)) mstore(add(transcript, 0xa0), x) let y := mload(add(proof, 0x80)) mstore(add(transcript, 0xc0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0xa0)) mstore(add(transcript, 0xe0), x) let y := mload(add(proof, 0xc0)) mstore(add(transcript, 0x100), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x120), keccak256(add(transcript, 0x0), 288)){ let hash := mload(add(transcript, 0x120)) mstore(add(transcript, 0x140), mod(hash, f_q)) mstore(add(transcript, 0x160), hash) } { let x := mload(add(proof, 0xe0)) mstore(add(transcript, 0x180), x) let y := mload(add(proof, 0x100)) mstore(add(transcript, 0x1a0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x120)) mstore(add(transcript, 0x1c0), x) let y := mload(add(proof, 0x140)) mstore(add(transcript, 0x1e0), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x200), keccak256(add(transcript, 0x160), 160)){ let hash := mload(add(transcript, 0x200)) mstore(add(transcript, 0x220), mod(hash, f_q)) mstore(add(transcript, 0x240), hash) }mstore8(add(transcript, 0x260), 1)mstore(add(transcript, 0x260), keccak256(add(transcript, 0x240), 33)){ let hash := mload(add(transcript, 0x260)) mstore(add(transcript, 0x280), mod(hash, f_q)) mstore(add(transcript, 0x2a0), hash) } { let x := mload(add(proof, 0x160)) mstore(add(transcript, 0x2c0), x) let y := mload(add(proof, 0x180)) mstore(add(transcript, 0x2e0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x1a0)) mstore(add(transcript, 0x300), x) let y := mload(add(proof, 0x1c0)) mstore(add(transcript, 0x320), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x1e0)) mstore(add(transcript, 0x340), x) let y := mload(add(proof, 0x200)) mstore(add(transcript, 0x360), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x220)) mstore(add(transcript, 0x380), x) let y := mload(add(proof, 0x240)) mstore(add(transcript, 0x3a0), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x3c0), keccak256(add(transcript, 0x2a0), 288)){ let hash := mload(add(transcript, 0x3c0)) mstore(add(transcript, 0x3e0), mod(hash, f_q)) mstore(add(transcript, 0x400), hash) } { let x := mload(add(proof, 0x260)) mstore(add(transcript, 0x420), x) let y := mload(add(proof, 0x280)) mstore(add(transcript, 0x440), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x2a0)) mstore(add(transcript, 0x460), x) let y := mload(add(proof, 0x2c0)) mstore(add(transcript, 0x480), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x2e0)) mstore(add(transcript, 0x4a0), x) let y := mload(add(proof, 0x300)) mstore(add(transcript, 0x4c0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x320)) mstore(add(transcript, 0x4e0), x) let y := mload(add(proof, 0x340)) mstore(add(transcript, 0x500), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x360)) mstore(add(transcript, 0x520), x) let y := mload(add(proof, 0x380)) mstore(add(transcript, 0x540), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x560), keccak256(add(transcript, 0x400), 352)){ let hash := mload(add(transcript, 0x560)) mstore(add(transcript, 0x580), mod(hash, f_q)) mstore(add(transcript, 0x5a0), hash) }mstore(add(transcript, 0x5c0), mod(mload(add(proof, 0x3a0)), f_q))mstore(add(transcript, 0x5e0), mod(mload(add(proof, 0x3c0)), f_q))mstore(add(transcript, 0x600), mod(mload(add(proof, 0x3e0)), f_q))mstore(add(transcript, 0x620), mod(mload(add(proof, 0x400)), f_q))mstore(add(transcript, 0x640), mod(mload(add(proof, 0x420)), f_q))mstore(add(transcript, 0x660), mod(mload(add(proof, 0x440)), f_q))mstore(add(transcript, 0x680), mod(mload(add(proof, 0x460)), f_q))mstore(add(transcript, 0x6a0), mod(mload(add(proof, 0x480)), f_q))mstore(add(transcript, 0x6c0), mod(mload(add(proof, 0x4a0)), f_q))mstore(add(transcript, 0x6e0), mod(mload(add(proof, 0x4c0)), f_q))mstore(add(transcript, 0x700), mod(mload(add(proof, 0x4e0)), f_q))mstore(add(transcript, 0x720), mod(mload(add(proof, 0x500)), f_q))mstore(add(transcript, 0x740), mod(mload(add(proof, 0x520)), f_q))mstore(add(transcript, 0x760), mod(mload(add(proof, 0x540)), f_q))mstore(add(transcript, 0x780), mod(mload(add(proof, 0x560)), f_q))mstore(add(transcript, 0x7a0), mod(mload(add(proof, 0x580)), f_q))mstore(add(transcript, 0x7c0), mod(mload(add(proof, 0x5a0)), f_q))mstore(add(transcript, 0x7e0), mod(mload(add(proof, 0x5c0)), f_q))mstore(add(transcript, 0x800), mod(mload(add(proof, 0x5e0)), f_q))mstore(add(transcript, 0x820), mod(mload(add(proof, 0x600)), f_q))mstore(add(transcript, 0x840), mod(mload(add(proof, 0x620)), f_q))mstore(add(transcript, 0x860), mod(mload(add(proof, 0x640)), f_q))mstore(add(transcript, 0x880), mod(mload(add(proof, 0x660)), f_q))mstore(add(transcript, 0x8a0), mod(mload(add(proof, 0x680)), f_q))mstore(add(transcript, 0x8c0), mod(mload(add(proof, 0x6a0)), f_q))mstore(add(transcript, 0x8e0), mod(mload(add(proof, 0x6c0)), f_q))mstore(add(transcript, 0x900), mod(mload(add(proof, 0x6e0)), f_q))mstore(add(transcript, 0x920), mod(mload(add(proof, 0x700)), f_q))mstore(add(transcript, 0x940), mod(mload(add(proof, 0x720)), f_q))mstore(add(transcript, 0x960), mod(mload(add(proof, 0x740)), f_q))mstore(add(transcript, 0x980), mod(mload(add(proof, 0x760)), f_q))mstore(add(transcript, 0x9a0), mod(mload(add(proof, 0x780)), f_q))mstore(add(transcript, 0x9c0), mod(mload(add(proof, 0x7a0)), f_q))mstore(add(transcript, 0x9e0), mod(mload(add(proof, 0x7c0)), f_q))mstore(add(transcript, 0xa00), mod(mload(add(proof, 0x7e0)), f_q))mstore(add(transcript, 0xa20), keccak256(add(transcript, 0x5a0), 1152)){ let hash := mload(add(transcript, 0xa20)) mstore(add(transcript, 0xa40), mod(hash, f_q)) mstore(add(transcript, 0xa60), hash) }mstore8(add(transcript, 0xa80), 1)mstore(add(transcript, 0xa80), keccak256(add(transcript, 0xa60), 33)){ let hash := mload(add(transcript, 0xa80)) mstore(add(transcript, 0xaa0), mod(hash, f_q)) mstore(add(transcript, 0xac0), hash) } { let x := mload(add(proof, 0x800)) mstore(add(transcript, 0xae0), x) let y := mload(add(proof, 0x820)) mstore(add(transcript, 0xb00), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0xb20), keccak256(add(transcript, 0xac0), 96)){ let hash := mload(add(transcript, 0xb20)) mstore(add(transcript, 0xb40), mod(hash, f_q)) mstore(add(transcript, 0xb60), hash) } { let x := mload(add(proof, 0x840)) mstore(add(transcript, 0xb80), x) let y := mload(add(proof, 0x860)) mstore(add(transcript, 0xba0), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0xbc0), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x580)), f_q))mstore(add(transcript, 0xbe0), mulmod(mload(add(transcript, 0xbc0)), mload(add(transcript, 0xbc0)), f_q))mstore(add(transcript, 0xc00), mulmod(mload(add(transcript, 0xbe0)), mload(add(transcript, 0xbe0)), f_q))mstore(add(transcript, 0xc20), mulmod(mload(add(transcript, 0xc00)), mload(add(transcript, 0xc00)), f_q))mstore(add(transcript, 0xc40), mulmod(mload(add(transcript, 0xc20)), mload(add(transcript, 0xc20)), f_q))mstore(add(transcript, 0xc60), mulmod(mload(add(transcript, 0xc40)), mload(add(transcript, 0xc40)), f_q))mstore(add(transcript, 0xc80), mulmod(mload(add(transcript, 0xc60)), mload(add(transcript, 0xc60)), f_q))mstore(add(transcript, 0xca0), mulmod(mload(add(transcript, 0xc80)), mload(add(transcript, 0xc80)), f_q))mstore(add(transcript, 0xcc0), mulmod(mload(add(transcript, 0xca0)), mload(add(transcript, 0xca0)), f_q))mstore(add(transcript, 0xce0), mulmod(mload(add(transcript, 0xcc0)), mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0xd00), mulmod(mload(add(transcript, 0xce0)), mload(add(transcript, 0xce0)), f_q))mstore(add(transcript, 0xd20), addmod(mload(add(transcript, 0xd00)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))mstore(add(transcript, 0xd40), mulmod(mload(add(transcript, 0xd20)), 21877555253249509951141793242451973684696534144361143701928820297812832026625, f_q))mstore(add(transcript, 0xd60), mulmod(mload(add(transcript, 0xd40)), 15699029810934084314820646074566828280617789951162923449200398535581206172418, f_q))mstore(add(transcript, 0xd80), addmod(mload(add(transcript, 0x580)), 6189213060905190907425759670690446807930574449253110894497805650994602323199, f_q))mstore(add(transcript, 0xda0), mulmod(mload(add(transcript, 0xd40)), 16553167948716468074998850291160946772606011499093267774599468837293218566225, f_q))mstore(add(transcript, 0xdc0), addmod(mload(add(transcript, 0x580)), 5335074923122807147247555454096328315942352901322766569098735349282589929392, f_q))mstore(add(transcript, 0xde0), mulmod(mload(add(transcript, 0xd40)), 4260969412351770314333984243767775737437927068151180798236715529158398853173, f_q))mstore(add(transcript, 0xe00), addmod(mload(add(transcript, 0x580)), 17627273459487504907912421501489499351110437332264853545461488657417409642444, f_q))mstore(add(transcript, 0xe20), mulmod(mload(add(transcript, 0xd40)), 18302882236472339419631414285403968768409802182737928837767912484847322191909, f_q))mstore(add(transcript, 0xe40), addmod(mload(add(transcript, 0x580)), 3585360635366935802614991459853306320138562217678105505930291701728486303708, f_q))mstore(add(transcript, 0xe60), mulmod(mload(add(transcript, 0xd40)), 4925592601992654644734291590386747644864797672605745962807370354577123815907, f_q))mstore(add(transcript, 0xe80), addmod(mload(add(transcript, 0x580)), 16962650269846620577512114154870527443683566727810288380890833831998684679710, f_q))mstore(add(transcript, 0xea0), mulmod(mload(add(transcript, 0xd40)), 19444693496467964793333684482470811869395409953158764080291550423779334624794, f_q))mstore(add(transcript, 0xec0), addmod(mload(add(transcript, 0x580)), 2443549375371310428912721262786463219152954447257270263406653762796473870823, f_q))mstore(add(transcript, 0xee0), mulmod(mload(add(transcript, 0xd40)), 1, f_q))mstore(add(transcript, 0xf00), addmod(mload(add(transcript, 0x580)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))mstore(add(transcript, 0xf20), mulmod(mload(add(transcript, 0xd40)), 9396103202274256930945606623206526900461945684265495839012435492634193195103, f_q))mstore(add(transcript, 0xf40), addmod(mload(add(transcript, 0x580)), 12492139669565018291300799122050748188086418716150538504685768693941615300514, f_q)){ let prod := mload(add(transcript, 0xd80)) prod := mulmod(mload(add(transcript, 0xdc0)), prod, f_q) mstore(add(transcript, 0xf60), prod) prod := mulmod(mload(add(transcript, 0xe00)), prod, f_q) mstore(add(transcript, 0xf80), prod) prod := mulmod(mload(add(transcript, 0xe40)), prod, f_q) mstore(add(transcript, 0xfa0), prod) prod := mulmod(mload(add(transcript, 0xe80)), prod, f_q) mstore(add(transcript, 0xfc0), prod) prod := mulmod(mload(add(transcript, 0xec0)), prod, f_q) mstore(add(transcript, 0xfe0), prod) prod := mulmod(mload(add(transcript, 0xf00)), prod, f_q) mstore(add(transcript, 0x1000), prod) prod := mulmod(mload(add(transcript, 0xf40)), prod, f_q) mstore(add(transcript, 0x1020), prod) prod := mulmod(mload(add(transcript, 0xd20)), prod, f_q) mstore(add(transcript, 0x1040), prod) }mstore(add(transcript, 0x1080), 32)mstore(add(transcript, 0x10a0), 32)mstore(add(transcript, 0x10c0), 32)mstore(add(transcript, 0x10e0), mload(add(transcript, 0x1040)))mstore(add(transcript, 0x1100), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x1120), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x1080), 0xc0, add(transcript, 0x1060), 0x20), 1), success){ let inv := mload(add(transcript, 0x1060)) let v v := mload(add(transcript, 0xd20)) mstore(add(transcript, 0xd20), mulmod(mload(add(transcript, 0x1020)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xf40)) mstore(add(transcript, 0xf40), mulmod(mload(add(transcript, 0x1000)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xf00)) mstore(add(transcript, 0xf00), mulmod(mload(add(transcript, 0xfe0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xec0)) mstore(add(transcript, 0xec0), mulmod(mload(add(transcript, 0xfc0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe80)) mstore(add(transcript, 0xe80), mulmod(mload(add(transcript, 0xfa0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe40)) mstore(add(transcript, 0xe40), mulmod(mload(add(transcript, 0xf80)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe00)) mstore(add(transcript, 0xe00), mulmod(mload(add(transcript, 0xf60)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xdc0)) mstore(add(transcript, 0xdc0), mulmod(mload(add(transcript, 0xd80)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0xd80), inv) }mstore(add(transcript, 0x1140), mulmod(mload(add(transcript, 0xd60)), mload(add(transcript, 0xd80)), f_q))mstore(add(transcript, 0x1160), mulmod(mload(add(transcript, 0xda0)), mload(add(transcript, 0xdc0)), f_q))mstore(add(transcript, 0x1180), mulmod(mload(add(transcript, 0xde0)), mload(add(transcript, 0xe00)), f_q))mstore(add(transcript, 0x11a0), mulmod(mload(add(transcript, 0xe20)), mload(add(transcript, 0xe40)), f_q))mstore(add(transcript, 0x11c0), mulmod(mload(add(transcript, 0xe60)), mload(add(transcript, 0xe80)), f_q))mstore(add(transcript, 0x11e0), mulmod(mload(add(transcript, 0xea0)), mload(add(transcript, 0xec0)), f_q))mstore(add(transcript, 0x1200), mulmod(mload(add(transcript, 0xee0)), mload(add(transcript, 0xf00)), f_q))mstore(add(transcript, 0x1220), mulmod(mload(add(transcript, 0xf20)), mload(add(transcript, 0xf40)), f_q)){ let result := mulmod(mload(add(transcript, 0x1200)), mload(add(transcript, 0x20)), f_q)result := addmod(mulmod(mload(add(transcript, 0x1220)), mload(add(transcript, 0x40)), f_q), result, f_q)mstore(add(transcript, 0x1240), result) }mstore(add(transcript, 0x1260), addmod(mload(add(transcript, 0x5c0)), mload(add(transcript, 0x6e0)), f_q))mstore(add(transcript, 0x1280), mulmod(mload(add(transcript, 0x1260)), mload(add(transcript, 0x1260)), f_q))mstore(add(transcript, 0x12a0), mulmod(mload(add(transcript, 0x1280)), mload(add(transcript, 0x1280)), f_q))mstore(add(transcript, 0x12c0), mulmod(mload(add(transcript, 0x1260)), mload(add(transcript, 0x12a0)), f_q))mstore(add(transcript, 0x12e0), mulmod(mload(add(transcript, 0x12c0)), 2910766817845651019878574839501801340070030115151021261302834310722729507541, f_q))mstore(add(transcript, 0x1300), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x700)), f_q))mstore(add(transcript, 0x1320), mulmod(mload(add(transcript, 0x1300)), mload(add(transcript, 0x1300)), f_q))mstore(add(transcript, 0x1340), mulmod(mload(add(transcript, 0x1320)), mload(add(transcript, 0x1320)), f_q))mstore(add(transcript, 0x1360), mulmod(mload(add(transcript, 0x1300)), mload(add(transcript, 0x1340)), f_q))mstore(add(transcript, 0x1380), mulmod(mload(add(transcript, 0x1360)), 19727366863391167538122140361473584127147630672623100827934084310230022599144, f_q))mstore(add(transcript, 0x13a0), addmod(mload(add(transcript, 0x12e0)), mload(add(transcript, 0x1380)), f_q))mstore(add(transcript, 0x13c0), addmod(mload(add(transcript, 0x13a0)), sub(f_q, mload(add(transcript, 0x600))), f_q))mstore(add(transcript, 0x13e0), mulmod(mload(add(transcript, 0x13c0)), mload(add(transcript, 0x780)), f_q))mstore(add(transcript, 0x1400), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x13e0)), f_q))mstore(add(transcript, 0x1420), mulmod(mload(add(transcript, 0x12c0)), 5776684794125549462448597414050232243778680302179439492664047328281728356345, f_q))mstore(add(transcript, 0x1440), mulmod(mload(add(transcript, 0x1360)), 8348174920934122550483593999453880006756108121341067172388445916328941978568, f_q))mstore(add(transcript, 0x1460), addmod(mload(add(transcript, 0x1420)), mload(add(transcript, 0x1440)), f_q))mstore(add(transcript, 0x1480), addmod(mload(add(transcript, 0x1460)), sub(f_q, mload(add(transcript, 0x620))), f_q))mstore(add(transcript, 0x14a0), mulmod(mload(add(transcript, 0x1480)), mload(add(transcript, 0x780)), f_q))mstore(add(transcript, 0x14c0), addmod(mload(add(transcript, 0x1400)), mload(add(transcript, 0x14a0)), f_q))mstore(add(transcript, 0x14e0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x14c0)), f_q))mstore(add(transcript, 0x1500), addmod(mload(add(transcript, 0x12c0)), sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x1520), mulmod(mload(add(transcript, 0x1500)), mload(add(transcript, 0x7a0)), f_q))mstore(add(transcript, 0x1540), addmod(mload(add(transcript, 0x14e0)), mload(add(transcript, 0x1520)), f_q))mstore(add(transcript, 0x1560), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1540)), f_q))mstore(add(transcript, 0x1580), mulmod(mload(add(transcript, 0x640)), 2910766817845651019878574839501801340070030115151021261302834310722729507541, f_q))mstore(add(transcript, 0x15a0), mulmod(mload(add(transcript, 0x1300)), 19727366863391167538122140361473584127147630672623100827934084310230022599144, f_q))mstore(add(transcript, 0x15c0), addmod(mload(add(transcript, 0x1580)), mload(add(transcript, 0x15a0)), f_q))mstore(add(transcript, 0x15e0), addmod(mload(add(transcript, 0x15c0)), mload(add(transcript, 0x6a0)), f_q))mstore(add(transcript, 0x1600), mulmod(mload(add(transcript, 0x15e0)), mload(add(transcript, 0x15e0)), f_q))mstore(add(transcript, 0x1620), mulmod(mload(add(transcript, 0x1600)), mload(add(transcript, 0x1600)), f_q))mstore(add(transcript, 0x1640), mulmod(mload(add(transcript, 0x15e0)), mload(add(transcript, 0x1620)), f_q))mstore(add(transcript, 0x1660), mulmod(mload(add(transcript, 0x600)), 8897705321156975119607866206188469715432233408805434913352778521345836531302, f_q))mstore(add(transcript, 0x1680), mulmod(mload(add(transcript, 0x620)), 13897810991298242824030978581179475767377101082166056046492926701399149797630, f_q))mstore(add(transcript, 0x16a0), addmod(mload(add(transcript, 0x1660)), mload(add(transcript, 0x1680)), f_q))mstore(add(transcript, 0x16c0), addmod(mload(add(transcript, 0x1640)), sub(f_q, mload(add(transcript, 0x16a0))), f_q))mstore(add(transcript, 0x16e0), mulmod(mload(add(transcript, 0x16c0)), mload(add(transcript, 0x7a0)), f_q))mstore(add(transcript, 0x1700), addmod(mload(add(transcript, 0x1560)), mload(add(transcript, 0x16e0)), f_q))mstore(add(transcript, 0x1720), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1700)), f_q))mstore(add(transcript, 0x1740), mulmod(mload(add(transcript, 0x640)), 5776684794125549462448597414050232243778680302179439492664047328281728356345, f_q))mstore(add(transcript, 0x1760), mulmod(mload(add(transcript, 0x1300)), 8348174920934122550483593999453880006756108121341067172388445916328941978568, f_q))mstore(add(transcript, 0x1780), addmod(mload(add(transcript, 0x1740)), mload(add(transcript, 0x1760)), f_q))mstore(add(transcript, 0x17a0), addmod(mload(add(transcript, 0x1780)), mload(add(transcript, 0x6c0)), f_q))mstore(add(transcript, 0x17c0), mulmod(mload(add(transcript, 0x600)), 7127083008168878795310303301757642617203533252990949589494537404444738046722, f_q))mstore(add(transcript, 0x17e0), mulmod(mload(add(transcript, 0x620)), 10251091711782631878897995303436082826711938358699127319815611151510940403902, f_q))mstore(add(transcript, 0x1800), addmod(mload(add(transcript, 0x17c0)), mload(add(transcript, 0x17e0)), f_q))mstore(add(transcript, 0x1820), addmod(mload(add(transcript, 0x17a0)), sub(f_q, mload(add(transcript, 0x1800))), f_q))mstore(add(transcript, 0x1840), mulmod(mload(add(transcript, 0x1820)), mload(add(transcript, 0x7a0)), f_q))mstore(add(transcript, 0x1860), addmod(mload(add(transcript, 0x1720)), mload(add(transcript, 0x1840)), f_q))mstore(add(transcript, 0x1880), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1860)), f_q))mstore(add(transcript, 0x18a0), addmod(1, sub(f_q, mload(add(transcript, 0x760))), f_q))mstore(add(transcript, 0x18c0), mulmod(mload(add(transcript, 0x18a0)), mload(add(transcript, 0x760)), f_q))mstore(add(transcript, 0x18e0), addmod(2, sub(f_q, mload(add(transcript, 0x760))), f_q))mstore(add(transcript, 0x1900), mulmod(mload(add(transcript, 0x18e0)), mload(add(transcript, 0x18c0)), f_q))mstore(add(transcript, 0x1920), addmod(4, sub(f_q, mload(add(transcript, 0x760))), f_q))mstore(add(transcript, 0x1940), mulmod(mload(add(transcript, 0x1920)), mload(add(transcript, 0x1900)), f_q))mstore(add(transcript, 0x1960), addmod(mload(add(transcript, 0x680)), mload(add(transcript, 0x5c0)), f_q))mstore(add(transcript, 0x1980), addmod(mload(add(transcript, 0x1960)), sub(f_q, mload(add(transcript, 0x600))), f_q))mstore(add(transcript, 0x19a0), mulmod(mload(add(transcript, 0x1980)), mload(add(transcript, 0x1940)), f_q))mstore(add(transcript, 0x19c0), addmod(mload(add(transcript, 0x1880)), mload(add(transcript, 0x19a0)), f_q))mstore(add(transcript, 0x19e0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x19c0)), f_q))mstore(add(transcript, 0x1a00), addmod(mload(add(transcript, 0x660)), sub(f_q, mload(add(transcript, 0x620))), f_q))mstore(add(transcript, 0x1a20), mulmod(mload(add(transcript, 0x1a00)), mload(add(transcript, 0x1940)), f_q))mstore(add(transcript, 0x1a40), addmod(mload(add(transcript, 0x19e0)), mload(add(transcript, 0x1a20)), f_q))mstore(add(transcript, 0x1a60), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1a40)), f_q))mstore(add(transcript, 0x1a80), mulmod(mload(add(transcript, 0x13c0)), mload(add(transcript, 0x7c0)), f_q))mstore(add(transcript, 0x1aa0), addmod(mload(add(transcript, 0x1a60)), mload(add(transcript, 0x1a80)), f_q))mstore(add(transcript, 0x1ac0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1aa0)), f_q))mstore(add(transcript, 0x1ae0), mulmod(mload(add(transcript, 0x1480)), mload(add(transcript, 0x7c0)), f_q))mstore(add(transcript, 0x1b00), addmod(mload(add(transcript, 0x1ac0)), mload(add(transcript, 0x1ae0)), f_q))mstore(add(transcript, 0x1b20), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1b00)), f_q))mstore(add(transcript, 0x1b40), mulmod(mload(add(transcript, 0x1500)), mload(add(transcript, 0x7e0)), f_q))mstore(add(transcript, 0x1b60), addmod(mload(add(transcript, 0x1b20)), mload(add(transcript, 0x1b40)), f_q))mstore(add(transcript, 0x1b80), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1b60)), f_q))mstore(add(transcript, 0x1ba0), mulmod(mload(add(transcript, 0x16c0)), mload(add(transcript, 0x7e0)), f_q))mstore(add(transcript, 0x1bc0), addmod(mload(add(transcript, 0x1b80)), mload(add(transcript, 0x1ba0)), f_q))mstore(add(transcript, 0x1be0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1bc0)), f_q))mstore(add(transcript, 0x1c00), mulmod(mload(add(transcript, 0x1820)), mload(add(transcript, 0x7e0)), f_q))mstore(add(transcript, 0x1c20), addmod(mload(add(transcript, 0x1be0)), mload(add(transcript, 0x1c00)), f_q))mstore(add(transcript, 0x1c40), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1c20)), f_q))mstore(add(transcript, 0x1c60), addmod(3, sub(f_q, mload(add(transcript, 0x760))), f_q))mstore(add(transcript, 0x1c80), mulmod(mload(add(transcript, 0x1c60)), mload(add(transcript, 0x1900)), f_q))mstore(add(transcript, 0x1ca0), mulmod(mload(add(transcript, 0x1980)), mload(add(transcript, 0x1c80)), f_q))mstore(add(transcript, 0x1cc0), addmod(mload(add(transcript, 0x1c40)), mload(add(transcript, 0x1ca0)), f_q))mstore(add(transcript, 0x1ce0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1cc0)), f_q))mstore(add(transcript, 0x1d00), mulmod(mload(add(transcript, 0x1a00)), mload(add(transcript, 0x1c80)), f_q))mstore(add(transcript, 0x1d20), addmod(mload(add(transcript, 0x1ce0)), mload(add(transcript, 0x1d00)), f_q))mstore(add(transcript, 0x1d40), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1d20)), f_q))mstore(add(transcript, 0x1d60), mulmod(mload(add(transcript, 0x18e0)), mload(add(transcript, 0x760)), f_q))mstore(add(transcript, 0x1d80), mulmod(mload(add(transcript, 0x1c60)), mload(add(transcript, 0x1d60)), f_q))mstore(add(transcript, 0x1da0), mulmod(mload(add(transcript, 0x1920)), mload(add(transcript, 0x1d80)), f_q))mstore(add(transcript, 0x1dc0), mulmod(mload(add(transcript, 0x640)), mload(add(transcript, 0x1da0)), f_q))mstore(add(transcript, 0x1de0), addmod(1, sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x1e00), mulmod(mload(add(transcript, 0x1de0)), mload(add(transcript, 0x1dc0)), f_q))mstore(add(transcript, 0x1e20), addmod(mload(add(transcript, 0x1d40)), mload(add(transcript, 0x1e00)), f_q))mstore(add(transcript, 0x1e40), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1e20)), f_q))mstore(add(transcript, 0x1e60), mulmod(2, mload(add(transcript, 0x640)), f_q))mstore(add(transcript, 0x1e80), addmod(mload(add(transcript, 0x5e0)), sub(f_q, mload(add(transcript, 0x5c0))), f_q))mstore(add(transcript, 0x1ea0), mulmod(mload(add(transcript, 0x1e80)), mload(add(transcript, 0x1e60)), f_q))mstore(add(transcript, 0x1ec0), addmod(mload(add(transcript, 0x600)), sub(f_q, mload(add(transcript, 0x5c0))), f_q))mstore(add(transcript, 0x1ee0), addmod(mload(add(transcript, 0x1ea0)), sub(f_q, mload(add(transcript, 0x1ec0))), f_q))mstore(add(transcript, 0x1f00), addmod(mload(add(transcript, 0x5e0)), sub(f_q, mload(add(transcript, 0x620))), f_q))mstore(add(transcript, 0x1f20), addmod(mload(add(transcript, 0x1ee0)), sub(f_q, mload(add(transcript, 0x1f00))), f_q))mstore(add(transcript, 0x1f40), mulmod(mload(add(transcript, 0x1f20)), mload(add(transcript, 0x1da0)), f_q))mstore(add(transcript, 0x1f60), addmod(mload(add(transcript, 0x1e40)), mload(add(transcript, 0x1f40)), f_q))mstore(add(transcript, 0x1f80), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1f60)), f_q))mstore(add(transcript, 0x1fa0), mulmod(mload(add(transcript, 0x1c60)), mload(add(transcript, 0x18c0)), f_q))mstore(add(transcript, 0x1fc0), mulmod(mload(add(transcript, 0x1920)), mload(add(transcript, 0x1fa0)), f_q))mstore(add(transcript, 0x1fe0), addmod(mload(add(transcript, 0x5c0)), mload(add(transcript, 0x5e0)), f_q))mstore(add(transcript, 0x2000), addmod(mload(add(transcript, 0x1fe0)), sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x2020), mulmod(mload(add(transcript, 0x2000)), mload(add(transcript, 0x1fc0)), f_q))mstore(add(transcript, 0x2040), addmod(mload(add(transcript, 0x1f80)), mload(add(transcript, 0x2020)), f_q))mstore(add(transcript, 0x2060), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2040)), f_q))mstore(add(transcript, 0x2080), addmod(mload(add(transcript, 0x2060)), mload(add(transcript, 0x2020)), f_q))mstore(add(transcript, 0x20a0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2080)), f_q))mstore(add(transcript, 0x20c0), addmod(1, sub(f_q, mload(add(transcript, 0x8e0))), f_q))mstore(add(transcript, 0x20e0), mulmod(mload(add(transcript, 0x20c0)), mload(add(transcript, 0x1200)), f_q))mstore(add(transcript, 0x2100), addmod(mload(add(transcript, 0x20a0)), mload(add(transcript, 0x20e0)), f_q))mstore(add(transcript, 0x2120), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2100)), f_q))mstore(add(transcript, 0x2140), mulmod(mload(add(transcript, 0x940)), mload(add(transcript, 0x940)), f_q))mstore(add(transcript, 0x2160), addmod(mload(add(transcript, 0x2140)), sub(f_q, mload(add(transcript, 0x940))), f_q))mstore(add(transcript, 0x2180), mulmod(mload(add(transcript, 0x2160)), mload(add(transcript, 0x1140)), f_q))mstore(add(transcript, 0x21a0), addmod(mload(add(transcript, 0x2120)), mload(add(transcript, 0x2180)), f_q))mstore(add(transcript, 0x21c0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x21a0)), f_q))mstore(add(transcript, 0x21e0), addmod(mload(add(transcript, 0x940)), sub(f_q, mload(add(transcript, 0x920))), f_q))mstore(add(transcript, 0x2200), mulmod(mload(add(transcript, 0x21e0)), mload(add(transcript, 0x1200)), f_q))mstore(add(transcript, 0x2220), addmod(mload(add(transcript, 0x21c0)), mload(add(transcript, 0x2200)), f_q))mstore(add(transcript, 0x2240), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2220)), f_q))mstore(add(transcript, 0x2260), addmod(1, sub(f_q, mload(add(transcript, 0x1140))), f_q))mstore(add(transcript, 0x2280), addmod(mload(add(transcript, 0x1160)), mload(add(transcript, 0x1180)), f_q))mstore(add(transcript, 0x22a0), addmod(mload(add(transcript, 0x2280)), mload(add(transcript, 0x11a0)), f_q))mstore(add(transcript, 0x22c0), addmod(mload(add(transcript, 0x22a0)), mload(add(transcript, 0x11c0)), f_q))mstore(add(transcript, 0x22e0), addmod(mload(add(transcript, 0x22c0)), mload(add(transcript, 0x11e0)), f_q))mstore(add(transcript, 0x2300), addmod(mload(add(transcript, 0x2260)), sub(f_q, mload(add(transcript, 0x22e0))), f_q))mstore(add(transcript, 0x2320), mulmod(mload(add(transcript, 0x820)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2340), addmod(mload(add(transcript, 0x6a0)), mload(add(transcript, 0x2320)), f_q))mstore(add(transcript, 0x2360), addmod(mload(add(transcript, 0x2340)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2380), mulmod(mload(add(transcript, 0x840)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x23a0), addmod(mload(add(transcript, 0x5c0)), mload(add(transcript, 0x2380)), f_q))mstore(add(transcript, 0x23c0), addmod(mload(add(transcript, 0x23a0)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x23e0), mulmod(mload(add(transcript, 0x23c0)), mload(add(transcript, 0x2360)), f_q))mstore(add(transcript, 0x2400), mulmod(mload(add(transcript, 0x860)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2420), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x2400)), f_q))mstore(add(transcript, 0x2440), addmod(mload(add(transcript, 0x2420)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2460), mulmod(mload(add(transcript, 0x2440)), mload(add(transcript, 0x23e0)), f_q))mstore(add(transcript, 0x2480), mulmod(mload(add(transcript, 0x880)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x24a0), addmod(mload(add(transcript, 0x6c0)), mload(add(transcript, 0x2480)), f_q))mstore(add(transcript, 0x24c0), addmod(mload(add(transcript, 0x24a0)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x24e0), mulmod(mload(add(transcript, 0x24c0)), mload(add(transcript, 0x2460)), f_q))mstore(add(transcript, 0x2500), mulmod(mload(add(transcript, 0x24e0)), mload(add(transcript, 0x900)), f_q))mstore(add(transcript, 0x2520), mulmod(1, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2540), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x2520)), f_q))mstore(add(transcript, 0x2560), addmod(mload(add(transcript, 0x6a0)), mload(add(transcript, 0x2540)), f_q))mstore(add(transcript, 0x2580), addmod(mload(add(transcript, 0x2560)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x25a0), mulmod(4131629893567559867359510883348571134090853742863529169391034518566172092834, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x25c0), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x25a0)), f_q))mstore(add(transcript, 0x25e0), addmod(mload(add(transcript, 0x5c0)), mload(add(transcript, 0x25c0)), f_q))mstore(add(transcript, 0x2600), addmod(mload(add(transcript, 0x25e0)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2620), mulmod(mload(add(transcript, 0x2600)), mload(add(transcript, 0x2580)), f_q))mstore(add(transcript, 0x2640), mulmod(8910878055287538404433155982483128285667088683464058436815641868457422632747, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2660), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x2640)), f_q))mstore(add(transcript, 0x2680), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x2660)), f_q))mstore(add(transcript, 0x26a0), addmod(mload(add(transcript, 0x2680)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x26c0), mulmod(mload(add(transcript, 0x26a0)), mload(add(transcript, 0x2620)), f_q))mstore(add(transcript, 0x26e0), mulmod(11166246659983828508719468090013646171463329086121580628794302409516816350802, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2700), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x26e0)), f_q))mstore(add(transcript, 0x2720), addmod(mload(add(transcript, 0x6c0)), mload(add(transcript, 0x2700)), f_q))mstore(add(transcript, 0x2740), addmod(mload(add(transcript, 0x2720)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2760), mulmod(mload(add(transcript, 0x2740)), mload(add(transcript, 0x26c0)), f_q))mstore(add(transcript, 0x2780), mulmod(mload(add(transcript, 0x2760)), mload(add(transcript, 0x8e0)), f_q))mstore(add(transcript, 0x27a0), addmod(mload(add(transcript, 0x2500)), sub(f_q, mload(add(transcript, 0x2780))), f_q))mstore(add(transcript, 0x27c0), mulmod(mload(add(transcript, 0x27a0)), mload(add(transcript, 0x2300)), f_q))mstore(add(transcript, 0x27e0), addmod(mload(add(transcript, 0x2240)), mload(add(transcript, 0x27c0)), f_q))mstore(add(transcript, 0x2800), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x27e0)), f_q))mstore(add(transcript, 0x2820), mulmod(mload(add(transcript, 0x8a0)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2840), addmod(mload(add(transcript, 0x640)), mload(add(transcript, 0x2820)), f_q))mstore(add(transcript, 0x2860), addmod(mload(add(transcript, 0x2840)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2880), mulmod(mload(add(transcript, 0x8c0)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x28a0), addmod(mload(add(transcript, 0x1240)), mload(add(transcript, 0x2880)), f_q))mstore(add(transcript, 0x28c0), addmod(mload(add(transcript, 0x28a0)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x28e0), mulmod(mload(add(transcript, 0x28c0)), mload(add(transcript, 0x2860)), f_q))mstore(add(transcript, 0x2900), mulmod(mload(add(transcript, 0x28e0)), mload(add(transcript, 0x960)), f_q))mstore(add(transcript, 0x2920), mulmod(284840088355319032285349970403338060113257071685626700086398481893096618818, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2940), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x2920)), f_q))mstore(add(transcript, 0x2960), addmod(mload(add(transcript, 0x640)), mload(add(transcript, 0x2940)), f_q))mstore(add(transcript, 0x2980), addmod(mload(add(transcript, 0x2960)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x29a0), mulmod(21134065618345176623193549882539580312263652408302468683943992798037078993309, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x29c0), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x29a0)), f_q))mstore(add(transcript, 0x29e0), addmod(mload(add(transcript, 0x1240)), mload(add(transcript, 0x29c0)), f_q))mstore(add(transcript, 0x2a00), addmod(mload(add(transcript, 0x29e0)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2a20), mulmod(mload(add(transcript, 0x2a00)), mload(add(transcript, 0x2980)), f_q))mstore(add(transcript, 0x2a40), mulmod(mload(add(transcript, 0x2a20)), mload(add(transcript, 0x940)), f_q))mstore(add(transcript, 0x2a60), addmod(mload(add(transcript, 0x2900)), sub(f_q, mload(add(transcript, 0x2a40))), f_q))mstore(add(transcript, 0x2a80), mulmod(mload(add(transcript, 0x2a60)), mload(add(transcript, 0x2300)), f_q))mstore(add(transcript, 0x2aa0), addmod(mload(add(transcript, 0x2800)), mload(add(transcript, 0x2a80)), f_q))mstore(add(transcript, 0x2ac0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2aa0)), f_q))mstore(add(transcript, 0x2ae0), addmod(1, sub(f_q, mload(add(transcript, 0x980))), f_q))mstore(add(transcript, 0x2b00), mulmod(mload(add(transcript, 0x2ae0)), mload(add(transcript, 0x1200)), f_q))mstore(add(transcript, 0x2b20), addmod(mload(add(transcript, 0x2ac0)), mload(add(transcript, 0x2b00)), f_q))mstore(add(transcript, 0x2b40), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2b20)), f_q))mstore(add(transcript, 0x2b60), mulmod(mload(add(transcript, 0x980)), mload(add(transcript, 0x980)), f_q))mstore(add(transcript, 0x2b80), addmod(mload(add(transcript, 0x2b60)), sub(f_q, mload(add(transcript, 0x980))), f_q))mstore(add(transcript, 0x2ba0), mulmod(mload(add(transcript, 0x2b80)), mload(add(transcript, 0x1140)), f_q))mstore(add(transcript, 0x2bc0), addmod(mload(add(transcript, 0x2b40)), mload(add(transcript, 0x2ba0)), f_q))mstore(add(transcript, 0x2be0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2bc0)), f_q))mstore(add(transcript, 0x2c00), addmod(mload(add(transcript, 0x9c0)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2c20), mulmod(mload(add(transcript, 0x2c00)), mload(add(transcript, 0x9a0)), f_q))mstore(add(transcript, 0x2c40), addmod(mload(add(transcript, 0xa00)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2c60), mulmod(mload(add(transcript, 0x2c40)), mload(add(transcript, 0x2c20)), f_q))mstore(add(transcript, 0x2c80), mulmod(256, mload(add(transcript, 0x600)), f_q))mstore(add(transcript, 0x2ca0), addmod(mload(add(transcript, 0x5c0)), sub(f_q, mload(add(transcript, 0x2c80))), f_q))mstore(add(transcript, 0x2cc0), mulmod(mload(add(transcript, 0x2ca0)), mload(add(transcript, 0x740)), f_q))mstore(add(transcript, 0x2ce0), addmod(mload(add(transcript, 0x2cc0)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2d00), mulmod(mload(add(transcript, 0x2ce0)), mload(add(transcript, 0x980)), f_q))mstore(add(transcript, 0x2d20), addmod(mload(add(transcript, 0x720)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2d40), mulmod(mload(add(transcript, 0x2d20)), mload(add(transcript, 0x2d00)), f_q))mstore(add(transcript, 0x2d60), addmod(mload(add(transcript, 0x2c60)), sub(f_q, mload(add(transcript, 0x2d40))), f_q))mstore(add(transcript, 0x2d80), mulmod(mload(add(transcript, 0x2d60)), mload(add(transcript, 0x2300)), f_q))mstore(add(transcript, 0x2da0), addmod(mload(add(transcript, 0x2be0)), mload(add(transcript, 0x2d80)), f_q))mstore(add(transcript, 0x2dc0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2da0)), f_q))mstore(add(transcript, 0x2de0), addmod(mload(add(transcript, 0x9c0)), sub(f_q, mload(add(transcript, 0xa00))), f_q))mstore(add(transcript, 0x2e00), mulmod(mload(add(transcript, 0x2de0)), mload(add(transcript, 0x1200)), f_q))mstore(add(transcript, 0x2e20), addmod(mload(add(transcript, 0x2dc0)), mload(add(transcript, 0x2e00)), f_q))mstore(add(transcript, 0x2e40), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2e20)), f_q))mstore(add(transcript, 0x2e60), mulmod(mload(add(transcript, 0x2de0)), mload(add(transcript, 0x2300)), f_q))mstore(add(transcript, 0x2e80), addmod(mload(add(transcript, 0x9c0)), sub(f_q, mload(add(transcript, 0x9e0))), f_q))mstore(add(transcript, 0x2ea0), mulmod(mload(add(transcript, 0x2e80)), mload(add(transcript, 0x2e60)), f_q))mstore(add(transcript, 0x2ec0), addmod(mload(add(transcript, 0x2e40)), mload(add(transcript, 0x2ea0)), f_q))mstore(add(transcript, 0x2ee0), mulmod(mload(add(transcript, 0xd00)), mload(add(transcript, 0xd00)), f_q))mstore(add(transcript, 0x2f00), mulmod(mload(add(transcript, 0x2ee0)), mload(add(transcript, 0xd00)), f_q))mstore(add(transcript, 0x2f20), mulmod(mload(add(transcript, 0x2f00)), mload(add(transcript, 0xd00)), f_q))mstore(add(transcript, 0x2f40), mulmod(mload(add(transcript, 0x2f20)), mload(add(transcript, 0xd00)), f_q))mstore(add(transcript, 0x2f60), mulmod(1, mload(add(transcript, 0xd00)), f_q))mstore(add(transcript, 0x2f80), mulmod(1, mload(add(transcript, 0x2ee0)), f_q))mstore(add(transcript, 0x2fa0), mulmod(1, mload(add(transcript, 0x2f00)), f_q))mstore(add(transcript, 0x2fc0), mulmod(1, mload(add(transcript, 0x2f20)), f_q))mstore(add(transcript, 0x2fe0), mulmod(mload(add(transcript, 0x2ec0)), mload(add(transcript, 0xd20)), f_q))mstore(add(transcript, 0x3000), mulmod(mload(add(transcript, 0xbc0)), mload(add(transcript, 0x580)), f_q))mstore(add(transcript, 0x3020), mulmod(mload(add(transcript, 0x580)), 1, f_q))mstore(add(transcript, 0x3040), addmod(mload(add(transcript, 0xb40)), sub(f_q, mload(add(transcript, 0x3020))), f_q))mstore(add(transcript, 0x3060), mulmod(mload(add(transcript, 0x580)), 9396103202274256930945606623206526900461945684265495839012435492634193195103, f_q))mstore(add(transcript, 0x3080), addmod(mload(add(transcript, 0xb40)), sub(f_q, mload(add(transcript, 0x3060))), f_q))mstore(add(transcript, 0x30a0), mulmod(mload(add(transcript, 0x580)), 15699029810934084314820646074566828280617789951162923449200398535581206172418, f_q))mstore(add(transcript, 0x30c0), addmod(mload(add(transcript, 0xb40)), sub(f_q, mload(add(transcript, 0x30a0))), f_q))mstore(add(transcript, 0x30e0), mulmod(mload(add(transcript, 0x580)), 19444693496467964793333684482470811869395409953158764080291550423779334624794, f_q))mstore(add(transcript, 0x3100), addmod(mload(add(transcript, 0xb40)), sub(f_q, mload(add(transcript, 0x30e0))), f_q)){ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 14935689044936328720213520384837211407239373163407808768092422456738089171339, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 6952553826902946502032885360420063681308991237008225575605781729837719324278, f_q), f_q), result, f_q)mstore(add(transcript, 0x3120), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 7540907510155698387256503820143330389809914548046512731972450943457626251574, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 17454089668527239794105182244994964593641145239866915085378986192780276655988, f_q), f_q), result, f_q)mstore(add(transcript, 0x3140), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 16765245179638222004592619476379737764479697804128512065226459610007790881832, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 6067403861988280018436561787453590745850405443026581205331008293509136248791, f_q), f_q), result, f_q)mstore(add(transcript, 0x3160), result) }mstore(add(transcript, 0x3180), mulmod(1, mload(add(transcript, 0x3040)), f_q))mstore(add(transcript, 0x31a0), mulmod(mload(add(transcript, 0x3180)), mload(add(transcript, 0x3080)), f_q))mstore(add(transcript, 0x31c0), mulmod(mload(add(transcript, 0x31a0)), mload(add(transcript, 0x3100)), f_q)){ let result := mulmod(mload(add(transcript, 0xb40)), 1, f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q), result, f_q)mstore(add(transcript, 0x31e0), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 13346277807347402051479003338644866680074640264080882830084838995653627694322, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 8541965064491873170767402406612408408473724136335151513613365190922180801295, f_q), f_q), result, f_q)mstore(add(transcript, 0x3200), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 9130318747744625055991020866335675116974647447373438669980034404542087728591, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 17654030801727560324741115319652541746559479525075366613702001578587072243451, f_q), f_q), result, f_q)mstore(add(transcript, 0x3220), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 8968217942074169282201771672973351205073655055696863512223304343263448008755, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 15489683287416706862113636648384499783884413315698913841173435408703605255719, f_q), f_q), result, f_q)mstore(add(transcript, 0x3240), result) }mstore(add(transcript, 0x3260), mulmod(mload(add(transcript, 0x31a0)), mload(add(transcript, 0x30c0)), f_q)){ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0x580)), 12492139669565018291300799122050748188086418716150538504685768693941615300515, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0x580)), 9396103202274256930945606623206526900461945684265495839012435492634193195102, f_q), f_q), result, f_q)mstore(add(transcript, 0x3280), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0x580)), 9396103202274256930945606623206526900461945684265495839012435492634193195102, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0x580)), 11903785986312266406077180662327481479585495405112251348319099480321708373219, f_q), f_q), result, f_q)mstore(add(transcript, 0x32a0), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0x580)), 2443549375371310428912721262786463219152954447257270263406653762796473870824, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0x580)), 19444693496467964793333684482470811869395409953158764080291550423779334624793, f_q), f_q), result, f_q)mstore(add(transcript, 0x32c0), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0x580)), 19444693496467964793333684482470811869395409953158764080291550423779334624793, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0x580)), 14519100894475310148599392892084064224530612280553018117484180069202210808887, f_q), f_q), result, f_q)mstore(add(transcript, 0x32e0), result) }mstore(add(transcript, 0x3300), mulmod(mload(add(transcript, 0x3180)), mload(add(transcript, 0x3100)), f_q)){ let prod := mload(add(transcript, 0x3120)) prod := mulmod(mload(add(transcript, 0x3140)), prod, f_q) mstore(add(transcript, 0x3320), prod) prod := mulmod(mload(add(transcript, 0x3160)), prod, f_q) mstore(add(transcript, 0x3340), prod) prod := mulmod(mload(add(transcript, 0x31e0)), prod, f_q) mstore(add(transcript, 0x3360), prod) prod := mulmod(mload(add(transcript, 0x3180)), prod, f_q) mstore(add(transcript, 0x3380), prod) prod := mulmod(mload(add(transcript, 0x3200)), prod, f_q) mstore(add(transcript, 0x33a0), prod) prod := mulmod(mload(add(transcript, 0x3220)), prod, f_q) mstore(add(transcript, 0x33c0), prod) prod := mulmod(mload(add(transcript, 0x3240)), prod, f_q) mstore(add(transcript, 0x33e0), prod) prod := mulmod(mload(add(transcript, 0x3260)), prod, f_q) mstore(add(transcript, 0x3400), prod) prod := mulmod(mload(add(transcript, 0x3280)), prod, f_q) mstore(add(transcript, 0x3420), prod) prod := mulmod(mload(add(transcript, 0x32a0)), prod, f_q) mstore(add(transcript, 0x3440), prod) prod := mulmod(mload(add(transcript, 0x31a0)), prod, f_q) mstore(add(transcript, 0x3460), prod) prod := mulmod(mload(add(transcript, 0x32c0)), prod, f_q) mstore(add(transcript, 0x3480), prod) prod := mulmod(mload(add(transcript, 0x32e0)), prod, f_q) mstore(add(transcript, 0x34a0), prod) prod := mulmod(mload(add(transcript, 0x3300)), prod, f_q) mstore(add(transcript, 0x34c0), prod) }mstore(add(transcript, 0x3500), 32)mstore(add(transcript, 0x3520), 32)mstore(add(transcript, 0x3540), 32)mstore(add(transcript, 0x3560), mload(add(transcript, 0x34c0)))mstore(add(transcript, 0x3580), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x35a0), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x3500), 0xc0, add(transcript, 0x34e0), 0x20), 1), success){ let inv := mload(add(transcript, 0x34e0)) let v v := mload(add(transcript, 0x3300)) mstore(add(transcript, 0x3300), mulmod(mload(add(transcript, 0x34a0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x32e0)) mstore(add(transcript, 0x32e0), mulmod(mload(add(transcript, 0x3480)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x32c0)) mstore(add(transcript, 0x32c0), mulmod(mload(add(transcript, 0x3460)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x31a0)) mstore(add(transcript, 0x31a0), mulmod(mload(add(transcript, 0x3440)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x32a0)) mstore(add(transcript, 0x32a0), mulmod(mload(add(transcript, 0x3420)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3280)) mstore(add(transcript, 0x3280), mulmod(mload(add(transcript, 0x3400)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3260)) mstore(add(transcript, 0x3260), mulmod(mload(add(transcript, 0x33e0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3240)) mstore(add(transcript, 0x3240), mulmod(mload(add(transcript, 0x33c0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3220)) mstore(add(transcript, 0x3220), mulmod(mload(add(transcript, 0x33a0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3200)) mstore(add(transcript, 0x3200), mulmod(mload(add(transcript, 0x3380)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3180)) mstore(add(transcript, 0x3180), mulmod(mload(add(transcript, 0x3360)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x31e0)) mstore(add(transcript, 0x31e0), mulmod(mload(add(transcript, 0x3340)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3160)) mstore(add(transcript, 0x3160), mulmod(mload(add(transcript, 0x3320)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3140)) mstore(add(transcript, 0x3140), mulmod(mload(add(transcript, 0x3120)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0x3120), inv) }{ let result := mload(add(transcript, 0x3120))result := addmod(mload(add(transcript, 0x3140)), result, f_q)result := addmod(mload(add(transcript, 0x3160)), result, f_q)mstore(add(transcript, 0x35c0), result) }mstore(add(transcript, 0x35e0), mulmod(mload(add(transcript, 0x31c0)), mload(add(transcript, 0x3180)), f_q)){ let result := mload(add(transcript, 0x31e0))mstore(add(transcript, 0x3600), result) }mstore(add(transcript, 0x3620), mulmod(mload(add(transcript, 0x31c0)), mload(add(transcript, 0x3260)), f_q)){ let result := mload(add(transcript, 0x3200))result := addmod(mload(add(transcript, 0x3220)), result, f_q)result := addmod(mload(add(transcript, 0x3240)), result, f_q)mstore(add(transcript, 0x3640), result) }mstore(add(transcript, 0x3660), mulmod(mload(add(transcript, 0x31c0)), mload(add(transcript, 0x31a0)), f_q)){ let result := mload(add(transcript, 0x3280))result := addmod(mload(add(transcript, 0x32a0)), result, f_q)mstore(add(transcript, 0x3680), result) }mstore(add(transcript, 0x36a0), mulmod(mload(add(transcript, 0x31c0)), mload(add(transcript, 0x3300)), f_q)){ let result := mload(add(transcript, 0x32c0))result := addmod(mload(add(transcript, 0x32e0)), result, f_q)mstore(add(transcript, 0x36c0), result) }{ let prod := mload(add(transcript, 0x35c0)) prod := mulmod(mload(add(transcript, 0x3600)), prod, f_q) mstore(add(transcript, 0x36e0), prod) prod := mulmod(mload(add(transcript, 0x3640)), prod, f_q) mstore(add(transcript, 0x3700), prod) prod := mulmod(mload(add(transcript, 0x3680)), prod, f_q) mstore(add(transcript, 0x3720), prod) prod := mulmod(mload(add(transcript, 0x36c0)), prod, f_q) mstore(add(transcript, 0x3740), prod) }mstore(add(transcript, 0x3780), 32)mstore(add(transcript, 0x37a0), 32)mstore(add(transcript, 0x37c0), 32)mstore(add(transcript, 0x37e0), mload(add(transcript, 0x3740)))mstore(add(transcript, 0x3800), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x3820), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x3780), 0xc0, add(transcript, 0x3760), 0x20), 1), success){ let inv := mload(add(transcript, 0x3760)) let v v := mload(add(transcript, 0x36c0)) mstore(add(transcript, 0x36c0), mulmod(mload(add(transcript, 0x3720)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3680)) mstore(add(transcript, 0x3680), mulmod(mload(add(transcript, 0x3700)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3640)) mstore(add(transcript, 0x3640), mulmod(mload(add(transcript, 0x36e0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3600)) mstore(add(transcript, 0x3600), mulmod(mload(add(transcript, 0x35c0)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0x35c0), inv) }mstore(add(transcript, 0x3840), mulmod(mload(add(transcript, 0x35e0)), mload(add(transcript, 0x3600)), f_q))mstore(add(transcript, 0x3860), mulmod(mload(add(transcript, 0x3620)), mload(add(transcript, 0x3640)), f_q))mstore(add(transcript, 0x3880), mulmod(mload(add(transcript, 0x3660)), mload(add(transcript, 0x3680)), f_q))mstore(add(transcript, 0x38a0), mulmod(mload(add(transcript, 0x36a0)), mload(add(transcript, 0x36c0)), f_q))mstore(add(transcript, 0x38c0), mulmod(mload(add(transcript, 0xa40)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x38e0), mulmod(mload(add(transcript, 0x38c0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3900), mulmod(mload(add(transcript, 0x38e0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3920), mulmod(mload(add(transcript, 0x3900)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3940), mulmod(mload(add(transcript, 0x3920)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3960), mulmod(mload(add(transcript, 0x3940)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3980), mulmod(mload(add(transcript, 0x3960)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x39a0), mulmod(mload(add(transcript, 0x3980)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x39c0), mulmod(mload(add(transcript, 0x39a0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x39e0), mulmod(mload(add(transcript, 0x39c0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3a00), mulmod(mload(add(transcript, 0x39e0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3a20), mulmod(mload(add(transcript, 0x3a00)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3a40), mulmod(mload(add(transcript, 0x3a20)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3a60), mulmod(mload(add(transcript, 0x3a40)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3a80), mulmod(mload(add(transcript, 0x3a60)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3aa0), mulmod(mload(add(transcript, 0x3a80)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3ac0), mulmod(mload(add(transcript, 0x3aa0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3ae0), mulmod(mload(add(transcript, 0x3ac0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3b00), mulmod(mload(add(transcript, 0x3ae0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3b20), mulmod(mload(add(transcript, 0x3b00)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3b40), mulmod(mload(add(transcript, 0xaa0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x3b60), mulmod(mload(add(transcript, 0x3b40)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x3b80), mulmod(mload(add(transcript, 0x3b60)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x3ba0), mulmod(mload(add(transcript, 0x3b80)), mload(add(transcript, 0xaa0)), f_q)){ let result := mulmod(mload(add(transcript, 0x5c0)), mload(add(transcript, 0x3120)), f_q)result := addmod(mulmod(mload(add(transcript, 0x600)), mload(add(transcript, 0x3140)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x680)), mload(add(transcript, 0x3160)), f_q), result, f_q)mstore(add(transcript, 0x3bc0), result) }mstore(add(transcript, 0x3be0), mulmod(mload(add(transcript, 0x3bc0)), mload(add(transcript, 0x35c0)), f_q))mstore(add(transcript, 0x3c00), mulmod(sub(f_q, mload(add(transcript, 0x3be0))), 1, f_q)){ let result := mulmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x3120)), f_q)result := addmod(mulmod(mload(add(transcript, 0x620)), mload(add(transcript, 0x3140)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x660)), mload(add(transcript, 0x3160)), f_q), result, f_q)mstore(add(transcript, 0x3c20), result) }mstore(add(transcript, 0x3c40), mulmod(mload(add(transcript, 0x3c20)), mload(add(transcript, 0x35c0)), f_q))mstore(add(transcript, 0x3c60), mulmod(sub(f_q, mload(add(transcript, 0x3c40))), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3c80), mulmod(1, mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3ca0), addmod(mload(add(transcript, 0x3c00)), mload(add(transcript, 0x3c60)), f_q))mstore(add(transcript, 0x3cc0), mulmod(mload(add(transcript, 0x3ca0)), 1, f_q))mstore(add(transcript, 0x3ce0), mulmod(mload(add(transcript, 0x3c80)), 1, f_q))mstore(add(transcript, 0x3d00), mulmod(1, mload(add(transcript, 0x35e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x640)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x3d20), result) }mstore(add(transcript, 0x3d40), mulmod(mload(add(transcript, 0x3d20)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x3d60), mulmod(sub(f_q, mload(add(transcript, 0x3d40))), 1, f_q))mstore(add(transcript, 0x3d80), mulmod(mload(add(transcript, 0x3d00)), 1, f_q)){ let result := mulmod(mload(add(transcript, 0xa00)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x3da0), result) }mstore(add(transcript, 0x3dc0), mulmod(mload(add(transcript, 0x3da0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x3de0), mulmod(sub(f_q, mload(add(transcript, 0x3dc0))), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3e00), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3e20), addmod(mload(add(transcript, 0x3d60)), mload(add(transcript, 0x3de0)), f_q)){ let result := mulmod(mload(add(transcript, 0x6a0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x3e40), result) }mstore(add(transcript, 0x3e60), mulmod(mload(add(transcript, 0x3e40)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x3e80), mulmod(sub(f_q, mload(add(transcript, 0x3e60))), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x3ea0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x3ec0), addmod(mload(add(transcript, 0x3e20)), mload(add(transcript, 0x3e80)), f_q)){ let result := mulmod(mload(add(transcript, 0x6c0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x3ee0), result) }mstore(add(transcript, 0x3f00), mulmod(mload(add(transcript, 0x3ee0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x3f20), mulmod(sub(f_q, mload(add(transcript, 0x3f00))), mload(add(transcript, 0x38e0)), f_q))mstore(add(transcript, 0x3f40), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x38e0)), f_q))mstore(add(transcript, 0x3f60), addmod(mload(add(transcript, 0x3ec0)), mload(add(transcript, 0x3f20)), f_q)){ let result := mulmod(mload(add(transcript, 0x6e0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x3f80), result) }mstore(add(transcript, 0x3fa0), mulmod(mload(add(transcript, 0x3f80)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x3fc0), mulmod(sub(f_q, mload(add(transcript, 0x3fa0))), mload(add(transcript, 0x3900)), f_q))mstore(add(transcript, 0x3fe0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3900)), f_q))mstore(add(transcript, 0x4000), addmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3fc0)), f_q)){ let result := mulmod(mload(add(transcript, 0x700)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4020), result) }mstore(add(transcript, 0x4040), mulmod(mload(add(transcript, 0x4020)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4060), mulmod(sub(f_q, mload(add(transcript, 0x4040))), mload(add(transcript, 0x3920)), f_q))mstore(add(transcript, 0x4080), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3920)), f_q))mstore(add(transcript, 0x40a0), addmod(mload(add(transcript, 0x4000)), mload(add(transcript, 0x4060)), f_q)){ let result := mulmod(mload(add(transcript, 0x720)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x40c0), result) }mstore(add(transcript, 0x40e0), mulmod(mload(add(transcript, 0x40c0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4100), mulmod(sub(f_q, mload(add(transcript, 0x40e0))), mload(add(transcript, 0x3940)), f_q))mstore(add(transcript, 0x4120), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3940)), f_q))mstore(add(transcript, 0x4140), addmod(mload(add(transcript, 0x40a0)), mload(add(transcript, 0x4100)), f_q)){ let result := mulmod(mload(add(transcript, 0x740)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4160), result) }mstore(add(transcript, 0x4180), mulmod(mload(add(transcript, 0x4160)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x41a0), mulmod(sub(f_q, mload(add(transcript, 0x4180))), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x41c0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x41e0), addmod(mload(add(transcript, 0x4140)), mload(add(transcript, 0x41a0)), f_q)){ let result := mulmod(mload(add(transcript, 0x760)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4200), result) }mstore(add(transcript, 0x4220), mulmod(mload(add(transcript, 0x4200)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4240), mulmod(sub(f_q, mload(add(transcript, 0x4220))), mload(add(transcript, 0x3980)), f_q))mstore(add(transcript, 0x4260), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3980)), f_q))mstore(add(transcript, 0x4280), addmod(mload(add(transcript, 0x41e0)), mload(add(transcript, 0x4240)), f_q)){ let result := mulmod(mload(add(transcript, 0x780)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x42a0), result) }mstore(add(transcript, 0x42c0), mulmod(mload(add(transcript, 0x42a0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x42e0), mulmod(sub(f_q, mload(add(transcript, 0x42c0))), mload(add(transcript, 0x39a0)), f_q))mstore(add(transcript, 0x4300), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x39a0)), f_q))mstore(add(transcript, 0x4320), addmod(mload(add(transcript, 0x4280)), mload(add(transcript, 0x42e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x7a0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4340), result) }mstore(add(transcript, 0x4360), mulmod(mload(add(transcript, 0x4340)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4380), mulmod(sub(f_q, mload(add(transcript, 0x4360))), mload(add(transcript, 0x39c0)), f_q))mstore(add(transcript, 0x43a0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x39c0)), f_q))mstore(add(transcript, 0x43c0), addmod(mload(add(transcript, 0x4320)), mload(add(transcript, 0x4380)), f_q)){ let result := mulmod(mload(add(transcript, 0x7c0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x43e0), result) }mstore(add(transcript, 0x4400), mulmod(mload(add(transcript, 0x43e0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4420), mulmod(sub(f_q, mload(add(transcript, 0x4400))), mload(add(transcript, 0x39e0)), f_q))mstore(add(transcript, 0x4440), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x39e0)), f_q))mstore(add(transcript, 0x4460), addmod(mload(add(transcript, 0x43c0)), mload(add(transcript, 0x4420)), f_q)){ let result := mulmod(mload(add(transcript, 0x7e0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4480), result) }mstore(add(transcript, 0x44a0), mulmod(mload(add(transcript, 0x4480)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x44c0), mulmod(sub(f_q, mload(add(transcript, 0x44a0))), mload(add(transcript, 0x3a00)), f_q))mstore(add(transcript, 0x44e0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3a00)), f_q))mstore(add(transcript, 0x4500), addmod(mload(add(transcript, 0x4460)), mload(add(transcript, 0x44c0)), f_q)){ let result := mulmod(mload(add(transcript, 0x820)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4520), result) }mstore(add(transcript, 0x4540), mulmod(mload(add(transcript, 0x4520)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4560), mulmod(sub(f_q, mload(add(transcript, 0x4540))), mload(add(transcript, 0x3a20)), f_q))mstore(add(transcript, 0x4580), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3a20)), f_q))mstore(add(transcript, 0x45a0), addmod(mload(add(transcript, 0x4500)), mload(add(transcript, 0x4560)), f_q)){ let result := mulmod(mload(add(transcript, 0x840)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x45c0), result) }mstore(add(transcript, 0x45e0), mulmod(mload(add(transcript, 0x45c0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4600), mulmod(sub(f_q, mload(add(transcript, 0x45e0))), mload(add(transcript, 0x3a40)), f_q))mstore(add(transcript, 0x4620), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3a40)), f_q))mstore(add(transcript, 0x4640), addmod(mload(add(transcript, 0x45a0)), mload(add(transcript, 0x4600)), f_q)){ let result := mulmod(mload(add(transcript, 0x860)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4660), result) }mstore(add(transcript, 0x4680), mulmod(mload(add(transcript, 0x4660)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x46a0), mulmod(sub(f_q, mload(add(transcript, 0x4680))), mload(add(transcript, 0x3a60)), f_q))mstore(add(transcript, 0x46c0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3a60)), f_q))mstore(add(transcript, 0x46e0), addmod(mload(add(transcript, 0x4640)), mload(add(transcript, 0x46a0)), f_q)){ let result := mulmod(mload(add(transcript, 0x880)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4700), result) }mstore(add(transcript, 0x4720), mulmod(mload(add(transcript, 0x4700)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4740), mulmod(sub(f_q, mload(add(transcript, 0x4720))), mload(add(transcript, 0x3a80)), f_q))mstore(add(transcript, 0x4760), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3a80)), f_q))mstore(add(transcript, 0x4780), addmod(mload(add(transcript, 0x46e0)), mload(add(transcript, 0x4740)), f_q)){ let result := mulmod(mload(add(transcript, 0x8a0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x47a0), result) }mstore(add(transcript, 0x47c0), mulmod(mload(add(transcript, 0x47a0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x47e0), mulmod(sub(f_q, mload(add(transcript, 0x47c0))), mload(add(transcript, 0x3aa0)), f_q))mstore(add(transcript, 0x4800), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3aa0)), f_q))mstore(add(transcript, 0x4820), addmod(mload(add(transcript, 0x4780)), mload(add(transcript, 0x47e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x8c0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4840), result) }mstore(add(transcript, 0x4860), mulmod(mload(add(transcript, 0x4840)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4880), mulmod(sub(f_q, mload(add(transcript, 0x4860))), mload(add(transcript, 0x3ac0)), f_q))mstore(add(transcript, 0x48a0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3ac0)), f_q))mstore(add(transcript, 0x48c0), addmod(mload(add(transcript, 0x4820)), mload(add(transcript, 0x4880)), f_q))mstore(add(transcript, 0x48e0), mulmod(mload(add(transcript, 0x2f60)), mload(add(transcript, 0x35e0)), f_q))mstore(add(transcript, 0x4900), mulmod(mload(add(transcript, 0x2f80)), mload(add(transcript, 0x35e0)), f_q))mstore(add(transcript, 0x4920), mulmod(mload(add(transcript, 0x2fa0)), mload(add(transcript, 0x35e0)), f_q))mstore(add(transcript, 0x4940), mulmod(mload(add(transcript, 0x2fc0)), mload(add(transcript, 0x35e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x2fe0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4960), result) }mstore(add(transcript, 0x4980), mulmod(mload(add(transcript, 0x4960)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x49a0), mulmod(sub(f_q, mload(add(transcript, 0x4980))), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x49c0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x49e0), mulmod(mload(add(transcript, 0x48e0)), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x4a00), mulmod(mload(add(transcript, 0x4900)), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x4a20), mulmod(mload(add(transcript, 0x4920)), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x4a40), mulmod(mload(add(transcript, 0x4940)), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x4a60), addmod(mload(add(transcript, 0x48c0)), mload(add(transcript, 0x49a0)), f_q)){ let result := mulmod(mload(add(transcript, 0x800)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4a80), result) }mstore(add(transcript, 0x4aa0), mulmod(mload(add(transcript, 0x4a80)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4ac0), mulmod(sub(f_q, mload(add(transcript, 0x4aa0))), mload(add(transcript, 0x3b00)), f_q))mstore(add(transcript, 0x4ae0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3b00)), f_q))mstore(add(transcript, 0x4b00), addmod(mload(add(transcript, 0x4a60)), mload(add(transcript, 0x4ac0)), f_q))mstore(add(transcript, 0x4b20), mulmod(mload(add(transcript, 0x4b00)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4b40), mulmod(mload(add(transcript, 0x3d80)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4b60), mulmod(mload(add(transcript, 0x3e00)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4b80), mulmod(mload(add(transcript, 0x3ea0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4ba0), mulmod(mload(add(transcript, 0x3f40)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4bc0), mulmod(mload(add(transcript, 0x3fe0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4be0), mulmod(mload(add(transcript, 0x4080)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4c00), mulmod(mload(add(transcript, 0x4120)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4c20), mulmod(mload(add(transcript, 0x41c0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4c40), mulmod(mload(add(transcript, 0x4260)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4c60), mulmod(mload(add(transcript, 0x4300)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4c80), mulmod(mload(add(transcript, 0x43a0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4ca0), mulmod(mload(add(transcript, 0x4440)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4cc0), mulmod(mload(add(transcript, 0x44e0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4ce0), mulmod(mload(add(transcript, 0x4580)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4d00), mulmod(mload(add(transcript, 0x4620)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4d20), mulmod(mload(add(transcript, 0x46c0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4d40), mulmod(mload(add(transcript, 0x4760)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4d60), mulmod(mload(add(transcript, 0x4800)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4d80), mulmod(mload(add(transcript, 0x48a0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4da0), mulmod(mload(add(transcript, 0x49c0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4dc0), mulmod(mload(add(transcript, 0x49e0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4de0), mulmod(mload(add(transcript, 0x4a00)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4e00), mulmod(mload(add(transcript, 0x4a20)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4e20), mulmod(mload(add(transcript, 0x4a40)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4e40), mulmod(mload(add(transcript, 0x4ae0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4e60), addmod(mload(add(transcript, 0x3cc0)), mload(add(transcript, 0x4b20)), f_q))mstore(add(transcript, 0x4e80), mulmod(1, mload(add(transcript, 0x3620)), f_q)){ let result := mulmod(mload(add(transcript, 0x8e0)), mload(add(transcript, 0x3200)), f_q)result := addmod(mulmod(mload(add(transcript, 0x900)), mload(add(transcript, 0x3220)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x920)), mload(add(transcript, 0x3240)), f_q), result, f_q)mstore(add(transcript, 0x4ea0), result) }mstore(add(transcript, 0x4ec0), mulmod(mload(add(transcript, 0x4ea0)), mload(add(transcript, 0x3860)), f_q))mstore(add(transcript, 0x4ee0), mulmod(sub(f_q, mload(add(transcript, 0x4ec0))), 1, f_q))mstore(add(transcript, 0x4f00), mulmod(mload(add(transcript, 0x4e80)), 1, f_q))mstore(add(transcript, 0x4f20), mulmod(mload(add(transcript, 0x4ee0)), mload(add(transcript, 0x3b40)), f_q))mstore(add(transcript, 0x4f40), mulmod(mload(add(transcript, 0x4f00)), mload(add(transcript, 0x3b40)), f_q))mstore(add(transcript, 0x4f60), addmod(mload(add(transcript, 0x4e60)), mload(add(transcript, 0x4f20)), f_q))mstore(add(transcript, 0x4f80), mulmod(1, mload(add(transcript, 0x3660)), f_q)){ let result := mulmod(mload(add(transcript, 0x940)), mload(add(transcript, 0x3280)), f_q)result := addmod(mulmod(mload(add(transcript, 0x960)), mload(add(transcript, 0x32a0)), f_q), result, f_q)mstore(add(transcript, 0x4fa0), result) }mstore(add(transcript, 0x4fc0), mulmod(mload(add(transcript, 0x4fa0)), mload(add(transcript, 0x3880)), f_q))mstore(add(transcript, 0x4fe0), mulmod(sub(f_q, mload(add(transcript, 0x4fc0))), 1, f_q))mstore(add(transcript, 0x5000), mulmod(mload(add(transcript, 0x4f80)), 1, f_q)){ let result := mulmod(mload(add(transcript, 0x980)), mload(add(transcript, 0x3280)), f_q)result := addmod(mulmod(mload(add(transcript, 0x9a0)), mload(add(transcript, 0x32a0)), f_q), result, f_q)mstore(add(transcript, 0x5020), result) }mstore(add(transcript, 0x5040), mulmod(mload(add(transcript, 0x5020)), mload(add(transcript, 0x3880)), f_q))mstore(add(transcript, 0x5060), mulmod(sub(f_q, mload(add(transcript, 0x5040))), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x5080), mulmod(mload(add(transcript, 0x4f80)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x50a0), addmod(mload(add(transcript, 0x4fe0)), mload(add(transcript, 0x5060)), f_q))mstore(add(transcript, 0x50c0), mulmod(mload(add(transcript, 0x50a0)), mload(add(transcript, 0x3b60)), f_q))mstore(add(transcript, 0x50e0), mulmod(mload(add(transcript, 0x5000)), mload(add(transcript, 0x3b60)), f_q))mstore(add(transcript, 0x5100), mulmod(mload(add(transcript, 0x5080)), mload(add(transcript, 0x3b60)), f_q))mstore(add(transcript, 0x5120), addmod(mload(add(transcript, 0x4f60)), mload(add(transcript, 0x50c0)), f_q))mstore(add(transcript, 0x5140), mulmod(1, mload(add(transcript, 0x36a0)), f_q)){ let result := mulmod(mload(add(transcript, 0x9c0)), mload(add(transcript, 0x32c0)), f_q)result := addmod(mulmod(mload(add(transcript, 0x9e0)), mload(add(transcript, 0x32e0)), f_q), result, f_q)mstore(add(transcript, 0x5160), result) }mstore(add(transcript, 0x5180), mulmod(mload(add(transcript, 0x5160)), mload(add(transcript, 0x38a0)), f_q))mstore(add(transcript, 0x51a0), mulmod(sub(f_q, mload(add(transcript, 0x5180))), 1, f_q))mstore(add(transcript, 0x51c0), mulmod(mload(add(transcript, 0x5140)), 1, f_q))mstore(add(transcript, 0x51e0), mulmod(mload(add(transcript, 0x51a0)), mload(add(transcript, 0x3b80)), f_q))mstore(add(transcript, 0x5200), mulmod(mload(add(transcript, 0x51c0)), mload(add(transcript, 0x3b80)), f_q))mstore(add(transcript, 0x5220), addmod(mload(add(transcript, 0x5120)), mload(add(transcript, 0x51e0)), f_q))mstore(add(transcript, 0x5240), mulmod(1, mload(add(transcript, 0x31c0)), f_q))mstore(add(transcript, 0x5260), mulmod(1, mload(add(transcript, 0xb40)), f_q))mstore(add(transcript, 0x5280), 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(add(transcript, 0x52a0), 0x0000000000000000000000000000000000000000000000000000000000000002)mstore(add(transcript, 0x52c0), mload(add(transcript, 0x5220)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5280), 0x60, add(transcript, 0x5280), 0x40), 1), success)mstore(add(transcript, 0x52e0), mload(add(transcript, 0x5280))) mstore(add(transcript, 0x5300), mload(add(transcript, 0x52a0)))mstore(add(transcript, 0x5320), mload(add(transcript, 0x60))) mstore(add(transcript, 0x5340), mload(add(transcript, 0x80)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x52e0), 0x80, add(transcript, 0x52e0), 0x40), 1), success)mstore(add(transcript, 0x5360), mload(add(transcript, 0xa0))) mstore(add(transcript, 0x5380), mload(add(transcript, 0xc0)))mstore(add(transcript, 0x53a0), mload(add(transcript, 0x3ce0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5360), 0x60, add(transcript, 0x5360), 0x40), 1), success)mstore(add(transcript, 0x53c0), mload(add(transcript, 0x52e0))) mstore(add(transcript, 0x53e0), mload(add(transcript, 0x5300)))mstore(add(transcript, 0x5400), mload(add(transcript, 0x5360))) mstore(add(transcript, 0x5420), mload(add(transcript, 0x5380)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x53c0), 0x80, add(transcript, 0x53c0), 0x40), 1), success)mstore(add(transcript, 0x5440), mload(add(transcript, 0xe0))) mstore(add(transcript, 0x5460), mload(add(transcript, 0x100)))mstore(add(transcript, 0x5480), mload(add(transcript, 0x4b40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5440), 0x60, add(transcript, 0x5440), 0x40), 1), success)mstore(add(transcript, 0x54a0), mload(add(transcript, 0x53c0))) mstore(add(transcript, 0x54c0), mload(add(transcript, 0x53e0)))mstore(add(transcript, 0x54e0), mload(add(transcript, 0x5440))) mstore(add(transcript, 0x5500), mload(add(transcript, 0x5460)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x54a0), 0x80, add(transcript, 0x54a0), 0x40), 1), success)mstore(add(transcript, 0x5520), mload(add(transcript, 0x1c0))) mstore(add(transcript, 0x5540), mload(add(transcript, 0x1e0)))mstore(add(transcript, 0x5560), mload(add(transcript, 0x4b60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5520), 0x60, add(transcript, 0x5520), 0x40), 1), success)mstore(add(transcript, 0x5580), mload(add(transcript, 0x54a0))) mstore(add(transcript, 0x55a0), mload(add(transcript, 0x54c0)))mstore(add(transcript, 0x55c0), mload(add(transcript, 0x5520))) mstore(add(transcript, 0x55e0), mload(add(transcript, 0x5540)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5580), 0x80, add(transcript, 0x5580), 0x40), 1), success)mstore(add(transcript, 0x5600), 0x14113d2da8037ec77f55dffb91151a8e7bb3eeea2fe44f6804703d0f82f344a0) mstore(add(transcript, 0x5620), 0x1c5b5f4c28346cfddf08edde8db492f19a24b5f73fc2bd48dc19137a11ce53bf)mstore(add(transcript, 0x5640), mload(add(transcript, 0x4b80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5600), 0x60, add(transcript, 0x5600), 0x40), 1), success)mstore(add(transcript, 0x5660), mload(add(transcript, 0x5580))) mstore(add(transcript, 0x5680), mload(add(transcript, 0x55a0)))mstore(add(transcript, 0x56a0), mload(add(transcript, 0x5600))) mstore(add(transcript, 0x56c0), mload(add(transcript, 0x5620)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5660), 0x80, add(transcript, 0x5660), 0x40), 1), success)mstore(add(transcript, 0x56e0), 0x0491714ea02953469195ca0768b5aafb03166b27284de7cc9ffa7b3879a959a5) mstore(add(transcript, 0x5700), 0x2dbaa9a59dc7fd9657798dd9c00ffc85d2033e9555b699f4d9706bc2b77dce77)mstore(add(transcript, 0x5720), mload(add(transcript, 0x4ba0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x56e0), 0x60, add(transcript, 0x56e0), 0x40), 1), success)mstore(add(transcript, 0x5740), mload(add(transcript, 0x5660))) mstore(add(transcript, 0x5760), mload(add(transcript, 0x5680)))mstore(add(transcript, 0x5780), mload(add(transcript, 0x56e0))) mstore(add(transcript, 0x57a0), mload(add(transcript, 0x5700)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5740), 0x80, add(transcript, 0x5740), 0x40), 1), success)mstore(add(transcript, 0x57c0), 0x16da8fcde785c6df1fe13aec4a088e06790750dfa9a2e9c6e05464a06b99679d) mstore(add(transcript, 0x57e0), 0x19fffa5d91549cdec737262e6cc5fa01c2f1c39c7b5f567d65d68e2cf3077bdb)mstore(add(transcript, 0x5800), mload(add(transcript, 0x4bc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x57c0), 0x60, add(transcript, 0x57c0), 0x40), 1), success)mstore(add(transcript, 0x5820), mload(add(transcript, 0x5740))) mstore(add(transcript, 0x5840), mload(add(transcript, 0x5760)))mstore(add(transcript, 0x5860), mload(add(transcript, 0x57c0))) mstore(add(transcript, 0x5880), mload(add(transcript, 0x57e0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5820), 0x80, add(transcript, 0x5820), 0x40), 1), success)mstore(add(transcript, 0x58a0), 0x1542d7d471049c346e9b97abc2a351948d23438019a76df2b1989c8f76b28760) mstore(add(transcript, 0x58c0), 0x0e26e13db1f178f85dbcb83b0a617d766c0b36fc4a49bafab13b20e83d0557f3)mstore(add(transcript, 0x58e0), mload(add(transcript, 0x4be0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x58a0), 0x60, add(transcript, 0x58a0), 0x40), 1), success)mstore(add(transcript, 0x5900), mload(add(transcript, 0x5820))) mstore(add(transcript, 0x5920), mload(add(transcript, 0x5840)))mstore(add(transcript, 0x5940), mload(add(transcript, 0x58a0))) mstore(add(transcript, 0x5960), mload(add(transcript, 0x58c0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5900), 0x80, add(transcript, 0x5900), 0x40), 1), success)mstore(add(transcript, 0x5980), 0x2b692b9199891f86e3fc5613991e72b47098220c9d883415244271cc74b1218d) mstore(add(transcript, 0x59a0), 0x042f929afe4bc56206b4ace41a3d283848753d5014597bcd0ec14f8a9261c584)mstore(add(transcript, 0x59c0), mload(add(transcript, 0x4c00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5980), 0x60, add(transcript, 0x5980), 0x40), 1), success)mstore(add(transcript, 0x59e0), mload(add(transcript, 0x5900))) mstore(add(transcript, 0x5a00), mload(add(transcript, 0x5920)))mstore(add(transcript, 0x5a20), mload(add(transcript, 0x5980))) mstore(add(transcript, 0x5a40), mload(add(transcript, 0x59a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x59e0), 0x80, add(transcript, 0x59e0), 0x40), 1), success)mstore(add(transcript, 0x5a60), 0x29c09f206a2fb04b15a3a0c220024c6b0ffa448a19fe3d4ec45ffa20748fc946) mstore(add(transcript, 0x5a80), 0x1d27c69fbfa99caecf06376d79cbde5436726836ad63582954e2618d3899a6f6)mstore(add(transcript, 0x5aa0), mload(add(transcript, 0x4c20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5a60), 0x60, add(transcript, 0x5a60), 0x40), 1), success)mstore(add(transcript, 0x5ac0), mload(add(transcript, 0x59e0))) mstore(add(transcript, 0x5ae0), mload(add(transcript, 0x5a00)))mstore(add(transcript, 0x5b00), mload(add(transcript, 0x5a60))) mstore(add(transcript, 0x5b20), mload(add(transcript, 0x5a80)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5ac0), 0x80, add(transcript, 0x5ac0), 0x40), 1), success)mstore(add(transcript, 0x5b40), 0x20a3113a48bc99d14016666990d982af3fc8ef6269c2f37e053bbb801e1bda37) mstore(add(transcript, 0x5b60), 0x11874a3348a60113ed95b25c4bdb198369e449967dfe7fe3253cb39afdee2672)mstore(add(transcript, 0x5b80), mload(add(transcript, 0x4c40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5b40), 0x60, add(transcript, 0x5b40), 0x40), 1), success)mstore(add(transcript, 0x5ba0), mload(add(transcript, 0x5ac0))) mstore(add(transcript, 0x5bc0), mload(add(transcript, 0x5ae0)))mstore(add(transcript, 0x5be0), mload(add(transcript, 0x5b40))) mstore(add(transcript, 0x5c00), mload(add(transcript, 0x5b60)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5ba0), 0x80, add(transcript, 0x5ba0), 0x40), 1), success)mstore(add(transcript, 0x5c20), 0x22ee677d2be1568a5ed89b73c8499d415c7c48b12184a48781e4f08d37755757) mstore(add(transcript, 0x5c40), 0x16f2744bb8dae65b5c5a6e0836cd5b59014c25f2481b024dec21ccbf26a9808c)mstore(add(transcript, 0x5c60), mload(add(transcript, 0x4c60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5c20), 0x60, add(transcript, 0x5c20), 0x40), 1), success)mstore(add(transcript, 0x5c80), mload(add(transcript, 0x5ba0))) mstore(add(transcript, 0x5ca0), mload(add(transcript, 0x5bc0)))mstore(add(transcript, 0x5cc0), mload(add(transcript, 0x5c20))) mstore(add(transcript, 0x5ce0), mload(add(transcript, 0x5c40)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5c80), 0x80, add(transcript, 0x5c80), 0x40), 1), success)mstore(add(transcript, 0x5d00), 0x0fccf37dc6868cb450c1cc971a9005c20acf19ddb1c82b9ceae7579aaaf6e5dc) mstore(add(transcript, 0x5d20), 0x1053a5adbb841ceb0c804c8e4188b2eb030d0a623ae199553173d818df46a8f8)mstore(add(transcript, 0x5d40), mload(add(transcript, 0x4c80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5d00), 0x60, add(transcript, 0x5d00), 0x40), 1), success)mstore(add(transcript, 0x5d60), mload(add(transcript, 0x5c80))) mstore(add(transcript, 0x5d80), mload(add(transcript, 0x5ca0)))mstore(add(transcript, 0x5da0), mload(add(transcript, 0x5d00))) mstore(add(transcript, 0x5dc0), mload(add(transcript, 0x5d20)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5d60), 0x80, add(transcript, 0x5d60), 0x40), 1), success)mstore(add(transcript, 0x5de0), 0x03c3c5792394acd6230174342c0fb4ceba9b35c38d4ab0ddb4a0fb177db54308) mstore(add(transcript, 0x5e00), 0x1fd7d3ae57e2ef4c7b1023ce495503e40ca89532cbf6a740e57d9fa57d2b6f93)mstore(add(transcript, 0x5e20), mload(add(transcript, 0x4ca0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5de0), 0x60, add(transcript, 0x5de0), 0x40), 1), success)mstore(add(transcript, 0x5e40), mload(add(transcript, 0x5d60))) mstore(add(transcript, 0x5e60), mload(add(transcript, 0x5d80)))mstore(add(transcript, 0x5e80), mload(add(transcript, 0x5de0))) mstore(add(transcript, 0x5ea0), mload(add(transcript, 0x5e00)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5e40), 0x80, add(transcript, 0x5e40), 0x40), 1), success)mstore(add(transcript, 0x5ec0), 0x15b64cf223d375ca6c983ab84102a960bfeb54a0a29a085844e0e571b09f3d71) mstore(add(transcript, 0x5ee0), 0x23d8408484b6b10b897f9b0cc33314d9060dac48f43a62a0e5660be5882a7a8e)mstore(add(transcript, 0x5f00), mload(add(transcript, 0x4cc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5ec0), 0x60, add(transcript, 0x5ec0), 0x40), 1), success)mstore(add(transcript, 0x5f20), mload(add(transcript, 0x5e40))) mstore(add(transcript, 0x5f40), mload(add(transcript, 0x5e60)))mstore(add(transcript, 0x5f60), mload(add(transcript, 0x5ec0))) mstore(add(transcript, 0x5f80), mload(add(transcript, 0x5ee0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5f20), 0x80, add(transcript, 0x5f20), 0x40), 1), success)mstore(add(transcript, 0x5fa0), 0x2b069d8e2e57e6add6f216816a31936af27540959bfd7b845d3e74d84196639d) mstore(add(transcript, 0x5fc0), 0x0840b8c0bdbb760a926c4046da2614e14d3c8b2fafc18c7471ce21298ca57c17)mstore(add(transcript, 0x5fe0), mload(add(transcript, 0x4ce0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5fa0), 0x60, add(transcript, 0x5fa0), 0x40), 1), success)mstore(add(transcript, 0x6000), mload(add(transcript, 0x5f20))) mstore(add(transcript, 0x6020), mload(add(transcript, 0x5f40)))mstore(add(transcript, 0x6040), mload(add(transcript, 0x5fa0))) mstore(add(transcript, 0x6060), mload(add(transcript, 0x5fc0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6000), 0x80, add(transcript, 0x6000), 0x40), 1), success)mstore(add(transcript, 0x6080), 0x2a6e42bf68afa452351faa949dc279f9fe3c68b126280aca278121888fcbaf73) mstore(add(transcript, 0x60a0), 0x04ddb656fb4f29069ada65c848b2ab177b495c0869aba6fe9216dab3a043f759)mstore(add(transcript, 0x60c0), mload(add(transcript, 0x4d00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6080), 0x60, add(transcript, 0x6080), 0x40), 1), success)mstore(add(transcript, 0x60e0), mload(add(transcript, 0x6000))) mstore(add(transcript, 0x6100), mload(add(transcript, 0x6020)))mstore(add(transcript, 0x6120), mload(add(transcript, 0x6080))) mstore(add(transcript, 0x6140), mload(add(transcript, 0x60a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x60e0), 0x80, add(transcript, 0x60e0), 0x40), 1), success)mstore(add(transcript, 0x6160), 0x0182a509c08487b8c3d5b8507251cc8a46f5b313c687c1e7262d08eb8dfa4c10) mstore(add(transcript, 0x6180), 0x0474aa258fa2d41afc65596c3ada20b889a0f27825905a2a176560b27e2d2c8e)mstore(add(transcript, 0x61a0), mload(add(transcript, 0x4d20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6160), 0x60, add(transcript, 0x6160), 0x40), 1), success)mstore(add(transcript, 0x61c0), mload(add(transcript, 0x60e0))) mstore(add(transcript, 0x61e0), mload(add(transcript, 0x6100)))mstore(add(transcript, 0x6200), mload(add(transcript, 0x6160))) mstore(add(transcript, 0x6220), mload(add(transcript, 0x6180)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x61c0), 0x80, add(transcript, 0x61c0), 0x40), 1), success)mstore(add(transcript, 0x6240), 0x1b5b2f748768c343be69fd761df14910a926a77da095db2912e96ac9f73ab6a2) mstore(add(transcript, 0x6260), 0x2c0bb520bc601497c6b7f1bf683c83cab3a0440c41d8fdfbae0c775a57e727f5)mstore(add(transcript, 0x6280), mload(add(transcript, 0x4d40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6240), 0x60, add(transcript, 0x6240), 0x40), 1), success)mstore(add(transcript, 0x62a0), mload(add(transcript, 0x61c0))) mstore(add(transcript, 0x62c0), mload(add(transcript, 0x61e0)))mstore(add(transcript, 0x62e0), mload(add(transcript, 0x6240))) mstore(add(transcript, 0x6300), mload(add(transcript, 0x6260)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x62a0), 0x80, add(transcript, 0x62a0), 0x40), 1), success)mstore(add(transcript, 0x6320), 0x0013dfb44248755cf12dcbac0ec5563e577e5b804ade04abc4e9baadac00e7ff) mstore(add(transcript, 0x6340), 0x264d42845662a911a5c37ae71cce463c1c387c12eed1a675e957440020045cb1)mstore(add(transcript, 0x6360), mload(add(transcript, 0x4d60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6320), 0x60, add(transcript, 0x6320), 0x40), 1), success)mstore(add(transcript, 0x6380), mload(add(transcript, 0x62a0))) mstore(add(transcript, 0x63a0), mload(add(transcript, 0x62c0)))mstore(add(transcript, 0x63c0), mload(add(transcript, 0x6320))) mstore(add(transcript, 0x63e0), mload(add(transcript, 0x6340)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6380), 0x80, add(transcript, 0x6380), 0x40), 1), success)mstore(add(transcript, 0x6400), 0x2386d5258846b3fc1e5ffca77fde43316fd15ea08e7ce940927f7212c1b37bb7) mstore(add(transcript, 0x6420), 0x23306e0a53ba71047743578c8fb135d2b843a8dded816b5a9e0b06b72f07be96)mstore(add(transcript, 0x6440), mload(add(transcript, 0x4d80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6400), 0x60, add(transcript, 0x6400), 0x40), 1), success)mstore(add(transcript, 0x6460), mload(add(transcript, 0x6380))) mstore(add(transcript, 0x6480), mload(add(transcript, 0x63a0)))mstore(add(transcript, 0x64a0), mload(add(transcript, 0x6400))) mstore(add(transcript, 0x64c0), mload(add(transcript, 0x6420)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6460), 0x80, add(transcript, 0x6460), 0x40), 1), success)mstore(add(transcript, 0x64e0), mload(add(transcript, 0x420))) mstore(add(transcript, 0x6500), mload(add(transcript, 0x440)))mstore(add(transcript, 0x6520), mload(add(transcript, 0x4da0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x64e0), 0x60, add(transcript, 0x64e0), 0x40), 1), success)mstore(add(transcript, 0x6540), mload(add(transcript, 0x6460))) mstore(add(transcript, 0x6560), mload(add(transcript, 0x6480)))mstore(add(transcript, 0x6580), mload(add(transcript, 0x64e0))) mstore(add(transcript, 0x65a0), mload(add(transcript, 0x6500)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6540), 0x80, add(transcript, 0x6540), 0x40), 1), success)mstore(add(transcript, 0x65c0), mload(add(transcript, 0x460))) mstore(add(transcript, 0x65e0), mload(add(transcript, 0x480)))mstore(add(transcript, 0x6600), mload(add(transcript, 0x4dc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x65c0), 0x60, add(transcript, 0x65c0), 0x40), 1), success)mstore(add(transcript, 0x6620), mload(add(transcript, 0x6540))) mstore(add(transcript, 0x6640), mload(add(transcript, 0x6560)))mstore(add(transcript, 0x6660), mload(add(transcript, 0x65c0))) mstore(add(transcript, 0x6680), mload(add(transcript, 0x65e0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6620), 0x80, add(transcript, 0x6620), 0x40), 1), success)mstore(add(transcript, 0x66a0), mload(add(transcript, 0x4a0))) mstore(add(transcript, 0x66c0), mload(add(transcript, 0x4c0)))mstore(add(transcript, 0x66e0), mload(add(transcript, 0x4de0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x66a0), 0x60, add(transcript, 0x66a0), 0x40), 1), success)mstore(add(transcript, 0x6700), mload(add(transcript, 0x6620))) mstore(add(transcript, 0x6720), mload(add(transcript, 0x6640)))mstore(add(transcript, 0x6740), mload(add(transcript, 0x66a0))) mstore(add(transcript, 0x6760), mload(add(transcript, 0x66c0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6700), 0x80, add(transcript, 0x6700), 0x40), 1), success)mstore(add(transcript, 0x6780), mload(add(transcript, 0x4e0))) mstore(add(transcript, 0x67a0), mload(add(transcript, 0x500)))mstore(add(transcript, 0x67c0), mload(add(transcript, 0x4e00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6780), 0x60, add(transcript, 0x6780), 0x40), 1), success)mstore(add(transcript, 0x67e0), mload(add(transcript, 0x6700))) mstore(add(transcript, 0x6800), mload(add(transcript, 0x6720)))mstore(add(transcript, 0x6820), mload(add(transcript, 0x6780))) mstore(add(transcript, 0x6840), mload(add(transcript, 0x67a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x67e0), 0x80, add(transcript, 0x67e0), 0x40), 1), success)mstore(add(transcript, 0x6860), mload(add(transcript, 0x520))) mstore(add(transcript, 0x6880), mload(add(transcript, 0x540)))mstore(add(transcript, 0x68a0), mload(add(transcript, 0x4e20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6860), 0x60, add(transcript, 0x6860), 0x40), 1), success)mstore(add(transcript, 0x68c0), mload(add(transcript, 0x67e0))) mstore(add(transcript, 0x68e0), mload(add(transcript, 0x6800)))mstore(add(transcript, 0x6900), mload(add(transcript, 0x6860))) mstore(add(transcript, 0x6920), mload(add(transcript, 0x6880)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x68c0), 0x80, add(transcript, 0x68c0), 0x40), 1), success)mstore(add(transcript, 0x6940), mload(add(transcript, 0x380))) mstore(add(transcript, 0x6960), mload(add(transcript, 0x3a0)))mstore(add(transcript, 0x6980), mload(add(transcript, 0x4e40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6940), 0x60, add(transcript, 0x6940), 0x40), 1), success)mstore(add(transcript, 0x69a0), mload(add(transcript, 0x68c0))) mstore(add(transcript, 0x69c0), mload(add(transcript, 0x68e0)))mstore(add(transcript, 0x69e0), mload(add(transcript, 0x6940))) mstore(add(transcript, 0x6a00), mload(add(transcript, 0x6960)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x69a0), 0x80, add(transcript, 0x69a0), 0x40), 1), success)mstore(add(transcript, 0x6a20), mload(add(transcript, 0x2c0))) mstore(add(transcript, 0x6a40), mload(add(transcript, 0x2e0)))mstore(add(transcript, 0x6a60), mload(add(transcript, 0x4f40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6a20), 0x60, add(transcript, 0x6a20), 0x40), 1), success)mstore(add(transcript, 0x6a80), mload(add(transcript, 0x69a0))) mstore(add(transcript, 0x6aa0), mload(add(transcript, 0x69c0)))mstore(add(transcript, 0x6ac0), mload(add(transcript, 0x6a20))) mstore(add(transcript, 0x6ae0), mload(add(transcript, 0x6a40)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6a80), 0x80, add(transcript, 0x6a80), 0x40), 1), success)mstore(add(transcript, 0x6b00), mload(add(transcript, 0x300))) mstore(add(transcript, 0x6b20), mload(add(transcript, 0x320)))mstore(add(transcript, 0x6b40), mload(add(transcript, 0x50e0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6b00), 0x60, add(transcript, 0x6b00), 0x40), 1), success)mstore(add(transcript, 0x6b60), mload(add(transcript, 0x6a80))) mstore(add(transcript, 0x6b80), mload(add(transcript, 0x6aa0)))mstore(add(transcript, 0x6ba0), mload(add(transcript, 0x6b00))) mstore(add(transcript, 0x6bc0), mload(add(transcript, 0x6b20)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6b60), 0x80, add(transcript, 0x6b60), 0x40), 1), success)mstore(add(transcript, 0x6be0), mload(add(transcript, 0x340))) mstore(add(transcript, 0x6c00), mload(add(transcript, 0x360)))mstore(add(transcript, 0x6c20), mload(add(transcript, 0x5100)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6be0), 0x60, add(transcript, 0x6be0), 0x40), 1), success)mstore(add(transcript, 0x6c40), mload(add(transcript, 0x6b60))) mstore(add(transcript, 0x6c60), mload(add(transcript, 0x6b80)))mstore(add(transcript, 0x6c80), mload(add(transcript, 0x6be0))) mstore(add(transcript, 0x6ca0), mload(add(transcript, 0x6c00)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6c40), 0x80, add(transcript, 0x6c40), 0x40), 1), success)mstore(add(transcript, 0x6cc0), mload(add(transcript, 0x180))) mstore(add(transcript, 0x6ce0), mload(add(transcript, 0x1a0)))mstore(add(transcript, 0x6d00), mload(add(transcript, 0x5200)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6cc0), 0x60, add(transcript, 0x6cc0), 0x40), 1), success)mstore(add(transcript, 0x6d20), mload(add(transcript, 0x6c40))) mstore(add(transcript, 0x6d40), mload(add(transcript, 0x6c60)))mstore(add(transcript, 0x6d60), mload(add(transcript, 0x6cc0))) mstore(add(transcript, 0x6d80), mload(add(transcript, 0x6ce0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6d20), 0x80, add(transcript, 0x6d20), 0x40), 1), success)mstore(add(transcript, 0x6da0), mload(add(transcript, 0xae0))) mstore(add(transcript, 0x6dc0), mload(add(transcript, 0xb00)))mstore(add(transcript, 0x6de0), sub(f_q, mload(add(transcript, 0x5240))))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6da0), 0x60, add(transcript, 0x6da0), 0x40), 1), success)mstore(add(transcript, 0x6e00), mload(add(transcript, 0x6d20))) mstore(add(transcript, 0x6e20), mload(add(transcript, 0x6d40)))mstore(add(transcript, 0x6e40), mload(add(transcript, 0x6da0))) mstore(add(transcript, 0x6e60), mload(add(transcript, 0x6dc0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6e00), 0x80, add(transcript, 0x6e00), 0x40), 1), success)mstore(add(transcript, 0x6e80), mload(add(transcript, 0xb80))) mstore(add(transcript, 0x6ea0), mload(add(transcript, 0xba0)))mstore(add(transcript, 0x6ec0), mload(add(transcript, 0x5260)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6e80), 0x60, add(transcript, 0x6e80), 0x40), 1), success)mstore(add(transcript, 0x6ee0), mload(add(transcript, 0x6e00))) mstore(add(transcript, 0x6f00), mload(add(transcript, 0x6e20)))mstore(add(transcript, 0x6f20), mload(add(transcript, 0x6e80))) mstore(add(transcript, 0x6f40), mload(add(transcript, 0x6ea0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6ee0), 0x80, add(transcript, 0x6ee0), 0x40), 1), success)mstore(add(transcript, 0x6f60), mload(add(transcript, 0x6ee0))) mstore(add(transcript, 0x6f80), mload(add(transcript, 0x6f00)))mstore(add(transcript, 0x6fa0), 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) mstore(add(transcript, 0x6fc0), 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) mstore(add(transcript, 0x6fe0), 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) mstore(add(transcript, 0x7000), 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa)mstore(add(transcript, 0x7020), mload(add(transcript, 0xb80))) mstore(add(transcript, 0x7040), mload(add(transcript, 0xba0)))mstore(add(transcript, 0x7060), 0x1e46f29916af7be8122d38ce700e9f73b49830b4aa672d58c5fa83daa6f49038) mstore(add(transcript, 0x7080), 0x203ccabc1b45b69a6dfd92fe117dfbdbeb48e684dccdf8cb2f466f4b86073034) mstore(add(transcript, 0x70a0), 0x0bd22dcbe71a1faeea29bf6783cbc63f06788ff9ea2488a2af9036ac52d4ae82) mstore(add(transcript, 0x70c0), 0x23b7b2c332fca16856cc8bd1ca0b56f6872ed95ef4291917fce124bf48c13609)success := and(eq(staticcall(gas(), 0x8, add(transcript, 0x6f60), 0x180, add(transcript, 0x6f60), 0x20), 1), success)success := and(eq(mload(add(transcript, 0x6f60)), 1), success)} return success; } } + assembly { let f_p := 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 let f_q := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 function validate_ec_point(x, y) -> valid { { let x_lt_p := lt(x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let y_lt_p := lt(y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) valid := and(x_lt_p, y_lt_p) } { let y_square := mulmod(y, y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_square := mulmod(x, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube := mulmod(x_square, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube_plus_3 := addmod(x_cube, 3, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let is_affine := eq(x_cube_plus_3, y_square) valid := and(valid, is_affine) } } mstore(add(transcript, 0x20), mod(mload(add(pubInputs, 0x20)), f_q))mstore(add(transcript, 0x40), mod(mload(add(pubInputs, 0x40)), f_q))mstore(add(transcript, 0x0), 18446911396317205745533550639557898655359618293120280237620224741936191804828) { let x := mload(add(proof, 0x20)) mstore(add(transcript, 0x60), x) let y := mload(add(proof, 0x40)) mstore(add(transcript, 0x80), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x60)) mstore(add(transcript, 0xa0), x) let y := mload(add(proof, 0x80)) mstore(add(transcript, 0xc0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0xa0)) mstore(add(transcript, 0xe0), x) let y := mload(add(proof, 0xc0)) mstore(add(transcript, 0x100), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x120), keccak256(add(transcript, 0x0), 288)){ let hash := mload(add(transcript, 0x120)) mstore(add(transcript, 0x140), mod(hash, f_q)) mstore(add(transcript, 0x160), hash) } { let x := mload(add(proof, 0xe0)) mstore(add(transcript, 0x180), x) let y := mload(add(proof, 0x100)) mstore(add(transcript, 0x1a0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x120)) mstore(add(transcript, 0x1c0), x) let y := mload(add(proof, 0x140)) mstore(add(transcript, 0x1e0), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x200), keccak256(add(transcript, 0x160), 160)){ let hash := mload(add(transcript, 0x200)) mstore(add(transcript, 0x220), mod(hash, f_q)) mstore(add(transcript, 0x240), hash) }mstore8(add(transcript, 0x260), 1)mstore(add(transcript, 0x260), keccak256(add(transcript, 0x240), 33)){ let hash := mload(add(transcript, 0x260)) mstore(add(transcript, 0x280), mod(hash, f_q)) mstore(add(transcript, 0x2a0), hash) } { let x := mload(add(proof, 0x160)) mstore(add(transcript, 0x2c0), x) let y := mload(add(proof, 0x180)) mstore(add(transcript, 0x2e0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x1a0)) mstore(add(transcript, 0x300), x) let y := mload(add(proof, 0x1c0)) mstore(add(transcript, 0x320), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x1e0)) mstore(add(transcript, 0x340), x) let y := mload(add(proof, 0x200)) mstore(add(transcript, 0x360), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x220)) mstore(add(transcript, 0x380), x) let y := mload(add(proof, 0x240)) mstore(add(transcript, 0x3a0), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x3c0), keccak256(add(transcript, 0x2a0), 288)){ let hash := mload(add(transcript, 0x3c0)) mstore(add(transcript, 0x3e0), mod(hash, f_q)) mstore(add(transcript, 0x400), hash) } { let x := mload(add(proof, 0x260)) mstore(add(transcript, 0x420), x) let y := mload(add(proof, 0x280)) mstore(add(transcript, 0x440), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x2a0)) mstore(add(transcript, 0x460), x) let y := mload(add(proof, 0x2c0)) mstore(add(transcript, 0x480), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x2e0)) mstore(add(transcript, 0x4a0), x) let y := mload(add(proof, 0x300)) mstore(add(transcript, 0x4c0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x320)) mstore(add(transcript, 0x4e0), x) let y := mload(add(proof, 0x340)) mstore(add(transcript, 0x500), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x360)) mstore(add(transcript, 0x520), x) let y := mload(add(proof, 0x380)) mstore(add(transcript, 0x540), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x560), keccak256(add(transcript, 0x400), 352)){ let hash := mload(add(transcript, 0x560)) mstore(add(transcript, 0x580), mod(hash, f_q)) mstore(add(transcript, 0x5a0), hash) }mstore(add(transcript, 0x5c0), mod(mload(add(proof, 0x3a0)), f_q))mstore(add(transcript, 0x5e0), mod(mload(add(proof, 0x3c0)), f_q))mstore(add(transcript, 0x600), mod(mload(add(proof, 0x3e0)), f_q))mstore(add(transcript, 0x620), mod(mload(add(proof, 0x400)), f_q))mstore(add(transcript, 0x640), mod(mload(add(proof, 0x420)), f_q))mstore(add(transcript, 0x660), mod(mload(add(proof, 0x440)), f_q))mstore(add(transcript, 0x680), mod(mload(add(proof, 0x460)), f_q))mstore(add(transcript, 0x6a0), mod(mload(add(proof, 0x480)), f_q))mstore(add(transcript, 0x6c0), mod(mload(add(proof, 0x4a0)), f_q))mstore(add(transcript, 0x6e0), mod(mload(add(proof, 0x4c0)), f_q))mstore(add(transcript, 0x700), mod(mload(add(proof, 0x4e0)), f_q))mstore(add(transcript, 0x720), mod(mload(add(proof, 0x500)), f_q))mstore(add(transcript, 0x740), mod(mload(add(proof, 0x520)), f_q))mstore(add(transcript, 0x760), mod(mload(add(proof, 0x540)), f_q))mstore(add(transcript, 0x780), mod(mload(add(proof, 0x560)), f_q))mstore(add(transcript, 0x7a0), mod(mload(add(proof, 0x580)), f_q))mstore(add(transcript, 0x7c0), mod(mload(add(proof, 0x5a0)), f_q))mstore(add(transcript, 0x7e0), mod(mload(add(proof, 0x5c0)), f_q))mstore(add(transcript, 0x800), mod(mload(add(proof, 0x5e0)), f_q))mstore(add(transcript, 0x820), mod(mload(add(proof, 0x600)), f_q))mstore(add(transcript, 0x840), mod(mload(add(proof, 0x620)), f_q))mstore(add(transcript, 0x860), mod(mload(add(proof, 0x640)), f_q))mstore(add(transcript, 0x880), mod(mload(add(proof, 0x660)), f_q))mstore(add(transcript, 0x8a0), mod(mload(add(proof, 0x680)), f_q))mstore(add(transcript, 0x8c0), mod(mload(add(proof, 0x6a0)), f_q))mstore(add(transcript, 0x8e0), mod(mload(add(proof, 0x6c0)), f_q))mstore(add(transcript, 0x900), mod(mload(add(proof, 0x6e0)), f_q))mstore(add(transcript, 0x920), mod(mload(add(proof, 0x700)), f_q))mstore(add(transcript, 0x940), mod(mload(add(proof, 0x720)), f_q))mstore(add(transcript, 0x960), mod(mload(add(proof, 0x740)), f_q))mstore(add(transcript, 0x980), mod(mload(add(proof, 0x760)), f_q))mstore(add(transcript, 0x9a0), mod(mload(add(proof, 0x780)), f_q))mstore(add(transcript, 0x9c0), mod(mload(add(proof, 0x7a0)), f_q))mstore(add(transcript, 0x9e0), mod(mload(add(proof, 0x7c0)), f_q))mstore(add(transcript, 0xa00), mod(mload(add(proof, 0x7e0)), f_q))mstore(add(transcript, 0xa20), keccak256(add(transcript, 0x5a0), 1152)){ let hash := mload(add(transcript, 0xa20)) mstore(add(transcript, 0xa40), mod(hash, f_q)) mstore(add(transcript, 0xa60), hash) }mstore8(add(transcript, 0xa80), 1)mstore(add(transcript, 0xa80), keccak256(add(transcript, 0xa60), 33)){ let hash := mload(add(transcript, 0xa80)) mstore(add(transcript, 0xaa0), mod(hash, f_q)) mstore(add(transcript, 0xac0), hash) } { let x := mload(add(proof, 0x800)) mstore(add(transcript, 0xae0), x) let y := mload(add(proof, 0x820)) mstore(add(transcript, 0xb00), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0xb20), keccak256(add(transcript, 0xac0), 96)){ let hash := mload(add(transcript, 0xb20)) mstore(add(transcript, 0xb40), mod(hash, f_q)) mstore(add(transcript, 0xb60), hash) } { let x := mload(add(proof, 0x840)) mstore(add(transcript, 0xb80), x) let y := mload(add(proof, 0x860)) mstore(add(transcript, 0xba0), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0xbc0), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x580)), f_q))mstore(add(transcript, 0xbe0), mulmod(mload(add(transcript, 0xbc0)), mload(add(transcript, 0xbc0)), f_q))mstore(add(transcript, 0xc00), mulmod(mload(add(transcript, 0xbe0)), mload(add(transcript, 0xbe0)), f_q))mstore(add(transcript, 0xc20), mulmod(mload(add(transcript, 0xc00)), mload(add(transcript, 0xc00)), f_q))mstore(add(transcript, 0xc40), mulmod(mload(add(transcript, 0xc20)), mload(add(transcript, 0xc20)), f_q))mstore(add(transcript, 0xc60), mulmod(mload(add(transcript, 0xc40)), mload(add(transcript, 0xc40)), f_q))mstore(add(transcript, 0xc80), mulmod(mload(add(transcript, 0xc60)), mload(add(transcript, 0xc60)), f_q))mstore(add(transcript, 0xca0), mulmod(mload(add(transcript, 0xc80)), mload(add(transcript, 0xc80)), f_q))mstore(add(transcript, 0xcc0), mulmod(mload(add(transcript, 0xca0)), mload(add(transcript, 0xca0)), f_q))mstore(add(transcript, 0xce0), mulmod(mload(add(transcript, 0xcc0)), mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0xd00), mulmod(mload(add(transcript, 0xce0)), mload(add(transcript, 0xce0)), f_q))mstore(add(transcript, 0xd20), addmod(mload(add(transcript, 0xd00)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))mstore(add(transcript, 0xd40), mulmod(mload(add(transcript, 0xd20)), 21877555253249509951141793242451973684696534144361143701928820297812832026625, f_q))mstore(add(transcript, 0xd60), mulmod(mload(add(transcript, 0xd40)), 15699029810934084314820646074566828280617789951162923449200398535581206172418, f_q))mstore(add(transcript, 0xd80), addmod(mload(add(transcript, 0x580)), 6189213060905190907425759670690446807930574449253110894497805650994602323199, f_q))mstore(add(transcript, 0xda0), mulmod(mload(add(transcript, 0xd40)), 16553167948716468074998850291160946772606011499093267774599468837293218566225, f_q))mstore(add(transcript, 0xdc0), addmod(mload(add(transcript, 0x580)), 5335074923122807147247555454096328315942352901322766569098735349282589929392, f_q))mstore(add(transcript, 0xde0), mulmod(mload(add(transcript, 0xd40)), 4260969412351770314333984243767775737437927068151180798236715529158398853173, f_q))mstore(add(transcript, 0xe00), addmod(mload(add(transcript, 0x580)), 17627273459487504907912421501489499351110437332264853545461488657417409642444, f_q))mstore(add(transcript, 0xe20), mulmod(mload(add(transcript, 0xd40)), 18302882236472339419631414285403968768409802182737928837767912484847322191909, f_q))mstore(add(transcript, 0xe40), addmod(mload(add(transcript, 0x580)), 3585360635366935802614991459853306320138562217678105505930291701728486303708, f_q))mstore(add(transcript, 0xe60), mulmod(mload(add(transcript, 0xd40)), 4925592601992654644734291590386747644864797672605745962807370354577123815907, f_q))mstore(add(transcript, 0xe80), addmod(mload(add(transcript, 0x580)), 16962650269846620577512114154870527443683566727810288380890833831998684679710, f_q))mstore(add(transcript, 0xea0), mulmod(mload(add(transcript, 0xd40)), 19444693496467964793333684482470811869395409953158764080291550423779334624794, f_q))mstore(add(transcript, 0xec0), addmod(mload(add(transcript, 0x580)), 2443549375371310428912721262786463219152954447257270263406653762796473870823, f_q))mstore(add(transcript, 0xee0), mulmod(mload(add(transcript, 0xd40)), 1, f_q))mstore(add(transcript, 0xf00), addmod(mload(add(transcript, 0x580)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))mstore(add(transcript, 0xf20), mulmod(mload(add(transcript, 0xd40)), 9396103202274256930945606623206526900461945684265495839012435492634193195103, f_q))mstore(add(transcript, 0xf40), addmod(mload(add(transcript, 0x580)), 12492139669565018291300799122050748188086418716150538504685768693941615300514, f_q)){ let prod := mload(add(transcript, 0xd80)) prod := mulmod(mload(add(transcript, 0xdc0)), prod, f_q) mstore(add(transcript, 0xf60), prod) prod := mulmod(mload(add(transcript, 0xe00)), prod, f_q) mstore(add(transcript, 0xf80), prod) prod := mulmod(mload(add(transcript, 0xe40)), prod, f_q) mstore(add(transcript, 0xfa0), prod) prod := mulmod(mload(add(transcript, 0xe80)), prod, f_q) mstore(add(transcript, 0xfc0), prod) prod := mulmod(mload(add(transcript, 0xec0)), prod, f_q) mstore(add(transcript, 0xfe0), prod) prod := mulmod(mload(add(transcript, 0xf00)), prod, f_q) mstore(add(transcript, 0x1000), prod) prod := mulmod(mload(add(transcript, 0xf40)), prod, f_q) mstore(add(transcript, 0x1020), prod) prod := mulmod(mload(add(transcript, 0xd20)), prod, f_q) mstore(add(transcript, 0x1040), prod) }mstore(add(transcript, 0x1080), 32)mstore(add(transcript, 0x10a0), 32)mstore(add(transcript, 0x10c0), 32)mstore(add(transcript, 0x10e0), mload(add(transcript, 0x1040)))mstore(add(transcript, 0x1100), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x1120), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x1080), 0xc0, add(transcript, 0x1060), 0x20), 1), success){ let inv := mload(add(transcript, 0x1060)) let v v := mload(add(transcript, 0xd20)) mstore(add(transcript, 0xd20), mulmod(mload(add(transcript, 0x1020)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xf40)) mstore(add(transcript, 0xf40), mulmod(mload(add(transcript, 0x1000)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xf00)) mstore(add(transcript, 0xf00), mulmod(mload(add(transcript, 0xfe0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xec0)) mstore(add(transcript, 0xec0), mulmod(mload(add(transcript, 0xfc0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe80)) mstore(add(transcript, 0xe80), mulmod(mload(add(transcript, 0xfa0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe40)) mstore(add(transcript, 0xe40), mulmod(mload(add(transcript, 0xf80)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe00)) mstore(add(transcript, 0xe00), mulmod(mload(add(transcript, 0xf60)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xdc0)) mstore(add(transcript, 0xdc0), mulmod(mload(add(transcript, 0xd80)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0xd80), inv) }mstore(add(transcript, 0x1140), mulmod(mload(add(transcript, 0xd60)), mload(add(transcript, 0xd80)), f_q))mstore(add(transcript, 0x1160), mulmod(mload(add(transcript, 0xda0)), mload(add(transcript, 0xdc0)), f_q))mstore(add(transcript, 0x1180), mulmod(mload(add(transcript, 0xde0)), mload(add(transcript, 0xe00)), f_q))mstore(add(transcript, 0x11a0), mulmod(mload(add(transcript, 0xe20)), mload(add(transcript, 0xe40)), f_q))mstore(add(transcript, 0x11c0), mulmod(mload(add(transcript, 0xe60)), mload(add(transcript, 0xe80)), f_q))mstore(add(transcript, 0x11e0), mulmod(mload(add(transcript, 0xea0)), mload(add(transcript, 0xec0)), f_q))mstore(add(transcript, 0x1200), mulmod(mload(add(transcript, 0xee0)), mload(add(transcript, 0xf00)), f_q))mstore(add(transcript, 0x1220), mulmod(mload(add(transcript, 0xf20)), mload(add(transcript, 0xf40)), f_q)){ let result := mulmod(mload(add(transcript, 0x1200)), mload(add(transcript, 0x20)), f_q)result := addmod(mulmod(mload(add(transcript, 0x1220)), mload(add(transcript, 0x40)), f_q), result, f_q)mstore(add(transcript, 0x1240), result) }mstore(add(transcript, 0x1260), addmod(mload(add(transcript, 0x5c0)), mload(add(transcript, 0x6e0)), f_q))mstore(add(transcript, 0x1280), mulmod(mload(add(transcript, 0x1260)), mload(add(transcript, 0x1260)), f_q))mstore(add(transcript, 0x12a0), mulmod(mload(add(transcript, 0x1280)), mload(add(transcript, 0x1280)), f_q))mstore(add(transcript, 0x12c0), mulmod(mload(add(transcript, 0x1260)), mload(add(transcript, 0x12a0)), f_q))mstore(add(transcript, 0x12e0), mulmod(mload(add(transcript, 0x12c0)), 2910766817845651019878574839501801340070030115151021261302834310722729507541, f_q))mstore(add(transcript, 0x1300), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x700)), f_q))mstore(add(transcript, 0x1320), mulmod(mload(add(transcript, 0x1300)), mload(add(transcript, 0x1300)), f_q))mstore(add(transcript, 0x1340), mulmod(mload(add(transcript, 0x1320)), mload(add(transcript, 0x1320)), f_q))mstore(add(transcript, 0x1360), mulmod(mload(add(transcript, 0x1300)), mload(add(transcript, 0x1340)), f_q))mstore(add(transcript, 0x1380), mulmod(mload(add(transcript, 0x1360)), 19727366863391167538122140361473584127147630672623100827934084310230022599144, f_q))mstore(add(transcript, 0x13a0), addmod(mload(add(transcript, 0x12e0)), mload(add(transcript, 0x1380)), f_q))mstore(add(transcript, 0x13c0), addmod(mload(add(transcript, 0x13a0)), sub(f_q, mload(add(transcript, 0x600))), f_q))mstore(add(transcript, 0x13e0), mulmod(mload(add(transcript, 0x13c0)), mload(add(transcript, 0x780)), f_q))mstore(add(transcript, 0x1400), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x13e0)), f_q))mstore(add(transcript, 0x1420), mulmod(mload(add(transcript, 0x12c0)), 5776684794125549462448597414050232243778680302179439492664047328281728356345, f_q))mstore(add(transcript, 0x1440), mulmod(mload(add(transcript, 0x1360)), 8348174920934122550483593999453880006756108121341067172388445916328941978568, f_q))mstore(add(transcript, 0x1460), addmod(mload(add(transcript, 0x1420)), mload(add(transcript, 0x1440)), f_q))mstore(add(transcript, 0x1480), addmod(mload(add(transcript, 0x1460)), sub(f_q, mload(add(transcript, 0x620))), f_q))mstore(add(transcript, 0x14a0), mulmod(mload(add(transcript, 0x1480)), mload(add(transcript, 0x780)), f_q))mstore(add(transcript, 0x14c0), addmod(mload(add(transcript, 0x1400)), mload(add(transcript, 0x14a0)), f_q))mstore(add(transcript, 0x14e0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x14c0)), f_q))mstore(add(transcript, 0x1500), addmod(mload(add(transcript, 0x12c0)), sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x1520), mulmod(mload(add(transcript, 0x1500)), mload(add(transcript, 0x7a0)), f_q))mstore(add(transcript, 0x1540), addmod(mload(add(transcript, 0x14e0)), mload(add(transcript, 0x1520)), f_q))mstore(add(transcript, 0x1560), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1540)), f_q))mstore(add(transcript, 0x1580), mulmod(mload(add(transcript, 0x640)), 2910766817845651019878574839501801340070030115151021261302834310722729507541, f_q))mstore(add(transcript, 0x15a0), mulmod(mload(add(transcript, 0x1300)), 19727366863391167538122140361473584127147630672623100827934084310230022599144, f_q))mstore(add(transcript, 0x15c0), addmod(mload(add(transcript, 0x1580)), mload(add(transcript, 0x15a0)), f_q))mstore(add(transcript, 0x15e0), addmod(mload(add(transcript, 0x15c0)), mload(add(transcript, 0x6a0)), f_q))mstore(add(transcript, 0x1600), mulmod(mload(add(transcript, 0x15e0)), mload(add(transcript, 0x15e0)), f_q))mstore(add(transcript, 0x1620), mulmod(mload(add(transcript, 0x1600)), mload(add(transcript, 0x1600)), f_q))mstore(add(transcript, 0x1640), mulmod(mload(add(transcript, 0x15e0)), mload(add(transcript, 0x1620)), f_q))mstore(add(transcript, 0x1660), mulmod(mload(add(transcript, 0x600)), 8897705321156975119607866206188469715432233408805434913352778521345836531302, f_q))mstore(add(transcript, 0x1680), mulmod(mload(add(transcript, 0x620)), 13897810991298242824030978581179475767377101082166056046492926701399149797630, f_q))mstore(add(transcript, 0x16a0), addmod(mload(add(transcript, 0x1660)), mload(add(transcript, 0x1680)), f_q))mstore(add(transcript, 0x16c0), addmod(mload(add(transcript, 0x1640)), sub(f_q, mload(add(transcript, 0x16a0))), f_q))mstore(add(transcript, 0x16e0), mulmod(mload(add(transcript, 0x16c0)), mload(add(transcript, 0x7a0)), f_q))mstore(add(transcript, 0x1700), addmod(mload(add(transcript, 0x1560)), mload(add(transcript, 0x16e0)), f_q))mstore(add(transcript, 0x1720), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1700)), f_q))mstore(add(transcript, 0x1740), mulmod(mload(add(transcript, 0x640)), 5776684794125549462448597414050232243778680302179439492664047328281728356345, f_q))mstore(add(transcript, 0x1760), mulmod(mload(add(transcript, 0x1300)), 8348174920934122550483593999453880006756108121341067172388445916328941978568, f_q))mstore(add(transcript, 0x1780), addmod(mload(add(transcript, 0x1740)), mload(add(transcript, 0x1760)), f_q))mstore(add(transcript, 0x17a0), addmod(mload(add(transcript, 0x1780)), mload(add(transcript, 0x6c0)), f_q))mstore(add(transcript, 0x17c0), mulmod(mload(add(transcript, 0x600)), 7127083008168878795310303301757642617203533252990949589494537404444738046722, f_q))mstore(add(transcript, 0x17e0), mulmod(mload(add(transcript, 0x620)), 10251091711782631878897995303436082826711938358699127319815611151510940403902, f_q))mstore(add(transcript, 0x1800), addmod(mload(add(transcript, 0x17c0)), mload(add(transcript, 0x17e0)), f_q))mstore(add(transcript, 0x1820), addmod(mload(add(transcript, 0x17a0)), sub(f_q, mload(add(transcript, 0x1800))), f_q))mstore(add(transcript, 0x1840), mulmod(mload(add(transcript, 0x1820)), mload(add(transcript, 0x7a0)), f_q))mstore(add(transcript, 0x1860), addmod(mload(add(transcript, 0x1720)), mload(add(transcript, 0x1840)), f_q))mstore(add(transcript, 0x1880), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1860)), f_q))mstore(add(transcript, 0x18a0), addmod(1, sub(f_q, mload(add(transcript, 0x760))), f_q))mstore(add(transcript, 0x18c0), mulmod(mload(add(transcript, 0x18a0)), mload(add(transcript, 0x760)), f_q))mstore(add(transcript, 0x18e0), addmod(2, sub(f_q, mload(add(transcript, 0x760))), f_q))mstore(add(transcript, 0x1900), mulmod(mload(add(transcript, 0x18e0)), mload(add(transcript, 0x18c0)), f_q))mstore(add(transcript, 0x1920), addmod(4, sub(f_q, mload(add(transcript, 0x760))), f_q))mstore(add(transcript, 0x1940), mulmod(mload(add(transcript, 0x1920)), mload(add(transcript, 0x1900)), f_q))mstore(add(transcript, 0x1960), addmod(mload(add(transcript, 0x680)), mload(add(transcript, 0x5c0)), f_q))mstore(add(transcript, 0x1980), addmod(mload(add(transcript, 0x1960)), sub(f_q, mload(add(transcript, 0x600))), f_q))mstore(add(transcript, 0x19a0), mulmod(mload(add(transcript, 0x1980)), mload(add(transcript, 0x1940)), f_q))mstore(add(transcript, 0x19c0), addmod(mload(add(transcript, 0x1880)), mload(add(transcript, 0x19a0)), f_q))mstore(add(transcript, 0x19e0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x19c0)), f_q))mstore(add(transcript, 0x1a00), addmod(mload(add(transcript, 0x660)), sub(f_q, mload(add(transcript, 0x620))), f_q))mstore(add(transcript, 0x1a20), mulmod(mload(add(transcript, 0x1a00)), mload(add(transcript, 0x1940)), f_q))mstore(add(transcript, 0x1a40), addmod(mload(add(transcript, 0x19e0)), mload(add(transcript, 0x1a20)), f_q))mstore(add(transcript, 0x1a60), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1a40)), f_q))mstore(add(transcript, 0x1a80), mulmod(mload(add(transcript, 0x13c0)), mload(add(transcript, 0x7c0)), f_q))mstore(add(transcript, 0x1aa0), addmod(mload(add(transcript, 0x1a60)), mload(add(transcript, 0x1a80)), f_q))mstore(add(transcript, 0x1ac0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1aa0)), f_q))mstore(add(transcript, 0x1ae0), mulmod(mload(add(transcript, 0x1480)), mload(add(transcript, 0x7c0)), f_q))mstore(add(transcript, 0x1b00), addmod(mload(add(transcript, 0x1ac0)), mload(add(transcript, 0x1ae0)), f_q))mstore(add(transcript, 0x1b20), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1b00)), f_q))mstore(add(transcript, 0x1b40), mulmod(mload(add(transcript, 0x1500)), mload(add(transcript, 0x7e0)), f_q))mstore(add(transcript, 0x1b60), addmod(mload(add(transcript, 0x1b20)), mload(add(transcript, 0x1b40)), f_q))mstore(add(transcript, 0x1b80), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1b60)), f_q))mstore(add(transcript, 0x1ba0), mulmod(mload(add(transcript, 0x16c0)), mload(add(transcript, 0x7e0)), f_q))mstore(add(transcript, 0x1bc0), addmod(mload(add(transcript, 0x1b80)), mload(add(transcript, 0x1ba0)), f_q))mstore(add(transcript, 0x1be0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1bc0)), f_q))mstore(add(transcript, 0x1c00), mulmod(mload(add(transcript, 0x1820)), mload(add(transcript, 0x7e0)), f_q))mstore(add(transcript, 0x1c20), addmod(mload(add(transcript, 0x1be0)), mload(add(transcript, 0x1c00)), f_q))mstore(add(transcript, 0x1c40), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1c20)), f_q))mstore(add(transcript, 0x1c60), addmod(3, sub(f_q, mload(add(transcript, 0x760))), f_q))mstore(add(transcript, 0x1c80), mulmod(mload(add(transcript, 0x1c60)), mload(add(transcript, 0x1900)), f_q))mstore(add(transcript, 0x1ca0), mulmod(mload(add(transcript, 0x1980)), mload(add(transcript, 0x1c80)), f_q))mstore(add(transcript, 0x1cc0), addmod(mload(add(transcript, 0x1c40)), mload(add(transcript, 0x1ca0)), f_q))mstore(add(transcript, 0x1ce0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1cc0)), f_q))mstore(add(transcript, 0x1d00), mulmod(mload(add(transcript, 0x1a00)), mload(add(transcript, 0x1c80)), f_q))mstore(add(transcript, 0x1d20), addmod(mload(add(transcript, 0x1ce0)), mload(add(transcript, 0x1d00)), f_q))mstore(add(transcript, 0x1d40), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1d20)), f_q))mstore(add(transcript, 0x1d60), mulmod(mload(add(transcript, 0x18e0)), mload(add(transcript, 0x760)), f_q))mstore(add(transcript, 0x1d80), mulmod(mload(add(transcript, 0x1c60)), mload(add(transcript, 0x1d60)), f_q))mstore(add(transcript, 0x1da0), mulmod(mload(add(transcript, 0x1920)), mload(add(transcript, 0x1d80)), f_q))mstore(add(transcript, 0x1dc0), mulmod(mload(add(transcript, 0x640)), mload(add(transcript, 0x1da0)), f_q))mstore(add(transcript, 0x1de0), addmod(1, sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x1e00), mulmod(mload(add(transcript, 0x1de0)), mload(add(transcript, 0x1dc0)), f_q))mstore(add(transcript, 0x1e20), addmod(mload(add(transcript, 0x1d40)), mload(add(transcript, 0x1e00)), f_q))mstore(add(transcript, 0x1e40), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1e20)), f_q))mstore(add(transcript, 0x1e60), mulmod(2, mload(add(transcript, 0x640)), f_q))mstore(add(transcript, 0x1e80), addmod(mload(add(transcript, 0x5e0)), sub(f_q, mload(add(transcript, 0x5c0))), f_q))mstore(add(transcript, 0x1ea0), mulmod(mload(add(transcript, 0x1e80)), mload(add(transcript, 0x1e60)), f_q))mstore(add(transcript, 0x1ec0), addmod(mload(add(transcript, 0x600)), sub(f_q, mload(add(transcript, 0x5c0))), f_q))mstore(add(transcript, 0x1ee0), addmod(mload(add(transcript, 0x1ea0)), sub(f_q, mload(add(transcript, 0x1ec0))), f_q))mstore(add(transcript, 0x1f00), addmod(mload(add(transcript, 0x5e0)), sub(f_q, mload(add(transcript, 0x620))), f_q))mstore(add(transcript, 0x1f20), addmod(mload(add(transcript, 0x1ee0)), sub(f_q, mload(add(transcript, 0x1f00))), f_q))mstore(add(transcript, 0x1f40), mulmod(mload(add(transcript, 0x1f20)), mload(add(transcript, 0x1da0)), f_q))mstore(add(transcript, 0x1f60), addmod(mload(add(transcript, 0x1e40)), mload(add(transcript, 0x1f40)), f_q))mstore(add(transcript, 0x1f80), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x1f60)), f_q))mstore(add(transcript, 0x1fa0), mulmod(mload(add(transcript, 0x1c60)), mload(add(transcript, 0x18c0)), f_q))mstore(add(transcript, 0x1fc0), mulmod(mload(add(transcript, 0x1920)), mload(add(transcript, 0x1fa0)), f_q))mstore(add(transcript, 0x1fe0), addmod(mload(add(transcript, 0x5c0)), mload(add(transcript, 0x5e0)), f_q))mstore(add(transcript, 0x2000), addmod(mload(add(transcript, 0x1fe0)), sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x2020), mulmod(mload(add(transcript, 0x2000)), mload(add(transcript, 0x1fc0)), f_q))mstore(add(transcript, 0x2040), addmod(mload(add(transcript, 0x1f80)), mload(add(transcript, 0x2020)), f_q))mstore(add(transcript, 0x2060), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2040)), f_q))mstore(add(transcript, 0x2080), addmod(mload(add(transcript, 0x2060)), mload(add(transcript, 0x2020)), f_q))mstore(add(transcript, 0x20a0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2080)), f_q))mstore(add(transcript, 0x20c0), addmod(1, sub(f_q, mload(add(transcript, 0x8e0))), f_q))mstore(add(transcript, 0x20e0), mulmod(mload(add(transcript, 0x20c0)), mload(add(transcript, 0x1200)), f_q))mstore(add(transcript, 0x2100), addmod(mload(add(transcript, 0x20a0)), mload(add(transcript, 0x20e0)), f_q))mstore(add(transcript, 0x2120), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2100)), f_q))mstore(add(transcript, 0x2140), mulmod(mload(add(transcript, 0x940)), mload(add(transcript, 0x940)), f_q))mstore(add(transcript, 0x2160), addmod(mload(add(transcript, 0x2140)), sub(f_q, mload(add(transcript, 0x940))), f_q))mstore(add(transcript, 0x2180), mulmod(mload(add(transcript, 0x2160)), mload(add(transcript, 0x1140)), f_q))mstore(add(transcript, 0x21a0), addmod(mload(add(transcript, 0x2120)), mload(add(transcript, 0x2180)), f_q))mstore(add(transcript, 0x21c0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x21a0)), f_q))mstore(add(transcript, 0x21e0), addmod(mload(add(transcript, 0x940)), sub(f_q, mload(add(transcript, 0x920))), f_q))mstore(add(transcript, 0x2200), mulmod(mload(add(transcript, 0x21e0)), mload(add(transcript, 0x1200)), f_q))mstore(add(transcript, 0x2220), addmod(mload(add(transcript, 0x21c0)), mload(add(transcript, 0x2200)), f_q))mstore(add(transcript, 0x2240), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2220)), f_q))mstore(add(transcript, 0x2260), addmod(1, sub(f_q, mload(add(transcript, 0x1140))), f_q))mstore(add(transcript, 0x2280), addmod(mload(add(transcript, 0x1160)), mload(add(transcript, 0x1180)), f_q))mstore(add(transcript, 0x22a0), addmod(mload(add(transcript, 0x2280)), mload(add(transcript, 0x11a0)), f_q))mstore(add(transcript, 0x22c0), addmod(mload(add(transcript, 0x22a0)), mload(add(transcript, 0x11c0)), f_q))mstore(add(transcript, 0x22e0), addmod(mload(add(transcript, 0x22c0)), mload(add(transcript, 0x11e0)), f_q))mstore(add(transcript, 0x2300), addmod(mload(add(transcript, 0x2260)), sub(f_q, mload(add(transcript, 0x22e0))), f_q))mstore(add(transcript, 0x2320), mulmod(mload(add(transcript, 0x820)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2340), addmod(mload(add(transcript, 0x6a0)), mload(add(transcript, 0x2320)), f_q))mstore(add(transcript, 0x2360), addmod(mload(add(transcript, 0x2340)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2380), mulmod(mload(add(transcript, 0x840)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x23a0), addmod(mload(add(transcript, 0x5c0)), mload(add(transcript, 0x2380)), f_q))mstore(add(transcript, 0x23c0), addmod(mload(add(transcript, 0x23a0)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x23e0), mulmod(mload(add(transcript, 0x23c0)), mload(add(transcript, 0x2360)), f_q))mstore(add(transcript, 0x2400), mulmod(mload(add(transcript, 0x860)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2420), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x2400)), f_q))mstore(add(transcript, 0x2440), addmod(mload(add(transcript, 0x2420)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2460), mulmod(mload(add(transcript, 0x2440)), mload(add(transcript, 0x23e0)), f_q))mstore(add(transcript, 0x2480), mulmod(mload(add(transcript, 0x880)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x24a0), addmod(mload(add(transcript, 0x6c0)), mload(add(transcript, 0x2480)), f_q))mstore(add(transcript, 0x24c0), addmod(mload(add(transcript, 0x24a0)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x24e0), mulmod(mload(add(transcript, 0x24c0)), mload(add(transcript, 0x2460)), f_q))mstore(add(transcript, 0x2500), mulmod(mload(add(transcript, 0x24e0)), mload(add(transcript, 0x900)), f_q))mstore(add(transcript, 0x2520), mulmod(1, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2540), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x2520)), f_q))mstore(add(transcript, 0x2560), addmod(mload(add(transcript, 0x6a0)), mload(add(transcript, 0x2540)), f_q))mstore(add(transcript, 0x2580), addmod(mload(add(transcript, 0x2560)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x25a0), mulmod(4131629893567559867359510883348571134090853742863529169391034518566172092834, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x25c0), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x25a0)), f_q))mstore(add(transcript, 0x25e0), addmod(mload(add(transcript, 0x5c0)), mload(add(transcript, 0x25c0)), f_q))mstore(add(transcript, 0x2600), addmod(mload(add(transcript, 0x25e0)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2620), mulmod(mload(add(transcript, 0x2600)), mload(add(transcript, 0x2580)), f_q))mstore(add(transcript, 0x2640), mulmod(8910878055287538404433155982483128285667088683464058436815641868457422632747, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2660), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x2640)), f_q))mstore(add(transcript, 0x2680), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x2660)), f_q))mstore(add(transcript, 0x26a0), addmod(mload(add(transcript, 0x2680)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x26c0), mulmod(mload(add(transcript, 0x26a0)), mload(add(transcript, 0x2620)), f_q))mstore(add(transcript, 0x26e0), mulmod(11166246659983828508719468090013646171463329086121580628794302409516816350802, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2700), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x26e0)), f_q))mstore(add(transcript, 0x2720), addmod(mload(add(transcript, 0x6c0)), mload(add(transcript, 0x2700)), f_q))mstore(add(transcript, 0x2740), addmod(mload(add(transcript, 0x2720)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2760), mulmod(mload(add(transcript, 0x2740)), mload(add(transcript, 0x26c0)), f_q))mstore(add(transcript, 0x2780), mulmod(mload(add(transcript, 0x2760)), mload(add(transcript, 0x8e0)), f_q))mstore(add(transcript, 0x27a0), addmod(mload(add(transcript, 0x2500)), sub(f_q, mload(add(transcript, 0x2780))), f_q))mstore(add(transcript, 0x27c0), mulmod(mload(add(transcript, 0x27a0)), mload(add(transcript, 0x2300)), f_q))mstore(add(transcript, 0x27e0), addmod(mload(add(transcript, 0x2240)), mload(add(transcript, 0x27c0)), f_q))mstore(add(transcript, 0x2800), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x27e0)), f_q))mstore(add(transcript, 0x2820), mulmod(mload(add(transcript, 0x8a0)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2840), addmod(mload(add(transcript, 0x640)), mload(add(transcript, 0x2820)), f_q))mstore(add(transcript, 0x2860), addmod(mload(add(transcript, 0x2840)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2880), mulmod(mload(add(transcript, 0x8c0)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x28a0), addmod(mload(add(transcript, 0x1240)), mload(add(transcript, 0x2880)), f_q))mstore(add(transcript, 0x28c0), addmod(mload(add(transcript, 0x28a0)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x28e0), mulmod(mload(add(transcript, 0x28c0)), mload(add(transcript, 0x2860)), f_q))mstore(add(transcript, 0x2900), mulmod(mload(add(transcript, 0x28e0)), mload(add(transcript, 0x960)), f_q))mstore(add(transcript, 0x2920), mulmod(284840088355319032285349970403338060113257071685626700086398481893096618818, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2940), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x2920)), f_q))mstore(add(transcript, 0x2960), addmod(mload(add(transcript, 0x640)), mload(add(transcript, 0x2940)), f_q))mstore(add(transcript, 0x2980), addmod(mload(add(transcript, 0x2960)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x29a0), mulmod(21134065618345176623193549882539580312263652408302468683943992798037078993309, mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x29c0), mulmod(mload(add(transcript, 0x580)), mload(add(transcript, 0x29a0)), f_q))mstore(add(transcript, 0x29e0), addmod(mload(add(transcript, 0x1240)), mload(add(transcript, 0x29c0)), f_q))mstore(add(transcript, 0x2a00), addmod(mload(add(transcript, 0x29e0)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2a20), mulmod(mload(add(transcript, 0x2a00)), mload(add(transcript, 0x2980)), f_q))mstore(add(transcript, 0x2a40), mulmod(mload(add(transcript, 0x2a20)), mload(add(transcript, 0x940)), f_q))mstore(add(transcript, 0x2a60), addmod(mload(add(transcript, 0x2900)), sub(f_q, mload(add(transcript, 0x2a40))), f_q))mstore(add(transcript, 0x2a80), mulmod(mload(add(transcript, 0x2a60)), mload(add(transcript, 0x2300)), f_q))mstore(add(transcript, 0x2aa0), addmod(mload(add(transcript, 0x2800)), mload(add(transcript, 0x2a80)), f_q))mstore(add(transcript, 0x2ac0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2aa0)), f_q))mstore(add(transcript, 0x2ae0), addmod(1, sub(f_q, mload(add(transcript, 0x980))), f_q))mstore(add(transcript, 0x2b00), mulmod(mload(add(transcript, 0x2ae0)), mload(add(transcript, 0x1200)), f_q))mstore(add(transcript, 0x2b20), addmod(mload(add(transcript, 0x2ac0)), mload(add(transcript, 0x2b00)), f_q))mstore(add(transcript, 0x2b40), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2b20)), f_q))mstore(add(transcript, 0x2b60), mulmod(mload(add(transcript, 0x980)), mload(add(transcript, 0x980)), f_q))mstore(add(transcript, 0x2b80), addmod(mload(add(transcript, 0x2b60)), sub(f_q, mload(add(transcript, 0x980))), f_q))mstore(add(transcript, 0x2ba0), mulmod(mload(add(transcript, 0x2b80)), mload(add(transcript, 0x1140)), f_q))mstore(add(transcript, 0x2bc0), addmod(mload(add(transcript, 0x2b40)), mload(add(transcript, 0x2ba0)), f_q))mstore(add(transcript, 0x2be0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2bc0)), f_q))mstore(add(transcript, 0x2c00), addmod(mload(add(transcript, 0x9c0)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2c20), mulmod(mload(add(transcript, 0x2c00)), mload(add(transcript, 0x9a0)), f_q))mstore(add(transcript, 0x2c40), addmod(mload(add(transcript, 0xa00)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2c60), mulmod(mload(add(transcript, 0x2c40)), mload(add(transcript, 0x2c20)), f_q))mstore(add(transcript, 0x2c80), mulmod(256, mload(add(transcript, 0x600)), f_q))mstore(add(transcript, 0x2ca0), addmod(mload(add(transcript, 0x5c0)), sub(f_q, mload(add(transcript, 0x2c80))), f_q))mstore(add(transcript, 0x2cc0), mulmod(mload(add(transcript, 0x2ca0)), mload(add(transcript, 0x740)), f_q))mstore(add(transcript, 0x2ce0), addmod(mload(add(transcript, 0x2cc0)), mload(add(transcript, 0x220)), f_q))mstore(add(transcript, 0x2d00), mulmod(mload(add(transcript, 0x2ce0)), mload(add(transcript, 0x980)), f_q))mstore(add(transcript, 0x2d20), addmod(mload(add(transcript, 0x720)), mload(add(transcript, 0x280)), f_q))mstore(add(transcript, 0x2d40), mulmod(mload(add(transcript, 0x2d20)), mload(add(transcript, 0x2d00)), f_q))mstore(add(transcript, 0x2d60), addmod(mload(add(transcript, 0x2c60)), sub(f_q, mload(add(transcript, 0x2d40))), f_q))mstore(add(transcript, 0x2d80), mulmod(mload(add(transcript, 0x2d60)), mload(add(transcript, 0x2300)), f_q))mstore(add(transcript, 0x2da0), addmod(mload(add(transcript, 0x2be0)), mload(add(transcript, 0x2d80)), f_q))mstore(add(transcript, 0x2dc0), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2da0)), f_q))mstore(add(transcript, 0x2de0), addmod(mload(add(transcript, 0x9c0)), sub(f_q, mload(add(transcript, 0xa00))), f_q))mstore(add(transcript, 0x2e00), mulmod(mload(add(transcript, 0x2de0)), mload(add(transcript, 0x1200)), f_q))mstore(add(transcript, 0x2e20), addmod(mload(add(transcript, 0x2dc0)), mload(add(transcript, 0x2e00)), f_q))mstore(add(transcript, 0x2e40), mulmod(mload(add(transcript, 0x3e0)), mload(add(transcript, 0x2e20)), f_q))mstore(add(transcript, 0x2e60), mulmod(mload(add(transcript, 0x2de0)), mload(add(transcript, 0x2300)), f_q))mstore(add(transcript, 0x2e80), addmod(mload(add(transcript, 0x9c0)), sub(f_q, mload(add(transcript, 0x9e0))), f_q))mstore(add(transcript, 0x2ea0), mulmod(mload(add(transcript, 0x2e80)), mload(add(transcript, 0x2e60)), f_q))mstore(add(transcript, 0x2ec0), addmod(mload(add(transcript, 0x2e40)), mload(add(transcript, 0x2ea0)), f_q))mstore(add(transcript, 0x2ee0), mulmod(mload(add(transcript, 0xd00)), mload(add(transcript, 0xd00)), f_q))mstore(add(transcript, 0x2f00), mulmod(mload(add(transcript, 0x2ee0)), mload(add(transcript, 0xd00)), f_q))mstore(add(transcript, 0x2f20), mulmod(mload(add(transcript, 0x2f00)), mload(add(transcript, 0xd00)), f_q))mstore(add(transcript, 0x2f40), mulmod(mload(add(transcript, 0x2f20)), mload(add(transcript, 0xd00)), f_q))mstore(add(transcript, 0x2f60), mulmod(1, mload(add(transcript, 0xd00)), f_q))mstore(add(transcript, 0x2f80), mulmod(1, mload(add(transcript, 0x2ee0)), f_q))mstore(add(transcript, 0x2fa0), mulmod(1, mload(add(transcript, 0x2f00)), f_q))mstore(add(transcript, 0x2fc0), mulmod(1, mload(add(transcript, 0x2f20)), f_q))mstore(add(transcript, 0x2fe0), mulmod(mload(add(transcript, 0x2ec0)), mload(add(transcript, 0xd20)), f_q))mstore(add(transcript, 0x3000), mulmod(mload(add(transcript, 0xbc0)), mload(add(transcript, 0x580)), f_q))mstore(add(transcript, 0x3020), mulmod(mload(add(transcript, 0x580)), 1, f_q))mstore(add(transcript, 0x3040), addmod(mload(add(transcript, 0xb40)), sub(f_q, mload(add(transcript, 0x3020))), f_q))mstore(add(transcript, 0x3060), mulmod(mload(add(transcript, 0x580)), 9396103202274256930945606623206526900461945684265495839012435492634193195103, f_q))mstore(add(transcript, 0x3080), addmod(mload(add(transcript, 0xb40)), sub(f_q, mload(add(transcript, 0x3060))), f_q))mstore(add(transcript, 0x30a0), mulmod(mload(add(transcript, 0x580)), 15699029810934084314820646074566828280617789951162923449200398535581206172418, f_q))mstore(add(transcript, 0x30c0), addmod(mload(add(transcript, 0xb40)), sub(f_q, mload(add(transcript, 0x30a0))), f_q))mstore(add(transcript, 0x30e0), mulmod(mload(add(transcript, 0x580)), 19444693496467964793333684482470811869395409953158764080291550423779334624794, f_q))mstore(add(transcript, 0x3100), addmod(mload(add(transcript, 0xb40)), sub(f_q, mload(add(transcript, 0x30e0))), f_q)){ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 14935689044936328720213520384837211407239373163407808768092422456738089171339, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 6952553826902946502032885360420063681308991237008225575605781729837719324278, f_q), f_q), result, f_q)mstore(add(transcript, 0x3120), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 7540907510155698387256503820143330389809914548046512731972450943457626251574, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 17454089668527239794105182244994964593641145239866915085378986192780276655988, f_q), f_q), result, f_q)mstore(add(transcript, 0x3140), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 16765245179638222004592619476379737764479697804128512065226459610007790881832, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 6067403861988280018436561787453590745850405443026581205331008293509136248791, f_q), f_q), result, f_q)mstore(add(transcript, 0x3160), result) }mstore(add(transcript, 0x3180), mulmod(1, mload(add(transcript, 0x3040)), f_q))mstore(add(transcript, 0x31a0), mulmod(mload(add(transcript, 0x3180)), mload(add(transcript, 0x3080)), f_q))mstore(add(transcript, 0x31c0), mulmod(mload(add(transcript, 0x31a0)), mload(add(transcript, 0x3100)), f_q)){ let result := mulmod(mload(add(transcript, 0xb40)), 1, f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q), result, f_q)mstore(add(transcript, 0x31e0), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 13346277807347402051479003338644866680074640264080882830084838995653627694322, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 8541965064491873170767402406612408408473724136335151513613365190922180801295, f_q), f_q), result, f_q)mstore(add(transcript, 0x3200), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 9130318747744625055991020866335675116974647447373438669980034404542087728591, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 17654030801727560324741115319652541746559479525075366613702001578587072243451, f_q), f_q), result, f_q)mstore(add(transcript, 0x3220), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0xbc0)), 8968217942074169282201771672973351205073655055696863512223304343263448008755, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0xbc0)), 15489683287416706862113636648384499783884413315698913841173435408703605255719, f_q), f_q), result, f_q)mstore(add(transcript, 0x3240), result) }mstore(add(transcript, 0x3260), mulmod(mload(add(transcript, 0x31a0)), mload(add(transcript, 0x30c0)), f_q)){ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0x580)), 12492139669565018291300799122050748188086418716150538504685768693941615300515, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0x580)), 9396103202274256930945606623206526900461945684265495839012435492634193195102, f_q), f_q), result, f_q)mstore(add(transcript, 0x3280), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0x580)), 9396103202274256930945606623206526900461945684265495839012435492634193195102, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0x580)), 11903785986312266406077180662327481479585495405112251348319099480321708373219, f_q), f_q), result, f_q)mstore(add(transcript, 0x32a0), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0x580)), 2443549375371310428912721262786463219152954447257270263406653762796473870824, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0x580)), 19444693496467964793333684482470811869395409953158764080291550423779334624793, f_q), f_q), result, f_q)mstore(add(transcript, 0x32c0), result) }{ let result := mulmod(mload(add(transcript, 0xb40)), mulmod(mload(add(transcript, 0x580)), 19444693496467964793333684482470811869395409953158764080291550423779334624793, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x580)), mulmod(mload(add(transcript, 0x580)), 14519100894475310148599392892084064224530612280553018117484180069202210808887, f_q), f_q), result, f_q)mstore(add(transcript, 0x32e0), result) }mstore(add(transcript, 0x3300), mulmod(mload(add(transcript, 0x3180)), mload(add(transcript, 0x3100)), f_q)){ let prod := mload(add(transcript, 0x3120)) prod := mulmod(mload(add(transcript, 0x3140)), prod, f_q) mstore(add(transcript, 0x3320), prod) prod := mulmod(mload(add(transcript, 0x3160)), prod, f_q) mstore(add(transcript, 0x3340), prod) prod := mulmod(mload(add(transcript, 0x31e0)), prod, f_q) mstore(add(transcript, 0x3360), prod) prod := mulmod(mload(add(transcript, 0x3180)), prod, f_q) mstore(add(transcript, 0x3380), prod) prod := mulmod(mload(add(transcript, 0x3200)), prod, f_q) mstore(add(transcript, 0x33a0), prod) prod := mulmod(mload(add(transcript, 0x3220)), prod, f_q) mstore(add(transcript, 0x33c0), prod) prod := mulmod(mload(add(transcript, 0x3240)), prod, f_q) mstore(add(transcript, 0x33e0), prod) prod := mulmod(mload(add(transcript, 0x3260)), prod, f_q) mstore(add(transcript, 0x3400), prod) prod := mulmod(mload(add(transcript, 0x3280)), prod, f_q) mstore(add(transcript, 0x3420), prod) prod := mulmod(mload(add(transcript, 0x32a0)), prod, f_q) mstore(add(transcript, 0x3440), prod) prod := mulmod(mload(add(transcript, 0x31a0)), prod, f_q) mstore(add(transcript, 0x3460), prod) prod := mulmod(mload(add(transcript, 0x32c0)), prod, f_q) mstore(add(transcript, 0x3480), prod) prod := mulmod(mload(add(transcript, 0x32e0)), prod, f_q) mstore(add(transcript, 0x34a0), prod) prod := mulmod(mload(add(transcript, 0x3300)), prod, f_q) mstore(add(transcript, 0x34c0), prod) }mstore(add(transcript, 0x3500), 32)mstore(add(transcript, 0x3520), 32)mstore(add(transcript, 0x3540), 32)mstore(add(transcript, 0x3560), mload(add(transcript, 0x34c0)))mstore(add(transcript, 0x3580), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x35a0), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x3500), 0xc0, add(transcript, 0x34e0), 0x20), 1), success){ let inv := mload(add(transcript, 0x34e0)) let v v := mload(add(transcript, 0x3300)) mstore(add(transcript, 0x3300), mulmod(mload(add(transcript, 0x34a0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x32e0)) mstore(add(transcript, 0x32e0), mulmod(mload(add(transcript, 0x3480)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x32c0)) mstore(add(transcript, 0x32c0), mulmod(mload(add(transcript, 0x3460)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x31a0)) mstore(add(transcript, 0x31a0), mulmod(mload(add(transcript, 0x3440)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x32a0)) mstore(add(transcript, 0x32a0), mulmod(mload(add(transcript, 0x3420)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3280)) mstore(add(transcript, 0x3280), mulmod(mload(add(transcript, 0x3400)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3260)) mstore(add(transcript, 0x3260), mulmod(mload(add(transcript, 0x33e0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3240)) mstore(add(transcript, 0x3240), mulmod(mload(add(transcript, 0x33c0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3220)) mstore(add(transcript, 0x3220), mulmod(mload(add(transcript, 0x33a0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3200)) mstore(add(transcript, 0x3200), mulmod(mload(add(transcript, 0x3380)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3180)) mstore(add(transcript, 0x3180), mulmod(mload(add(transcript, 0x3360)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x31e0)) mstore(add(transcript, 0x31e0), mulmod(mload(add(transcript, 0x3340)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3160)) mstore(add(transcript, 0x3160), mulmod(mload(add(transcript, 0x3320)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3140)) mstore(add(transcript, 0x3140), mulmod(mload(add(transcript, 0x3120)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0x3120), inv) }{ let result := mload(add(transcript, 0x3120))result := addmod(mload(add(transcript, 0x3140)), result, f_q)result := addmod(mload(add(transcript, 0x3160)), result, f_q)mstore(add(transcript, 0x35c0), result) }mstore(add(transcript, 0x35e0), mulmod(mload(add(transcript, 0x31c0)), mload(add(transcript, 0x3180)), f_q)){ let result := mload(add(transcript, 0x31e0))mstore(add(transcript, 0x3600), result) }mstore(add(transcript, 0x3620), mulmod(mload(add(transcript, 0x31c0)), mload(add(transcript, 0x3260)), f_q)){ let result := mload(add(transcript, 0x3200))result := addmod(mload(add(transcript, 0x3220)), result, f_q)result := addmod(mload(add(transcript, 0x3240)), result, f_q)mstore(add(transcript, 0x3640), result) }mstore(add(transcript, 0x3660), mulmod(mload(add(transcript, 0x31c0)), mload(add(transcript, 0x31a0)), f_q)){ let result := mload(add(transcript, 0x3280))result := addmod(mload(add(transcript, 0x32a0)), result, f_q)mstore(add(transcript, 0x3680), result) }mstore(add(transcript, 0x36a0), mulmod(mload(add(transcript, 0x31c0)), mload(add(transcript, 0x3300)), f_q)){ let result := mload(add(transcript, 0x32c0))result := addmod(mload(add(transcript, 0x32e0)), result, f_q)mstore(add(transcript, 0x36c0), result) }{ let prod := mload(add(transcript, 0x35c0)) prod := mulmod(mload(add(transcript, 0x3600)), prod, f_q) mstore(add(transcript, 0x36e0), prod) prod := mulmod(mload(add(transcript, 0x3640)), prod, f_q) mstore(add(transcript, 0x3700), prod) prod := mulmod(mload(add(transcript, 0x3680)), prod, f_q) mstore(add(transcript, 0x3720), prod) prod := mulmod(mload(add(transcript, 0x36c0)), prod, f_q) mstore(add(transcript, 0x3740), prod) }mstore(add(transcript, 0x3780), 32)mstore(add(transcript, 0x37a0), 32)mstore(add(transcript, 0x37c0), 32)mstore(add(transcript, 0x37e0), mload(add(transcript, 0x3740)))mstore(add(transcript, 0x3800), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x3820), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x3780), 0xc0, add(transcript, 0x3760), 0x20), 1), success){ let inv := mload(add(transcript, 0x3760)) let v v := mload(add(transcript, 0x36c0)) mstore(add(transcript, 0x36c0), mulmod(mload(add(transcript, 0x3720)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3680)) mstore(add(transcript, 0x3680), mulmod(mload(add(transcript, 0x3700)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3640)) mstore(add(transcript, 0x3640), mulmod(mload(add(transcript, 0x36e0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3600)) mstore(add(transcript, 0x3600), mulmod(mload(add(transcript, 0x35c0)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0x35c0), inv) }mstore(add(transcript, 0x3840), mulmod(mload(add(transcript, 0x35e0)), mload(add(transcript, 0x3600)), f_q))mstore(add(transcript, 0x3860), mulmod(mload(add(transcript, 0x3620)), mload(add(transcript, 0x3640)), f_q))mstore(add(transcript, 0x3880), mulmod(mload(add(transcript, 0x3660)), mload(add(transcript, 0x3680)), f_q))mstore(add(transcript, 0x38a0), mulmod(mload(add(transcript, 0x36a0)), mload(add(transcript, 0x36c0)), f_q))mstore(add(transcript, 0x38c0), mulmod(mload(add(transcript, 0xa40)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x38e0), mulmod(mload(add(transcript, 0x38c0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3900), mulmod(mload(add(transcript, 0x38e0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3920), mulmod(mload(add(transcript, 0x3900)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3940), mulmod(mload(add(transcript, 0x3920)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3960), mulmod(mload(add(transcript, 0x3940)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3980), mulmod(mload(add(transcript, 0x3960)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x39a0), mulmod(mload(add(transcript, 0x3980)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x39c0), mulmod(mload(add(transcript, 0x39a0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x39e0), mulmod(mload(add(transcript, 0x39c0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3a00), mulmod(mload(add(transcript, 0x39e0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3a20), mulmod(mload(add(transcript, 0x3a00)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3a40), mulmod(mload(add(transcript, 0x3a20)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3a60), mulmod(mload(add(transcript, 0x3a40)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3a80), mulmod(mload(add(transcript, 0x3a60)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3aa0), mulmod(mload(add(transcript, 0x3a80)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3ac0), mulmod(mload(add(transcript, 0x3aa0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3ae0), mulmod(mload(add(transcript, 0x3ac0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3b00), mulmod(mload(add(transcript, 0x3ae0)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3b20), mulmod(mload(add(transcript, 0x3b00)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3b40), mulmod(mload(add(transcript, 0xaa0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x3b60), mulmod(mload(add(transcript, 0x3b40)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x3b80), mulmod(mload(add(transcript, 0x3b60)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x3ba0), mulmod(mload(add(transcript, 0x3b80)), mload(add(transcript, 0xaa0)), f_q)){ let result := mulmod(mload(add(transcript, 0x5c0)), mload(add(transcript, 0x3120)), f_q)result := addmod(mulmod(mload(add(transcript, 0x600)), mload(add(transcript, 0x3140)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x680)), mload(add(transcript, 0x3160)), f_q), result, f_q)mstore(add(transcript, 0x3bc0), result) }mstore(add(transcript, 0x3be0), mulmod(mload(add(transcript, 0x3bc0)), mload(add(transcript, 0x35c0)), f_q))mstore(add(transcript, 0x3c00), mulmod(sub(f_q, mload(add(transcript, 0x3be0))), 1, f_q)){ let result := mulmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x3120)), f_q)result := addmod(mulmod(mload(add(transcript, 0x620)), mload(add(transcript, 0x3140)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x660)), mload(add(transcript, 0x3160)), f_q), result, f_q)mstore(add(transcript, 0x3c20), result) }mstore(add(transcript, 0x3c40), mulmod(mload(add(transcript, 0x3c20)), mload(add(transcript, 0x35c0)), f_q))mstore(add(transcript, 0x3c60), mulmod(sub(f_q, mload(add(transcript, 0x3c40))), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3c80), mulmod(1, mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3ca0), addmod(mload(add(transcript, 0x3c00)), mload(add(transcript, 0x3c60)), f_q))mstore(add(transcript, 0x3cc0), mulmod(mload(add(transcript, 0x3ca0)), 1, f_q))mstore(add(transcript, 0x3ce0), mulmod(mload(add(transcript, 0x3c80)), 1, f_q))mstore(add(transcript, 0x3d00), mulmod(1, mload(add(transcript, 0x35e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x640)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x3d20), result) }mstore(add(transcript, 0x3d40), mulmod(mload(add(transcript, 0x3d20)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x3d60), mulmod(sub(f_q, mload(add(transcript, 0x3d40))), 1, f_q))mstore(add(transcript, 0x3d80), mulmod(mload(add(transcript, 0x3d00)), 1, f_q)){ let result := mulmod(mload(add(transcript, 0xa00)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x3da0), result) }mstore(add(transcript, 0x3dc0), mulmod(mload(add(transcript, 0x3da0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x3de0), mulmod(sub(f_q, mload(add(transcript, 0x3dc0))), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3e00), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x3e20), addmod(mload(add(transcript, 0x3d60)), mload(add(transcript, 0x3de0)), f_q)){ let result := mulmod(mload(add(transcript, 0x6a0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x3e40), result) }mstore(add(transcript, 0x3e60), mulmod(mload(add(transcript, 0x3e40)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x3e80), mulmod(sub(f_q, mload(add(transcript, 0x3e60))), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x3ea0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x3ec0), addmod(mload(add(transcript, 0x3e20)), mload(add(transcript, 0x3e80)), f_q)){ let result := mulmod(mload(add(transcript, 0x6c0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x3ee0), result) }mstore(add(transcript, 0x3f00), mulmod(mload(add(transcript, 0x3ee0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x3f20), mulmod(sub(f_q, mload(add(transcript, 0x3f00))), mload(add(transcript, 0x38e0)), f_q))mstore(add(transcript, 0x3f40), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x38e0)), f_q))mstore(add(transcript, 0x3f60), addmod(mload(add(transcript, 0x3ec0)), mload(add(transcript, 0x3f20)), f_q)){ let result := mulmod(mload(add(transcript, 0x6e0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x3f80), result) }mstore(add(transcript, 0x3fa0), mulmod(mload(add(transcript, 0x3f80)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x3fc0), mulmod(sub(f_q, mload(add(transcript, 0x3fa0))), mload(add(transcript, 0x3900)), f_q))mstore(add(transcript, 0x3fe0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3900)), f_q))mstore(add(transcript, 0x4000), addmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3fc0)), f_q)){ let result := mulmod(mload(add(transcript, 0x700)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4020), result) }mstore(add(transcript, 0x4040), mulmod(mload(add(transcript, 0x4020)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4060), mulmod(sub(f_q, mload(add(transcript, 0x4040))), mload(add(transcript, 0x3920)), f_q))mstore(add(transcript, 0x4080), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3920)), f_q))mstore(add(transcript, 0x40a0), addmod(mload(add(transcript, 0x4000)), mload(add(transcript, 0x4060)), f_q)){ let result := mulmod(mload(add(transcript, 0x720)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x40c0), result) }mstore(add(transcript, 0x40e0), mulmod(mload(add(transcript, 0x40c0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4100), mulmod(sub(f_q, mload(add(transcript, 0x40e0))), mload(add(transcript, 0x3940)), f_q))mstore(add(transcript, 0x4120), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3940)), f_q))mstore(add(transcript, 0x4140), addmod(mload(add(transcript, 0x40a0)), mload(add(transcript, 0x4100)), f_q)){ let result := mulmod(mload(add(transcript, 0x740)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4160), result) }mstore(add(transcript, 0x4180), mulmod(mload(add(transcript, 0x4160)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x41a0), mulmod(sub(f_q, mload(add(transcript, 0x4180))), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x41c0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x41e0), addmod(mload(add(transcript, 0x4140)), mload(add(transcript, 0x41a0)), f_q)){ let result := mulmod(mload(add(transcript, 0x760)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4200), result) }mstore(add(transcript, 0x4220), mulmod(mload(add(transcript, 0x4200)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4240), mulmod(sub(f_q, mload(add(transcript, 0x4220))), mload(add(transcript, 0x3980)), f_q))mstore(add(transcript, 0x4260), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3980)), f_q))mstore(add(transcript, 0x4280), addmod(mload(add(transcript, 0x41e0)), mload(add(transcript, 0x4240)), f_q)){ let result := mulmod(mload(add(transcript, 0x780)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x42a0), result) }mstore(add(transcript, 0x42c0), mulmod(mload(add(transcript, 0x42a0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x42e0), mulmod(sub(f_q, mload(add(transcript, 0x42c0))), mload(add(transcript, 0x39a0)), f_q))mstore(add(transcript, 0x4300), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x39a0)), f_q))mstore(add(transcript, 0x4320), addmod(mload(add(transcript, 0x4280)), mload(add(transcript, 0x42e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x7a0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4340), result) }mstore(add(transcript, 0x4360), mulmod(mload(add(transcript, 0x4340)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4380), mulmod(sub(f_q, mload(add(transcript, 0x4360))), mload(add(transcript, 0x39c0)), f_q))mstore(add(transcript, 0x43a0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x39c0)), f_q))mstore(add(transcript, 0x43c0), addmod(mload(add(transcript, 0x4320)), mload(add(transcript, 0x4380)), f_q)){ let result := mulmod(mload(add(transcript, 0x7c0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x43e0), result) }mstore(add(transcript, 0x4400), mulmod(mload(add(transcript, 0x43e0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4420), mulmod(sub(f_q, mload(add(transcript, 0x4400))), mload(add(transcript, 0x39e0)), f_q))mstore(add(transcript, 0x4440), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x39e0)), f_q))mstore(add(transcript, 0x4460), addmod(mload(add(transcript, 0x43c0)), mload(add(transcript, 0x4420)), f_q)){ let result := mulmod(mload(add(transcript, 0x7e0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4480), result) }mstore(add(transcript, 0x44a0), mulmod(mload(add(transcript, 0x4480)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x44c0), mulmod(sub(f_q, mload(add(transcript, 0x44a0))), mload(add(transcript, 0x3a00)), f_q))mstore(add(transcript, 0x44e0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3a00)), f_q))mstore(add(transcript, 0x4500), addmod(mload(add(transcript, 0x4460)), mload(add(transcript, 0x44c0)), f_q)){ let result := mulmod(mload(add(transcript, 0x820)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4520), result) }mstore(add(transcript, 0x4540), mulmod(mload(add(transcript, 0x4520)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4560), mulmod(sub(f_q, mload(add(transcript, 0x4540))), mload(add(transcript, 0x3a20)), f_q))mstore(add(transcript, 0x4580), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3a20)), f_q))mstore(add(transcript, 0x45a0), addmod(mload(add(transcript, 0x4500)), mload(add(transcript, 0x4560)), f_q)){ let result := mulmod(mload(add(transcript, 0x840)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x45c0), result) }mstore(add(transcript, 0x45e0), mulmod(mload(add(transcript, 0x45c0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4600), mulmod(sub(f_q, mload(add(transcript, 0x45e0))), mload(add(transcript, 0x3a40)), f_q))mstore(add(transcript, 0x4620), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3a40)), f_q))mstore(add(transcript, 0x4640), addmod(mload(add(transcript, 0x45a0)), mload(add(transcript, 0x4600)), f_q)){ let result := mulmod(mload(add(transcript, 0x860)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4660), result) }mstore(add(transcript, 0x4680), mulmod(mload(add(transcript, 0x4660)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x46a0), mulmod(sub(f_q, mload(add(transcript, 0x4680))), mload(add(transcript, 0x3a60)), f_q))mstore(add(transcript, 0x46c0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3a60)), f_q))mstore(add(transcript, 0x46e0), addmod(mload(add(transcript, 0x4640)), mload(add(transcript, 0x46a0)), f_q)){ let result := mulmod(mload(add(transcript, 0x880)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4700), result) }mstore(add(transcript, 0x4720), mulmod(mload(add(transcript, 0x4700)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4740), mulmod(sub(f_q, mload(add(transcript, 0x4720))), mload(add(transcript, 0x3a80)), f_q))mstore(add(transcript, 0x4760), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3a80)), f_q))mstore(add(transcript, 0x4780), addmod(mload(add(transcript, 0x46e0)), mload(add(transcript, 0x4740)), f_q)){ let result := mulmod(mload(add(transcript, 0x8a0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x47a0), result) }mstore(add(transcript, 0x47c0), mulmod(mload(add(transcript, 0x47a0)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x47e0), mulmod(sub(f_q, mload(add(transcript, 0x47c0))), mload(add(transcript, 0x3aa0)), f_q))mstore(add(transcript, 0x4800), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3aa0)), f_q))mstore(add(transcript, 0x4820), addmod(mload(add(transcript, 0x4780)), mload(add(transcript, 0x47e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x8c0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4840), result) }mstore(add(transcript, 0x4860), mulmod(mload(add(transcript, 0x4840)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4880), mulmod(sub(f_q, mload(add(transcript, 0x4860))), mload(add(transcript, 0x3ac0)), f_q))mstore(add(transcript, 0x48a0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3ac0)), f_q))mstore(add(transcript, 0x48c0), addmod(mload(add(transcript, 0x4820)), mload(add(transcript, 0x4880)), f_q))mstore(add(transcript, 0x48e0), mulmod(mload(add(transcript, 0x2f60)), mload(add(transcript, 0x35e0)), f_q))mstore(add(transcript, 0x4900), mulmod(mload(add(transcript, 0x2f80)), mload(add(transcript, 0x35e0)), f_q))mstore(add(transcript, 0x4920), mulmod(mload(add(transcript, 0x2fa0)), mload(add(transcript, 0x35e0)), f_q))mstore(add(transcript, 0x4940), mulmod(mload(add(transcript, 0x2fc0)), mload(add(transcript, 0x35e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x2fe0)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4960), result) }mstore(add(transcript, 0x4980), mulmod(mload(add(transcript, 0x4960)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x49a0), mulmod(sub(f_q, mload(add(transcript, 0x4980))), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x49c0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x49e0), mulmod(mload(add(transcript, 0x48e0)), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x4a00), mulmod(mload(add(transcript, 0x4900)), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x4a20), mulmod(mload(add(transcript, 0x4920)), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x4a40), mulmod(mload(add(transcript, 0x4940)), mload(add(transcript, 0x3ae0)), f_q))mstore(add(transcript, 0x4a60), addmod(mload(add(transcript, 0x48c0)), mload(add(transcript, 0x49a0)), f_q)){ let result := mulmod(mload(add(transcript, 0x800)), mload(add(transcript, 0x31e0)), f_q)mstore(add(transcript, 0x4a80), result) }mstore(add(transcript, 0x4aa0), mulmod(mload(add(transcript, 0x4a80)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x4ac0), mulmod(sub(f_q, mload(add(transcript, 0x4aa0))), mload(add(transcript, 0x3b00)), f_q))mstore(add(transcript, 0x4ae0), mulmod(mload(add(transcript, 0x3d00)), mload(add(transcript, 0x3b00)), f_q))mstore(add(transcript, 0x4b00), addmod(mload(add(transcript, 0x4a60)), mload(add(transcript, 0x4ac0)), f_q))mstore(add(transcript, 0x4b20), mulmod(mload(add(transcript, 0x4b00)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4b40), mulmod(mload(add(transcript, 0x3d80)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4b60), mulmod(mload(add(transcript, 0x3e00)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4b80), mulmod(mload(add(transcript, 0x3ea0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4ba0), mulmod(mload(add(transcript, 0x3f40)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4bc0), mulmod(mload(add(transcript, 0x3fe0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4be0), mulmod(mload(add(transcript, 0x4080)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4c00), mulmod(mload(add(transcript, 0x4120)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4c20), mulmod(mload(add(transcript, 0x41c0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4c40), mulmod(mload(add(transcript, 0x4260)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4c60), mulmod(mload(add(transcript, 0x4300)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4c80), mulmod(mload(add(transcript, 0x43a0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4ca0), mulmod(mload(add(transcript, 0x4440)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4cc0), mulmod(mload(add(transcript, 0x44e0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4ce0), mulmod(mload(add(transcript, 0x4580)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4d00), mulmod(mload(add(transcript, 0x4620)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4d20), mulmod(mload(add(transcript, 0x46c0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4d40), mulmod(mload(add(transcript, 0x4760)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4d60), mulmod(mload(add(transcript, 0x4800)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4d80), mulmod(mload(add(transcript, 0x48a0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4da0), mulmod(mload(add(transcript, 0x49c0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4dc0), mulmod(mload(add(transcript, 0x49e0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4de0), mulmod(mload(add(transcript, 0x4a00)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4e00), mulmod(mload(add(transcript, 0x4a20)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4e20), mulmod(mload(add(transcript, 0x4a40)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4e40), mulmod(mload(add(transcript, 0x4ae0)), mload(add(transcript, 0xaa0)), f_q))mstore(add(transcript, 0x4e60), addmod(mload(add(transcript, 0x3cc0)), mload(add(transcript, 0x4b20)), f_q))mstore(add(transcript, 0x4e80), mulmod(1, mload(add(transcript, 0x3620)), f_q)){ let result := mulmod(mload(add(transcript, 0x8e0)), mload(add(transcript, 0x3200)), f_q)result := addmod(mulmod(mload(add(transcript, 0x900)), mload(add(transcript, 0x3220)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x920)), mload(add(transcript, 0x3240)), f_q), result, f_q)mstore(add(transcript, 0x4ea0), result) }mstore(add(transcript, 0x4ec0), mulmod(mload(add(transcript, 0x4ea0)), mload(add(transcript, 0x3860)), f_q))mstore(add(transcript, 0x4ee0), mulmod(sub(f_q, mload(add(transcript, 0x4ec0))), 1, f_q))mstore(add(transcript, 0x4f00), mulmod(mload(add(transcript, 0x4e80)), 1, f_q))mstore(add(transcript, 0x4f20), mulmod(mload(add(transcript, 0x4ee0)), mload(add(transcript, 0x3b40)), f_q))mstore(add(transcript, 0x4f40), mulmod(mload(add(transcript, 0x4f00)), mload(add(transcript, 0x3b40)), f_q))mstore(add(transcript, 0x4f60), addmod(mload(add(transcript, 0x4e60)), mload(add(transcript, 0x4f20)), f_q))mstore(add(transcript, 0x4f80), mulmod(1, mload(add(transcript, 0x3660)), f_q)){ let result := mulmod(mload(add(transcript, 0x940)), mload(add(transcript, 0x3280)), f_q)result := addmod(mulmod(mload(add(transcript, 0x960)), mload(add(transcript, 0x32a0)), f_q), result, f_q)mstore(add(transcript, 0x4fa0), result) }mstore(add(transcript, 0x4fc0), mulmod(mload(add(transcript, 0x4fa0)), mload(add(transcript, 0x3880)), f_q))mstore(add(transcript, 0x4fe0), mulmod(sub(f_q, mload(add(transcript, 0x4fc0))), 1, f_q))mstore(add(transcript, 0x5000), mulmod(mload(add(transcript, 0x4f80)), 1, f_q)){ let result := mulmod(mload(add(transcript, 0x980)), mload(add(transcript, 0x3280)), f_q)result := addmod(mulmod(mload(add(transcript, 0x9a0)), mload(add(transcript, 0x32a0)), f_q), result, f_q)mstore(add(transcript, 0x5020), result) }mstore(add(transcript, 0x5040), mulmod(mload(add(transcript, 0x5020)), mload(add(transcript, 0x3880)), f_q))mstore(add(transcript, 0x5060), mulmod(sub(f_q, mload(add(transcript, 0x5040))), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x5080), mulmod(mload(add(transcript, 0x4f80)), mload(add(transcript, 0xa40)), f_q))mstore(add(transcript, 0x50a0), addmod(mload(add(transcript, 0x4fe0)), mload(add(transcript, 0x5060)), f_q))mstore(add(transcript, 0x50c0), mulmod(mload(add(transcript, 0x50a0)), mload(add(transcript, 0x3b60)), f_q))mstore(add(transcript, 0x50e0), mulmod(mload(add(transcript, 0x5000)), mload(add(transcript, 0x3b60)), f_q))mstore(add(transcript, 0x5100), mulmod(mload(add(transcript, 0x5080)), mload(add(transcript, 0x3b60)), f_q))mstore(add(transcript, 0x5120), addmod(mload(add(transcript, 0x4f60)), mload(add(transcript, 0x50c0)), f_q))mstore(add(transcript, 0x5140), mulmod(1, mload(add(transcript, 0x36a0)), f_q)){ let result := mulmod(mload(add(transcript, 0x9c0)), mload(add(transcript, 0x32c0)), f_q)result := addmod(mulmod(mload(add(transcript, 0x9e0)), mload(add(transcript, 0x32e0)), f_q), result, f_q)mstore(add(transcript, 0x5160), result) }mstore(add(transcript, 0x5180), mulmod(mload(add(transcript, 0x5160)), mload(add(transcript, 0x38a0)), f_q))mstore(add(transcript, 0x51a0), mulmod(sub(f_q, mload(add(transcript, 0x5180))), 1, f_q))mstore(add(transcript, 0x51c0), mulmod(mload(add(transcript, 0x5140)), 1, f_q))mstore(add(transcript, 0x51e0), mulmod(mload(add(transcript, 0x51a0)), mload(add(transcript, 0x3b80)), f_q))mstore(add(transcript, 0x5200), mulmod(mload(add(transcript, 0x51c0)), mload(add(transcript, 0x3b80)), f_q))mstore(add(transcript, 0x5220), addmod(mload(add(transcript, 0x5120)), mload(add(transcript, 0x51e0)), f_q))mstore(add(transcript, 0x5240), mulmod(1, mload(add(transcript, 0x31c0)), f_q))mstore(add(transcript, 0x5260), mulmod(1, mload(add(transcript, 0xb40)), f_q))mstore(add(transcript, 0x5280), 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(add(transcript, 0x52a0), 0x0000000000000000000000000000000000000000000000000000000000000002)mstore(add(transcript, 0x52c0), mload(add(transcript, 0x5220)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5280), 0x60, add(transcript, 0x5280), 0x40), 1), success)mstore(add(transcript, 0x52e0), mload(add(transcript, 0x5280))) mstore(add(transcript, 0x5300), mload(add(transcript, 0x52a0)))mstore(add(transcript, 0x5320), mload(add(transcript, 0x60))) mstore(add(transcript, 0x5340), mload(add(transcript, 0x80)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x52e0), 0x80, add(transcript, 0x52e0), 0x40), 1), success)mstore(add(transcript, 0x5360), mload(add(transcript, 0xa0))) mstore(add(transcript, 0x5380), mload(add(transcript, 0xc0)))mstore(add(transcript, 0x53a0), mload(add(transcript, 0x3ce0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5360), 0x60, add(transcript, 0x5360), 0x40), 1), success)mstore(add(transcript, 0x53c0), mload(add(transcript, 0x52e0))) mstore(add(transcript, 0x53e0), mload(add(transcript, 0x5300)))mstore(add(transcript, 0x5400), mload(add(transcript, 0x5360))) mstore(add(transcript, 0x5420), mload(add(transcript, 0x5380)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x53c0), 0x80, add(transcript, 0x53c0), 0x40), 1), success)mstore(add(transcript, 0x5440), mload(add(transcript, 0xe0))) mstore(add(transcript, 0x5460), mload(add(transcript, 0x100)))mstore(add(transcript, 0x5480), mload(add(transcript, 0x4b40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5440), 0x60, add(transcript, 0x5440), 0x40), 1), success)mstore(add(transcript, 0x54a0), mload(add(transcript, 0x53c0))) mstore(add(transcript, 0x54c0), mload(add(transcript, 0x53e0)))mstore(add(transcript, 0x54e0), mload(add(transcript, 0x5440))) mstore(add(transcript, 0x5500), mload(add(transcript, 0x5460)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x54a0), 0x80, add(transcript, 0x54a0), 0x40), 1), success)mstore(add(transcript, 0x5520), mload(add(transcript, 0x1c0))) mstore(add(transcript, 0x5540), mload(add(transcript, 0x1e0)))mstore(add(transcript, 0x5560), mload(add(transcript, 0x4b60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5520), 0x60, add(transcript, 0x5520), 0x40), 1), success)mstore(add(transcript, 0x5580), mload(add(transcript, 0x54a0))) mstore(add(transcript, 0x55a0), mload(add(transcript, 0x54c0)))mstore(add(transcript, 0x55c0), mload(add(transcript, 0x5520))) mstore(add(transcript, 0x55e0), mload(add(transcript, 0x5540)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5580), 0x80, add(transcript, 0x5580), 0x40), 1), success)mstore(add(transcript, 0x5600), 0x23a3b90b52101f0a6b5743b3e901cc1ca3fedcf56639e3f5d092c1fe8918dd49) mstore(add(transcript, 0x5620), 0x2d1ac29c598a842f7865a78359fe925ab012907df3ef22ecee8c3e38775c47fd)mstore(add(transcript, 0x5640), mload(add(transcript, 0x4b80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5600), 0x60, add(transcript, 0x5600), 0x40), 1), success)mstore(add(transcript, 0x5660), mload(add(transcript, 0x5580))) mstore(add(transcript, 0x5680), mload(add(transcript, 0x55a0)))mstore(add(transcript, 0x56a0), mload(add(transcript, 0x5600))) mstore(add(transcript, 0x56c0), mload(add(transcript, 0x5620)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5660), 0x80, add(transcript, 0x5660), 0x40), 1), success)mstore(add(transcript, 0x56e0), 0x03889f612bd17e011b13902673a70688bbacdf22704cc8295740a0b855955fc0) mstore(add(transcript, 0x5700), 0x077a491ddd81dbd1802d89735ae881c56da97f908e0bb6a3a8ad6fd9f72db123)mstore(add(transcript, 0x5720), mload(add(transcript, 0x4ba0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x56e0), 0x60, add(transcript, 0x56e0), 0x40), 1), success)mstore(add(transcript, 0x5740), mload(add(transcript, 0x5660))) mstore(add(transcript, 0x5760), mload(add(transcript, 0x5680)))mstore(add(transcript, 0x5780), mload(add(transcript, 0x56e0))) mstore(add(transcript, 0x57a0), mload(add(transcript, 0x5700)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5740), 0x80, add(transcript, 0x5740), 0x40), 1), success)mstore(add(transcript, 0x57c0), 0x293f3eeabeb387e78c97a4de420d2336ff8ed1aaadf797c7dc3e622c9f144052) mstore(add(transcript, 0x57e0), 0x04f8141148a083ed78d264b622ccd39fdc2e5a4d4309def83c65f641fa1f73ae)mstore(add(transcript, 0x5800), mload(add(transcript, 0x4bc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x57c0), 0x60, add(transcript, 0x57c0), 0x40), 1), success)mstore(add(transcript, 0x5820), mload(add(transcript, 0x5740))) mstore(add(transcript, 0x5840), mload(add(transcript, 0x5760)))mstore(add(transcript, 0x5860), mload(add(transcript, 0x57c0))) mstore(add(transcript, 0x5880), mload(add(transcript, 0x57e0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5820), 0x80, add(transcript, 0x5820), 0x40), 1), success)mstore(add(transcript, 0x58a0), 0x153842f7c3d4213d1a0bdf0272dc0ac05b87949495a94680ea07f5528cd4cb65) mstore(add(transcript, 0x58c0), 0x197481eee392189181d33d51883b612dc4b9b7b40ac3c516d04ef58b4458f841)mstore(add(transcript, 0x58e0), mload(add(transcript, 0x4be0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x58a0), 0x60, add(transcript, 0x58a0), 0x40), 1), success)mstore(add(transcript, 0x5900), mload(add(transcript, 0x5820))) mstore(add(transcript, 0x5920), mload(add(transcript, 0x5840)))mstore(add(transcript, 0x5940), mload(add(transcript, 0x58a0))) mstore(add(transcript, 0x5960), mload(add(transcript, 0x58c0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5900), 0x80, add(transcript, 0x5900), 0x40), 1), success)mstore(add(transcript, 0x5980), 0x2eb2df9649175ed689ae9b18bd9c2da55e06f28b8bade40ece584fe646987af2) mstore(add(transcript, 0x59a0), 0x060bd862d267d622becf447c96e00a075a556a12d57a89cdfcccd59180d6e183)mstore(add(transcript, 0x59c0), mload(add(transcript, 0x4c00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5980), 0x60, add(transcript, 0x5980), 0x40), 1), success)mstore(add(transcript, 0x59e0), mload(add(transcript, 0x5900))) mstore(add(transcript, 0x5a00), mload(add(transcript, 0x5920)))mstore(add(transcript, 0x5a20), mload(add(transcript, 0x5980))) mstore(add(transcript, 0x5a40), mload(add(transcript, 0x59a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x59e0), 0x80, add(transcript, 0x59e0), 0x40), 1), success)mstore(add(transcript, 0x5a60), 0x261ab047cacbf6fda910b594e5a47fce17d7bf5912a803a159724638ac9a9293) mstore(add(transcript, 0x5a80), 0x1c19cf99cd99c0a2995e7b540f0e131d5a76ada19f52dbf97bf3f7e048e24d57)mstore(add(transcript, 0x5aa0), mload(add(transcript, 0x4c20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5a60), 0x60, add(transcript, 0x5a60), 0x40), 1), success)mstore(add(transcript, 0x5ac0), mload(add(transcript, 0x59e0))) mstore(add(transcript, 0x5ae0), mload(add(transcript, 0x5a00)))mstore(add(transcript, 0x5b00), mload(add(transcript, 0x5a60))) mstore(add(transcript, 0x5b20), mload(add(transcript, 0x5a80)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5ac0), 0x80, add(transcript, 0x5ac0), 0x40), 1), success)mstore(add(transcript, 0x5b40), 0x09852cc4d7e43585f80a71bb658d117c8bad4afd38c56250f79e2fe5ea36cbea) mstore(add(transcript, 0x5b60), 0x0eafdf1dc0ebc50c66a28ef4e4ce11d67dc26835ee8fca885308c4e800e503db)mstore(add(transcript, 0x5b80), mload(add(transcript, 0x4c40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5b40), 0x60, add(transcript, 0x5b40), 0x40), 1), success)mstore(add(transcript, 0x5ba0), mload(add(transcript, 0x5ac0))) mstore(add(transcript, 0x5bc0), mload(add(transcript, 0x5ae0)))mstore(add(transcript, 0x5be0), mload(add(transcript, 0x5b40))) mstore(add(transcript, 0x5c00), mload(add(transcript, 0x5b60)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5ba0), 0x80, add(transcript, 0x5ba0), 0x40), 1), success)mstore(add(transcript, 0x5c20), 0x060d05d9347318b8c482f43d589babe34c4feac67e633b7c7d205124e5942031) mstore(add(transcript, 0x5c40), 0x126bce5e065317f42c4ea09165d00008202438e1c490d572c6b76613f21a1ebf)mstore(add(transcript, 0x5c60), mload(add(transcript, 0x4c60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5c20), 0x60, add(transcript, 0x5c20), 0x40), 1), success)mstore(add(transcript, 0x5c80), mload(add(transcript, 0x5ba0))) mstore(add(transcript, 0x5ca0), mload(add(transcript, 0x5bc0)))mstore(add(transcript, 0x5cc0), mload(add(transcript, 0x5c20))) mstore(add(transcript, 0x5ce0), mload(add(transcript, 0x5c40)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5c80), 0x80, add(transcript, 0x5c80), 0x40), 1), success)mstore(add(transcript, 0x5d00), 0x1d0f94f3535e58b5d06c339b6364b77cafc3894f0189d777a08f20ce239a1a34) mstore(add(transcript, 0x5d20), 0x0b53ad507c469a238239f93e42e07194761f396948a8d4af1b2ef3eda0ba369f)mstore(add(transcript, 0x5d40), mload(add(transcript, 0x4c80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5d00), 0x60, add(transcript, 0x5d00), 0x40), 1), success)mstore(add(transcript, 0x5d60), mload(add(transcript, 0x5c80))) mstore(add(transcript, 0x5d80), mload(add(transcript, 0x5ca0)))mstore(add(transcript, 0x5da0), mload(add(transcript, 0x5d00))) mstore(add(transcript, 0x5dc0), mload(add(transcript, 0x5d20)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5d60), 0x80, add(transcript, 0x5d60), 0x40), 1), success)mstore(add(transcript, 0x5de0), 0x05ffd6f47fadc13d413ff73d3dcd2b5413970d2328ace551b3b1d5f20a687375) mstore(add(transcript, 0x5e00), 0x267595ab27c68ff69d06c8c28585973ef0fbad8e0982871a193b026541e27893)mstore(add(transcript, 0x5e20), mload(add(transcript, 0x4ca0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5de0), 0x60, add(transcript, 0x5de0), 0x40), 1), success)mstore(add(transcript, 0x5e40), mload(add(transcript, 0x5d60))) mstore(add(transcript, 0x5e60), mload(add(transcript, 0x5d80)))mstore(add(transcript, 0x5e80), mload(add(transcript, 0x5de0))) mstore(add(transcript, 0x5ea0), mload(add(transcript, 0x5e00)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5e40), 0x80, add(transcript, 0x5e40), 0x40), 1), success)mstore(add(transcript, 0x5ec0), 0x072dca4b7136fbd39742610eeae201e76bc2295ddc20cc18dd6b19aa7b724b13) mstore(add(transcript, 0x5ee0), 0x23048e9bb2debeafcf95628ab81b03275cdee33bca18d579dde2661f64645ec5)mstore(add(transcript, 0x5f00), mload(add(transcript, 0x4cc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5ec0), 0x60, add(transcript, 0x5ec0), 0x40), 1), success)mstore(add(transcript, 0x5f20), mload(add(transcript, 0x5e40))) mstore(add(transcript, 0x5f40), mload(add(transcript, 0x5e60)))mstore(add(transcript, 0x5f60), mload(add(transcript, 0x5ec0))) mstore(add(transcript, 0x5f80), mload(add(transcript, 0x5ee0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5f20), 0x80, add(transcript, 0x5f20), 0x40), 1), success)mstore(add(transcript, 0x5fa0), 0x05469c240f7b5fedc125ba1ee66cae1377ec75579599278f630f2d7640994fec) mstore(add(transcript, 0x5fc0), 0x08b814cfa26074aade7bab13b494f598aa5bfdbc49d0df4c4390dd69285d03d0)mstore(add(transcript, 0x5fe0), mload(add(transcript, 0x4ce0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5fa0), 0x60, add(transcript, 0x5fa0), 0x40), 1), success)mstore(add(transcript, 0x6000), mload(add(transcript, 0x5f20))) mstore(add(transcript, 0x6020), mload(add(transcript, 0x5f40)))mstore(add(transcript, 0x6040), mload(add(transcript, 0x5fa0))) mstore(add(transcript, 0x6060), mload(add(transcript, 0x5fc0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6000), 0x80, add(transcript, 0x6000), 0x40), 1), success)mstore(add(transcript, 0x6080), 0x07faf619bc79f6e8ecd37ee152e6befc7b7789c1b594544bf208493392a8ee28) mstore(add(transcript, 0x60a0), 0x2a91842e18f3ac761e5f65edc640dd42ef6d9115b649ad3acdff6cced7a274aa)mstore(add(transcript, 0x60c0), mload(add(transcript, 0x4d00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6080), 0x60, add(transcript, 0x6080), 0x40), 1), success)mstore(add(transcript, 0x60e0), mload(add(transcript, 0x6000))) mstore(add(transcript, 0x6100), mload(add(transcript, 0x6020)))mstore(add(transcript, 0x6120), mload(add(transcript, 0x6080))) mstore(add(transcript, 0x6140), mload(add(transcript, 0x60a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x60e0), 0x80, add(transcript, 0x60e0), 0x40), 1), success)mstore(add(transcript, 0x6160), 0x0fd4442f53e6b5a5f860c2c811cf4e498642314abc354e0a174be6b8bc0e27e5) mstore(add(transcript, 0x6180), 0x091f3fcbe89a23c4458c2e38c7b6444e28d8244c08549e9525ceedf4a320cbc0)mstore(add(transcript, 0x61a0), mload(add(transcript, 0x4d20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6160), 0x60, add(transcript, 0x6160), 0x40), 1), success)mstore(add(transcript, 0x61c0), mload(add(transcript, 0x60e0))) mstore(add(transcript, 0x61e0), mload(add(transcript, 0x6100)))mstore(add(transcript, 0x6200), mload(add(transcript, 0x6160))) mstore(add(transcript, 0x6220), mload(add(transcript, 0x6180)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x61c0), 0x80, add(transcript, 0x61c0), 0x40), 1), success)mstore(add(transcript, 0x6240), 0x050cba2ca48cc882687a9e66867e984e2ce5494778a8bcaffdd2296ba9abdb56) mstore(add(transcript, 0x6260), 0x0e44d0ab2133714afce93a354d6271470c293f18ef29ecc874416f81ffb92818)mstore(add(transcript, 0x6280), mload(add(transcript, 0x4d40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6240), 0x60, add(transcript, 0x6240), 0x40), 1), success)mstore(add(transcript, 0x62a0), mload(add(transcript, 0x61c0))) mstore(add(transcript, 0x62c0), mload(add(transcript, 0x61e0)))mstore(add(transcript, 0x62e0), mload(add(transcript, 0x6240))) mstore(add(transcript, 0x6300), mload(add(transcript, 0x6260)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x62a0), 0x80, add(transcript, 0x62a0), 0x40), 1), success)mstore(add(transcript, 0x6320), 0x2f69a41fff5cbe55da07d30e789a0d7660d3e841c70ebb326f5825610a4a5c08) mstore(add(transcript, 0x6340), 0x1fe7e7411a599e8addf546471194a4851d36c711a88e926632f571f0d91fc9f6)mstore(add(transcript, 0x6360), mload(add(transcript, 0x4d60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6320), 0x60, add(transcript, 0x6320), 0x40), 1), success)mstore(add(transcript, 0x6380), mload(add(transcript, 0x62a0))) mstore(add(transcript, 0x63a0), mload(add(transcript, 0x62c0)))mstore(add(transcript, 0x63c0), mload(add(transcript, 0x6320))) mstore(add(transcript, 0x63e0), mload(add(transcript, 0x6340)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6380), 0x80, add(transcript, 0x6380), 0x40), 1), success)mstore(add(transcript, 0x6400), 0x26a5a8097f66050a9a3d815d3915eb122d75020777f9e87b160e67cc7fa17e5e) mstore(add(transcript, 0x6420), 0x12c0173fdec4f54e72a0ab39fd9a5ffa14364bbb1ef304610af17195b993b316)mstore(add(transcript, 0x6440), mload(add(transcript, 0x4d80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6400), 0x60, add(transcript, 0x6400), 0x40), 1), success)mstore(add(transcript, 0x6460), mload(add(transcript, 0x6380))) mstore(add(transcript, 0x6480), mload(add(transcript, 0x63a0)))mstore(add(transcript, 0x64a0), mload(add(transcript, 0x6400))) mstore(add(transcript, 0x64c0), mload(add(transcript, 0x6420)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6460), 0x80, add(transcript, 0x6460), 0x40), 1), success)mstore(add(transcript, 0x64e0), mload(add(transcript, 0x420))) mstore(add(transcript, 0x6500), mload(add(transcript, 0x440)))mstore(add(transcript, 0x6520), mload(add(transcript, 0x4da0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x64e0), 0x60, add(transcript, 0x64e0), 0x40), 1), success)mstore(add(transcript, 0x6540), mload(add(transcript, 0x6460))) mstore(add(transcript, 0x6560), mload(add(transcript, 0x6480)))mstore(add(transcript, 0x6580), mload(add(transcript, 0x64e0))) mstore(add(transcript, 0x65a0), mload(add(transcript, 0x6500)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6540), 0x80, add(transcript, 0x6540), 0x40), 1), success)mstore(add(transcript, 0x65c0), mload(add(transcript, 0x460))) mstore(add(transcript, 0x65e0), mload(add(transcript, 0x480)))mstore(add(transcript, 0x6600), mload(add(transcript, 0x4dc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x65c0), 0x60, add(transcript, 0x65c0), 0x40), 1), success)mstore(add(transcript, 0x6620), mload(add(transcript, 0x6540))) mstore(add(transcript, 0x6640), mload(add(transcript, 0x6560)))mstore(add(transcript, 0x6660), mload(add(transcript, 0x65c0))) mstore(add(transcript, 0x6680), mload(add(transcript, 0x65e0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6620), 0x80, add(transcript, 0x6620), 0x40), 1), success)mstore(add(transcript, 0x66a0), mload(add(transcript, 0x4a0))) mstore(add(transcript, 0x66c0), mload(add(transcript, 0x4c0)))mstore(add(transcript, 0x66e0), mload(add(transcript, 0x4de0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x66a0), 0x60, add(transcript, 0x66a0), 0x40), 1), success)mstore(add(transcript, 0x6700), mload(add(transcript, 0x6620))) mstore(add(transcript, 0x6720), mload(add(transcript, 0x6640)))mstore(add(transcript, 0x6740), mload(add(transcript, 0x66a0))) mstore(add(transcript, 0x6760), mload(add(transcript, 0x66c0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6700), 0x80, add(transcript, 0x6700), 0x40), 1), success)mstore(add(transcript, 0x6780), mload(add(transcript, 0x4e0))) mstore(add(transcript, 0x67a0), mload(add(transcript, 0x500)))mstore(add(transcript, 0x67c0), mload(add(transcript, 0x4e00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6780), 0x60, add(transcript, 0x6780), 0x40), 1), success)mstore(add(transcript, 0x67e0), mload(add(transcript, 0x6700))) mstore(add(transcript, 0x6800), mload(add(transcript, 0x6720)))mstore(add(transcript, 0x6820), mload(add(transcript, 0x6780))) mstore(add(transcript, 0x6840), mload(add(transcript, 0x67a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x67e0), 0x80, add(transcript, 0x67e0), 0x40), 1), success)mstore(add(transcript, 0x6860), mload(add(transcript, 0x520))) mstore(add(transcript, 0x6880), mload(add(transcript, 0x540)))mstore(add(transcript, 0x68a0), mload(add(transcript, 0x4e20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6860), 0x60, add(transcript, 0x6860), 0x40), 1), success)mstore(add(transcript, 0x68c0), mload(add(transcript, 0x67e0))) mstore(add(transcript, 0x68e0), mload(add(transcript, 0x6800)))mstore(add(transcript, 0x6900), mload(add(transcript, 0x6860))) mstore(add(transcript, 0x6920), mload(add(transcript, 0x6880)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x68c0), 0x80, add(transcript, 0x68c0), 0x40), 1), success)mstore(add(transcript, 0x6940), mload(add(transcript, 0x380))) mstore(add(transcript, 0x6960), mload(add(transcript, 0x3a0)))mstore(add(transcript, 0x6980), mload(add(transcript, 0x4e40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6940), 0x60, add(transcript, 0x6940), 0x40), 1), success)mstore(add(transcript, 0x69a0), mload(add(transcript, 0x68c0))) mstore(add(transcript, 0x69c0), mload(add(transcript, 0x68e0)))mstore(add(transcript, 0x69e0), mload(add(transcript, 0x6940))) mstore(add(transcript, 0x6a00), mload(add(transcript, 0x6960)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x69a0), 0x80, add(transcript, 0x69a0), 0x40), 1), success)mstore(add(transcript, 0x6a20), mload(add(transcript, 0x2c0))) mstore(add(transcript, 0x6a40), mload(add(transcript, 0x2e0)))mstore(add(transcript, 0x6a60), mload(add(transcript, 0x4f40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6a20), 0x60, add(transcript, 0x6a20), 0x40), 1), success)mstore(add(transcript, 0x6a80), mload(add(transcript, 0x69a0))) mstore(add(transcript, 0x6aa0), mload(add(transcript, 0x69c0)))mstore(add(transcript, 0x6ac0), mload(add(transcript, 0x6a20))) mstore(add(transcript, 0x6ae0), mload(add(transcript, 0x6a40)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6a80), 0x80, add(transcript, 0x6a80), 0x40), 1), success)mstore(add(transcript, 0x6b00), mload(add(transcript, 0x300))) mstore(add(transcript, 0x6b20), mload(add(transcript, 0x320)))mstore(add(transcript, 0x6b40), mload(add(transcript, 0x50e0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6b00), 0x60, add(transcript, 0x6b00), 0x40), 1), success)mstore(add(transcript, 0x6b60), mload(add(transcript, 0x6a80))) mstore(add(transcript, 0x6b80), mload(add(transcript, 0x6aa0)))mstore(add(transcript, 0x6ba0), mload(add(transcript, 0x6b00))) mstore(add(transcript, 0x6bc0), mload(add(transcript, 0x6b20)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6b60), 0x80, add(transcript, 0x6b60), 0x40), 1), success)mstore(add(transcript, 0x6be0), mload(add(transcript, 0x340))) mstore(add(transcript, 0x6c00), mload(add(transcript, 0x360)))mstore(add(transcript, 0x6c20), mload(add(transcript, 0x5100)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6be0), 0x60, add(transcript, 0x6be0), 0x40), 1), success)mstore(add(transcript, 0x6c40), mload(add(transcript, 0x6b60))) mstore(add(transcript, 0x6c60), mload(add(transcript, 0x6b80)))mstore(add(transcript, 0x6c80), mload(add(transcript, 0x6be0))) mstore(add(transcript, 0x6ca0), mload(add(transcript, 0x6c00)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6c40), 0x80, add(transcript, 0x6c40), 0x40), 1), success)mstore(add(transcript, 0x6cc0), mload(add(transcript, 0x180))) mstore(add(transcript, 0x6ce0), mload(add(transcript, 0x1a0)))mstore(add(transcript, 0x6d00), mload(add(transcript, 0x5200)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6cc0), 0x60, add(transcript, 0x6cc0), 0x40), 1), success)mstore(add(transcript, 0x6d20), mload(add(transcript, 0x6c40))) mstore(add(transcript, 0x6d40), mload(add(transcript, 0x6c60)))mstore(add(transcript, 0x6d60), mload(add(transcript, 0x6cc0))) mstore(add(transcript, 0x6d80), mload(add(transcript, 0x6ce0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6d20), 0x80, add(transcript, 0x6d20), 0x40), 1), success)mstore(add(transcript, 0x6da0), mload(add(transcript, 0xae0))) mstore(add(transcript, 0x6dc0), mload(add(transcript, 0xb00)))mstore(add(transcript, 0x6de0), sub(f_q, mload(add(transcript, 0x5240))))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6da0), 0x60, add(transcript, 0x6da0), 0x40), 1), success)mstore(add(transcript, 0x6e00), mload(add(transcript, 0x6d20))) mstore(add(transcript, 0x6e20), mload(add(transcript, 0x6d40)))mstore(add(transcript, 0x6e40), mload(add(transcript, 0x6da0))) mstore(add(transcript, 0x6e60), mload(add(transcript, 0x6dc0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6e00), 0x80, add(transcript, 0x6e00), 0x40), 1), success)mstore(add(transcript, 0x6e80), mload(add(transcript, 0xb80))) mstore(add(transcript, 0x6ea0), mload(add(transcript, 0xba0)))mstore(add(transcript, 0x6ec0), mload(add(transcript, 0x5260)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6e80), 0x60, add(transcript, 0x6e80), 0x40), 1), success)mstore(add(transcript, 0x6ee0), mload(add(transcript, 0x6e00))) mstore(add(transcript, 0x6f00), mload(add(transcript, 0x6e20)))mstore(add(transcript, 0x6f20), mload(add(transcript, 0x6e80))) mstore(add(transcript, 0x6f40), mload(add(transcript, 0x6ea0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6ee0), 0x80, add(transcript, 0x6ee0), 0x40), 1), success)mstore(add(transcript, 0x6f60), mload(add(transcript, 0x6ee0))) mstore(add(transcript, 0x6f80), mload(add(transcript, 0x6f00)))mstore(add(transcript, 0x6fa0), 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) mstore(add(transcript, 0x6fc0), 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) mstore(add(transcript, 0x6fe0), 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) mstore(add(transcript, 0x7000), 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa)mstore(add(transcript, 0x7020), mload(add(transcript, 0xb80))) mstore(add(transcript, 0x7040), mload(add(transcript, 0xba0)))mstore(add(transcript, 0x7060), 0x1d34ba6e3b52afa8a8df056bfc5157fa16e2c5bb045aab7186aab58f70927fbc) mstore(add(transcript, 0x7080), 0x0b4a022eb8fc503d9d91660c783fc6e37ae61570ebe4883f3663d5b4a435665e) mstore(add(transcript, 0x70a0), 0x2495e03d5e5c9d6acf62cdf715118eebbda912e3092dfe3e9813ed642cdf0412) mstore(add(transcript, 0x70c0), 0x0b9a8ccf1bc9f1b36b74792ad10007ce579e8ba5574a9880d6dff4da84768efe)success := and(eq(staticcall(gas(), 0x8, add(transcript, 0x6f60), 0x180, add(transcript, 0x6f60), 0x20), 1), success)success := and(eq(mload(add(transcript, 0x6f60)), 1), success)} return success; } } diff --git a/contracts/src/InclusionVerifier.yul b/contracts/src/InclusionVerifier.yul index f0ab35e1..0413d3da 100644 --- a/contracts/src/InclusionVerifier.yul +++ b/contracts/src/InclusionVerifier.yul @@ -33,7 +33,7 @@ } mstore(0x20, mod(calldataload(0x0), f_q)) mstore(0x40, mod(calldataload(0x20), f_q)) -mstore(0x0, 17529190814129643618827022425812408993103566606845457031195635551857697656486) +mstore(0x0, 18446911396317205745533550639557898655359618293120280237620224741936191804828) { let x := calldataload(0x40) @@ -1197,8 +1197,8 @@ mstore(0x5580, mload(0x54a0)) mstore(0x55c0, mload(0x5520)) mstore(0x55e0, mload(0x5540)) success := and(eq(staticcall(gas(), 0x6, 0x5580, 0x80, 0x5580, 0x40), 1), success) -mstore(0x5600, 0x14113d2da8037ec77f55dffb91151a8e7bb3eeea2fe44f6804703d0f82f344a0) - mstore(0x5620, 0x1c5b5f4c28346cfddf08edde8db492f19a24b5f73fc2bd48dc19137a11ce53bf) +mstore(0x5600, 0x23a3b90b52101f0a6b5743b3e901cc1ca3fedcf56639e3f5d092c1fe8918dd49) + mstore(0x5620, 0x2d1ac29c598a842f7865a78359fe925ab012907df3ef22ecee8c3e38775c47fd) mstore(0x5640, mload(0x4b80)) success := and(eq(staticcall(gas(), 0x7, 0x5600, 0x60, 0x5600, 0x40), 1), success) mstore(0x5660, mload(0x5580)) @@ -1206,8 +1206,8 @@ mstore(0x5660, mload(0x5580)) mstore(0x56a0, mload(0x5600)) mstore(0x56c0, mload(0x5620)) success := and(eq(staticcall(gas(), 0x6, 0x5660, 0x80, 0x5660, 0x40), 1), success) -mstore(0x56e0, 0x0491714ea02953469195ca0768b5aafb03166b27284de7cc9ffa7b3879a959a5) - mstore(0x5700, 0x2dbaa9a59dc7fd9657798dd9c00ffc85d2033e9555b699f4d9706bc2b77dce77) +mstore(0x56e0, 0x03889f612bd17e011b13902673a70688bbacdf22704cc8295740a0b855955fc0) + mstore(0x5700, 0x077a491ddd81dbd1802d89735ae881c56da97f908e0bb6a3a8ad6fd9f72db123) mstore(0x5720, mload(0x4ba0)) success := and(eq(staticcall(gas(), 0x7, 0x56e0, 0x60, 0x56e0, 0x40), 1), success) mstore(0x5740, mload(0x5660)) @@ -1215,8 +1215,8 @@ mstore(0x5740, mload(0x5660)) mstore(0x5780, mload(0x56e0)) mstore(0x57a0, mload(0x5700)) success := and(eq(staticcall(gas(), 0x6, 0x5740, 0x80, 0x5740, 0x40), 1), success) -mstore(0x57c0, 0x16da8fcde785c6df1fe13aec4a088e06790750dfa9a2e9c6e05464a06b99679d) - mstore(0x57e0, 0x19fffa5d91549cdec737262e6cc5fa01c2f1c39c7b5f567d65d68e2cf3077bdb) +mstore(0x57c0, 0x293f3eeabeb387e78c97a4de420d2336ff8ed1aaadf797c7dc3e622c9f144052) + mstore(0x57e0, 0x04f8141148a083ed78d264b622ccd39fdc2e5a4d4309def83c65f641fa1f73ae) mstore(0x5800, mload(0x4bc0)) success := and(eq(staticcall(gas(), 0x7, 0x57c0, 0x60, 0x57c0, 0x40), 1), success) mstore(0x5820, mload(0x5740)) @@ -1224,8 +1224,8 @@ mstore(0x5820, mload(0x5740)) mstore(0x5860, mload(0x57c0)) mstore(0x5880, mload(0x57e0)) success := and(eq(staticcall(gas(), 0x6, 0x5820, 0x80, 0x5820, 0x40), 1), success) -mstore(0x58a0, 0x1542d7d471049c346e9b97abc2a351948d23438019a76df2b1989c8f76b28760) - mstore(0x58c0, 0x0e26e13db1f178f85dbcb83b0a617d766c0b36fc4a49bafab13b20e83d0557f3) +mstore(0x58a0, 0x153842f7c3d4213d1a0bdf0272dc0ac05b87949495a94680ea07f5528cd4cb65) + mstore(0x58c0, 0x197481eee392189181d33d51883b612dc4b9b7b40ac3c516d04ef58b4458f841) mstore(0x58e0, mload(0x4be0)) success := and(eq(staticcall(gas(), 0x7, 0x58a0, 0x60, 0x58a0, 0x40), 1), success) mstore(0x5900, mload(0x5820)) @@ -1233,8 +1233,8 @@ mstore(0x5900, mload(0x5820)) mstore(0x5940, mload(0x58a0)) mstore(0x5960, mload(0x58c0)) success := and(eq(staticcall(gas(), 0x6, 0x5900, 0x80, 0x5900, 0x40), 1), success) -mstore(0x5980, 0x2b692b9199891f86e3fc5613991e72b47098220c9d883415244271cc74b1218d) - mstore(0x59a0, 0x042f929afe4bc56206b4ace41a3d283848753d5014597bcd0ec14f8a9261c584) +mstore(0x5980, 0x2eb2df9649175ed689ae9b18bd9c2da55e06f28b8bade40ece584fe646987af2) + mstore(0x59a0, 0x060bd862d267d622becf447c96e00a075a556a12d57a89cdfcccd59180d6e183) mstore(0x59c0, mload(0x4c00)) success := and(eq(staticcall(gas(), 0x7, 0x5980, 0x60, 0x5980, 0x40), 1), success) mstore(0x59e0, mload(0x5900)) @@ -1242,8 +1242,8 @@ mstore(0x59e0, mload(0x5900)) mstore(0x5a20, mload(0x5980)) mstore(0x5a40, mload(0x59a0)) success := and(eq(staticcall(gas(), 0x6, 0x59e0, 0x80, 0x59e0, 0x40), 1), success) -mstore(0x5a60, 0x29c09f206a2fb04b15a3a0c220024c6b0ffa448a19fe3d4ec45ffa20748fc946) - mstore(0x5a80, 0x1d27c69fbfa99caecf06376d79cbde5436726836ad63582954e2618d3899a6f6) +mstore(0x5a60, 0x261ab047cacbf6fda910b594e5a47fce17d7bf5912a803a159724638ac9a9293) + mstore(0x5a80, 0x1c19cf99cd99c0a2995e7b540f0e131d5a76ada19f52dbf97bf3f7e048e24d57) mstore(0x5aa0, mload(0x4c20)) success := and(eq(staticcall(gas(), 0x7, 0x5a60, 0x60, 0x5a60, 0x40), 1), success) mstore(0x5ac0, mload(0x59e0)) @@ -1251,8 +1251,8 @@ mstore(0x5ac0, mload(0x59e0)) mstore(0x5b00, mload(0x5a60)) mstore(0x5b20, mload(0x5a80)) success := and(eq(staticcall(gas(), 0x6, 0x5ac0, 0x80, 0x5ac0, 0x40), 1), success) -mstore(0x5b40, 0x20a3113a48bc99d14016666990d982af3fc8ef6269c2f37e053bbb801e1bda37) - mstore(0x5b60, 0x11874a3348a60113ed95b25c4bdb198369e449967dfe7fe3253cb39afdee2672) +mstore(0x5b40, 0x09852cc4d7e43585f80a71bb658d117c8bad4afd38c56250f79e2fe5ea36cbea) + mstore(0x5b60, 0x0eafdf1dc0ebc50c66a28ef4e4ce11d67dc26835ee8fca885308c4e800e503db) mstore(0x5b80, mload(0x4c40)) success := and(eq(staticcall(gas(), 0x7, 0x5b40, 0x60, 0x5b40, 0x40), 1), success) mstore(0x5ba0, mload(0x5ac0)) @@ -1260,8 +1260,8 @@ mstore(0x5ba0, mload(0x5ac0)) mstore(0x5be0, mload(0x5b40)) mstore(0x5c00, mload(0x5b60)) success := and(eq(staticcall(gas(), 0x6, 0x5ba0, 0x80, 0x5ba0, 0x40), 1), success) -mstore(0x5c20, 0x22ee677d2be1568a5ed89b73c8499d415c7c48b12184a48781e4f08d37755757) - mstore(0x5c40, 0x16f2744bb8dae65b5c5a6e0836cd5b59014c25f2481b024dec21ccbf26a9808c) +mstore(0x5c20, 0x060d05d9347318b8c482f43d589babe34c4feac67e633b7c7d205124e5942031) + mstore(0x5c40, 0x126bce5e065317f42c4ea09165d00008202438e1c490d572c6b76613f21a1ebf) mstore(0x5c60, mload(0x4c60)) success := and(eq(staticcall(gas(), 0x7, 0x5c20, 0x60, 0x5c20, 0x40), 1), success) mstore(0x5c80, mload(0x5ba0)) @@ -1269,8 +1269,8 @@ mstore(0x5c80, mload(0x5ba0)) mstore(0x5cc0, mload(0x5c20)) mstore(0x5ce0, mload(0x5c40)) success := and(eq(staticcall(gas(), 0x6, 0x5c80, 0x80, 0x5c80, 0x40), 1), success) -mstore(0x5d00, 0x0fccf37dc6868cb450c1cc971a9005c20acf19ddb1c82b9ceae7579aaaf6e5dc) - mstore(0x5d20, 0x1053a5adbb841ceb0c804c8e4188b2eb030d0a623ae199553173d818df46a8f8) +mstore(0x5d00, 0x1d0f94f3535e58b5d06c339b6364b77cafc3894f0189d777a08f20ce239a1a34) + mstore(0x5d20, 0x0b53ad507c469a238239f93e42e07194761f396948a8d4af1b2ef3eda0ba369f) mstore(0x5d40, mload(0x4c80)) success := and(eq(staticcall(gas(), 0x7, 0x5d00, 0x60, 0x5d00, 0x40), 1), success) mstore(0x5d60, mload(0x5c80)) @@ -1278,8 +1278,8 @@ mstore(0x5d60, mload(0x5c80)) mstore(0x5da0, mload(0x5d00)) mstore(0x5dc0, mload(0x5d20)) success := and(eq(staticcall(gas(), 0x6, 0x5d60, 0x80, 0x5d60, 0x40), 1), success) -mstore(0x5de0, 0x03c3c5792394acd6230174342c0fb4ceba9b35c38d4ab0ddb4a0fb177db54308) - mstore(0x5e00, 0x1fd7d3ae57e2ef4c7b1023ce495503e40ca89532cbf6a740e57d9fa57d2b6f93) +mstore(0x5de0, 0x05ffd6f47fadc13d413ff73d3dcd2b5413970d2328ace551b3b1d5f20a687375) + mstore(0x5e00, 0x267595ab27c68ff69d06c8c28585973ef0fbad8e0982871a193b026541e27893) mstore(0x5e20, mload(0x4ca0)) success := and(eq(staticcall(gas(), 0x7, 0x5de0, 0x60, 0x5de0, 0x40), 1), success) mstore(0x5e40, mload(0x5d60)) @@ -1287,8 +1287,8 @@ mstore(0x5e40, mload(0x5d60)) mstore(0x5e80, mload(0x5de0)) mstore(0x5ea0, mload(0x5e00)) success := and(eq(staticcall(gas(), 0x6, 0x5e40, 0x80, 0x5e40, 0x40), 1), success) -mstore(0x5ec0, 0x15b64cf223d375ca6c983ab84102a960bfeb54a0a29a085844e0e571b09f3d71) - mstore(0x5ee0, 0x23d8408484b6b10b897f9b0cc33314d9060dac48f43a62a0e5660be5882a7a8e) +mstore(0x5ec0, 0x072dca4b7136fbd39742610eeae201e76bc2295ddc20cc18dd6b19aa7b724b13) + mstore(0x5ee0, 0x23048e9bb2debeafcf95628ab81b03275cdee33bca18d579dde2661f64645ec5) mstore(0x5f00, mload(0x4cc0)) success := and(eq(staticcall(gas(), 0x7, 0x5ec0, 0x60, 0x5ec0, 0x40), 1), success) mstore(0x5f20, mload(0x5e40)) @@ -1296,8 +1296,8 @@ mstore(0x5f20, mload(0x5e40)) mstore(0x5f60, mload(0x5ec0)) mstore(0x5f80, mload(0x5ee0)) success := and(eq(staticcall(gas(), 0x6, 0x5f20, 0x80, 0x5f20, 0x40), 1), success) -mstore(0x5fa0, 0x2b069d8e2e57e6add6f216816a31936af27540959bfd7b845d3e74d84196639d) - mstore(0x5fc0, 0x0840b8c0bdbb760a926c4046da2614e14d3c8b2fafc18c7471ce21298ca57c17) +mstore(0x5fa0, 0x05469c240f7b5fedc125ba1ee66cae1377ec75579599278f630f2d7640994fec) + mstore(0x5fc0, 0x08b814cfa26074aade7bab13b494f598aa5bfdbc49d0df4c4390dd69285d03d0) mstore(0x5fe0, mload(0x4ce0)) success := and(eq(staticcall(gas(), 0x7, 0x5fa0, 0x60, 0x5fa0, 0x40), 1), success) mstore(0x6000, mload(0x5f20)) @@ -1305,8 +1305,8 @@ mstore(0x6000, mload(0x5f20)) mstore(0x6040, mload(0x5fa0)) mstore(0x6060, mload(0x5fc0)) success := and(eq(staticcall(gas(), 0x6, 0x6000, 0x80, 0x6000, 0x40), 1), success) -mstore(0x6080, 0x2a6e42bf68afa452351faa949dc279f9fe3c68b126280aca278121888fcbaf73) - mstore(0x60a0, 0x04ddb656fb4f29069ada65c848b2ab177b495c0869aba6fe9216dab3a043f759) +mstore(0x6080, 0x07faf619bc79f6e8ecd37ee152e6befc7b7789c1b594544bf208493392a8ee28) + mstore(0x60a0, 0x2a91842e18f3ac761e5f65edc640dd42ef6d9115b649ad3acdff6cced7a274aa) mstore(0x60c0, mload(0x4d00)) success := and(eq(staticcall(gas(), 0x7, 0x6080, 0x60, 0x6080, 0x40), 1), success) mstore(0x60e0, mload(0x6000)) @@ -1314,8 +1314,8 @@ mstore(0x60e0, mload(0x6000)) mstore(0x6120, mload(0x6080)) mstore(0x6140, mload(0x60a0)) success := and(eq(staticcall(gas(), 0x6, 0x60e0, 0x80, 0x60e0, 0x40), 1), success) -mstore(0x6160, 0x0182a509c08487b8c3d5b8507251cc8a46f5b313c687c1e7262d08eb8dfa4c10) - mstore(0x6180, 0x0474aa258fa2d41afc65596c3ada20b889a0f27825905a2a176560b27e2d2c8e) +mstore(0x6160, 0x0fd4442f53e6b5a5f860c2c811cf4e498642314abc354e0a174be6b8bc0e27e5) + mstore(0x6180, 0x091f3fcbe89a23c4458c2e38c7b6444e28d8244c08549e9525ceedf4a320cbc0) mstore(0x61a0, mload(0x4d20)) success := and(eq(staticcall(gas(), 0x7, 0x6160, 0x60, 0x6160, 0x40), 1), success) mstore(0x61c0, mload(0x60e0)) @@ -1323,8 +1323,8 @@ mstore(0x61c0, mload(0x60e0)) mstore(0x6200, mload(0x6160)) mstore(0x6220, mload(0x6180)) success := and(eq(staticcall(gas(), 0x6, 0x61c0, 0x80, 0x61c0, 0x40), 1), success) -mstore(0x6240, 0x1b5b2f748768c343be69fd761df14910a926a77da095db2912e96ac9f73ab6a2) - mstore(0x6260, 0x2c0bb520bc601497c6b7f1bf683c83cab3a0440c41d8fdfbae0c775a57e727f5) +mstore(0x6240, 0x050cba2ca48cc882687a9e66867e984e2ce5494778a8bcaffdd2296ba9abdb56) + mstore(0x6260, 0x0e44d0ab2133714afce93a354d6271470c293f18ef29ecc874416f81ffb92818) mstore(0x6280, mload(0x4d40)) success := and(eq(staticcall(gas(), 0x7, 0x6240, 0x60, 0x6240, 0x40), 1), success) mstore(0x62a0, mload(0x61c0)) @@ -1332,8 +1332,8 @@ mstore(0x62a0, mload(0x61c0)) mstore(0x62e0, mload(0x6240)) mstore(0x6300, mload(0x6260)) success := and(eq(staticcall(gas(), 0x6, 0x62a0, 0x80, 0x62a0, 0x40), 1), success) -mstore(0x6320, 0x0013dfb44248755cf12dcbac0ec5563e577e5b804ade04abc4e9baadac00e7ff) - mstore(0x6340, 0x264d42845662a911a5c37ae71cce463c1c387c12eed1a675e957440020045cb1) +mstore(0x6320, 0x2f69a41fff5cbe55da07d30e789a0d7660d3e841c70ebb326f5825610a4a5c08) + mstore(0x6340, 0x1fe7e7411a599e8addf546471194a4851d36c711a88e926632f571f0d91fc9f6) mstore(0x6360, mload(0x4d60)) success := and(eq(staticcall(gas(), 0x7, 0x6320, 0x60, 0x6320, 0x40), 1), success) mstore(0x6380, mload(0x62a0)) @@ -1341,8 +1341,8 @@ mstore(0x6380, mload(0x62a0)) mstore(0x63c0, mload(0x6320)) mstore(0x63e0, mload(0x6340)) success := and(eq(staticcall(gas(), 0x6, 0x6380, 0x80, 0x6380, 0x40), 1), success) -mstore(0x6400, 0x2386d5258846b3fc1e5ffca77fde43316fd15ea08e7ce940927f7212c1b37bb7) - mstore(0x6420, 0x23306e0a53ba71047743578c8fb135d2b843a8dded816b5a9e0b06b72f07be96) +mstore(0x6400, 0x26a5a8097f66050a9a3d815d3915eb122d75020777f9e87b160e67cc7fa17e5e) + mstore(0x6420, 0x12c0173fdec4f54e72a0ab39fd9a5ffa14364bbb1ef304610af17195b993b316) mstore(0x6440, mload(0x4d80)) success := and(eq(staticcall(gas(), 0x7, 0x6400, 0x60, 0x6400, 0x40), 1), success) mstore(0x6460, mload(0x6380)) @@ -1466,10 +1466,10 @@ mstore(0x6fa0, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c mstore(0x7000, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa) mstore(0x7020, mload(0xb80)) mstore(0x7040, mload(0xba0)) -mstore(0x7060, 0x1e46f29916af7be8122d38ce700e9f73b49830b4aa672d58c5fa83daa6f49038) - mstore(0x7080, 0x203ccabc1b45b69a6dfd92fe117dfbdbeb48e684dccdf8cb2f466f4b86073034) - mstore(0x70a0, 0x0bd22dcbe71a1faeea29bf6783cbc63f06788ff9ea2488a2af9036ac52d4ae82) - mstore(0x70c0, 0x23b7b2c332fca16856cc8bd1ca0b56f6872ed95ef4291917fce124bf48c13609) +mstore(0x7060, 0x1d34ba6e3b52afa8a8df056bfc5157fa16e2c5bb045aab7186aab58f70927fbc) + mstore(0x7080, 0x0b4a022eb8fc503d9d91660c783fc6e37ae61570ebe4883f3663d5b4a435665e) + mstore(0x70a0, 0x2495e03d5e5c9d6acf62cdf715118eebbda912e3092dfe3e9813ed642cdf0412) + mstore(0x70c0, 0x0b9a8ccf1bc9f1b36b74792ad10007ce579e8ba5574a9880d6dff4da84768efe) success := and(eq(staticcall(gas(), 0x8, 0x6f60, 0x180, 0x6f60, 0x20), 1), success) success := and(eq(mload(0x6f60), 1), success) diff --git a/contracts/src/SolvencyVerifier.sol b/contracts/src/SolvencyVerifier.sol index 1cfb6165..6ebf5f7e 100644 --- a/contracts/src/SolvencyVerifier.sol +++ b/contracts/src/SolvencyVerifier.sol @@ -8,4 +8,4 @@ ) public view returns (bool) { bool success = true; bytes32[846] memory transcript; - assembly { let f_p := 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 let f_q := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 function validate_ec_point(x, y) -> valid { { let x_lt_p := lt(x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let y_lt_p := lt(y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) valid := and(x_lt_p, y_lt_p) } { let y_square := mulmod(y, y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_square := mulmod(x, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube := mulmod(x_square, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube_plus_3 := addmod(x_cube, 3, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let is_affine := eq(x_cube_plus_3, y_square) valid := and(valid, is_affine) } } mstore(add(transcript, 0x20), mod(mload(add(pubInputs, 0x20)), f_q))mstore(add(transcript, 0x40), mod(mload(add(pubInputs, 0x40)), f_q))mstore(add(transcript, 0x60), mod(mload(add(pubInputs, 0x60)), f_q))mstore(add(transcript, 0x0), 10019076969128440693561739196454840883339425900500712756121228777141389475461) { let x := mload(add(proof, 0x20)) mstore(add(transcript, 0x80), x) let y := mload(add(proof, 0x40)) mstore(add(transcript, 0xa0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x60)) mstore(add(transcript, 0xc0), x) let y := mload(add(proof, 0x80)) mstore(add(transcript, 0xe0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0xa0)) mstore(add(transcript, 0x100), x) let y := mload(add(proof, 0xc0)) mstore(add(transcript, 0x120), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x140), keccak256(add(transcript, 0x0), 320)){ let hash := mload(add(transcript, 0x140)) mstore(add(transcript, 0x160), mod(hash, f_q)) mstore(add(transcript, 0x180), hash) } { let x := mload(add(proof, 0xe0)) mstore(add(transcript, 0x1a0), x) let y := mload(add(proof, 0x100)) mstore(add(transcript, 0x1c0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x120)) mstore(add(transcript, 0x1e0), x) let y := mload(add(proof, 0x140)) mstore(add(transcript, 0x200), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x220), keccak256(add(transcript, 0x180), 160)){ let hash := mload(add(transcript, 0x220)) mstore(add(transcript, 0x240), mod(hash, f_q)) mstore(add(transcript, 0x260), hash) }mstore8(add(transcript, 0x280), 1)mstore(add(transcript, 0x280), keccak256(add(transcript, 0x260), 33)){ let hash := mload(add(transcript, 0x280)) mstore(add(transcript, 0x2a0), mod(hash, f_q)) mstore(add(transcript, 0x2c0), hash) } { let x := mload(add(proof, 0x160)) mstore(add(transcript, 0x2e0), x) let y := mload(add(proof, 0x180)) mstore(add(transcript, 0x300), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x1a0)) mstore(add(transcript, 0x320), x) let y := mload(add(proof, 0x1c0)) mstore(add(transcript, 0x340), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x1e0)) mstore(add(transcript, 0x360), x) let y := mload(add(proof, 0x200)) mstore(add(transcript, 0x380), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x220)) mstore(add(transcript, 0x3a0), x) let y := mload(add(proof, 0x240)) mstore(add(transcript, 0x3c0), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x3e0), keccak256(add(transcript, 0x2c0), 288)){ let hash := mload(add(transcript, 0x3e0)) mstore(add(transcript, 0x400), mod(hash, f_q)) mstore(add(transcript, 0x420), hash) } { let x := mload(add(proof, 0x260)) mstore(add(transcript, 0x440), x) let y := mload(add(proof, 0x280)) mstore(add(transcript, 0x460), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x2a0)) mstore(add(transcript, 0x480), x) let y := mload(add(proof, 0x2c0)) mstore(add(transcript, 0x4a0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x2e0)) mstore(add(transcript, 0x4c0), x) let y := mload(add(proof, 0x300)) mstore(add(transcript, 0x4e0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x320)) mstore(add(transcript, 0x500), x) let y := mload(add(proof, 0x340)) mstore(add(transcript, 0x520), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x360)) mstore(add(transcript, 0x540), x) let y := mload(add(proof, 0x380)) mstore(add(transcript, 0x560), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x580), keccak256(add(transcript, 0x420), 352)){ let hash := mload(add(transcript, 0x580)) mstore(add(transcript, 0x5a0), mod(hash, f_q)) mstore(add(transcript, 0x5c0), hash) }mstore(add(transcript, 0x5e0), mod(mload(add(proof, 0x3a0)), f_q))mstore(add(transcript, 0x600), mod(mload(add(proof, 0x3c0)), f_q))mstore(add(transcript, 0x620), mod(mload(add(proof, 0x3e0)), f_q))mstore(add(transcript, 0x640), mod(mload(add(proof, 0x400)), f_q))mstore(add(transcript, 0x660), mod(mload(add(proof, 0x420)), f_q))mstore(add(transcript, 0x680), mod(mload(add(proof, 0x440)), f_q))mstore(add(transcript, 0x6a0), mod(mload(add(proof, 0x460)), f_q))mstore(add(transcript, 0x6c0), mod(mload(add(proof, 0x480)), f_q))mstore(add(transcript, 0x6e0), mod(mload(add(proof, 0x4a0)), f_q))mstore(add(transcript, 0x700), mod(mload(add(proof, 0x4c0)), f_q))mstore(add(transcript, 0x720), mod(mload(add(proof, 0x4e0)), f_q))mstore(add(transcript, 0x740), mod(mload(add(proof, 0x500)), f_q))mstore(add(transcript, 0x760), mod(mload(add(proof, 0x520)), f_q))mstore(add(transcript, 0x780), mod(mload(add(proof, 0x540)), f_q))mstore(add(transcript, 0x7a0), mod(mload(add(proof, 0x560)), f_q))mstore(add(transcript, 0x7c0), mod(mload(add(proof, 0x580)), f_q))mstore(add(transcript, 0x7e0), mod(mload(add(proof, 0x5a0)), f_q))mstore(add(transcript, 0x800), mod(mload(add(proof, 0x5c0)), f_q))mstore(add(transcript, 0x820), mod(mload(add(proof, 0x5e0)), f_q))mstore(add(transcript, 0x840), mod(mload(add(proof, 0x600)), f_q))mstore(add(transcript, 0x860), mod(mload(add(proof, 0x620)), f_q))mstore(add(transcript, 0x880), mod(mload(add(proof, 0x640)), f_q))mstore(add(transcript, 0x8a0), mod(mload(add(proof, 0x660)), f_q))mstore(add(transcript, 0x8c0), mod(mload(add(proof, 0x680)), f_q))mstore(add(transcript, 0x8e0), mod(mload(add(proof, 0x6a0)), f_q))mstore(add(transcript, 0x900), mod(mload(add(proof, 0x6c0)), f_q))mstore(add(transcript, 0x920), mod(mload(add(proof, 0x6e0)), f_q))mstore(add(transcript, 0x940), mod(mload(add(proof, 0x700)), f_q))mstore(add(transcript, 0x960), mod(mload(add(proof, 0x720)), f_q))mstore(add(transcript, 0x980), mod(mload(add(proof, 0x740)), f_q))mstore(add(transcript, 0x9a0), mod(mload(add(proof, 0x760)), f_q))mstore(add(transcript, 0x9c0), mod(mload(add(proof, 0x780)), f_q))mstore(add(transcript, 0x9e0), mod(mload(add(proof, 0x7a0)), f_q))mstore(add(transcript, 0xa00), keccak256(add(transcript, 0x5c0), 1088)){ let hash := mload(add(transcript, 0xa00)) mstore(add(transcript, 0xa20), mod(hash, f_q)) mstore(add(transcript, 0xa40), hash) }mstore8(add(transcript, 0xa60), 1)mstore(add(transcript, 0xa60), keccak256(add(transcript, 0xa40), 33)){ let hash := mload(add(transcript, 0xa60)) mstore(add(transcript, 0xa80), mod(hash, f_q)) mstore(add(transcript, 0xaa0), hash) } { let x := mload(add(proof, 0x7c0)) mstore(add(transcript, 0xac0), x) let y := mload(add(proof, 0x7e0)) mstore(add(transcript, 0xae0), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0xb00), keccak256(add(transcript, 0xaa0), 96)){ let hash := mload(add(transcript, 0xb00)) mstore(add(transcript, 0xb20), mod(hash, f_q)) mstore(add(transcript, 0xb40), hash) } { let x := mload(add(proof, 0x800)) mstore(add(transcript, 0xb60), x) let y := mload(add(proof, 0x820)) mstore(add(transcript, 0xb80), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0xba0), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x5a0)), f_q))mstore(add(transcript, 0xbc0), mulmod(mload(add(transcript, 0xba0)), mload(add(transcript, 0xba0)), f_q))mstore(add(transcript, 0xbe0), mulmod(mload(add(transcript, 0xbc0)), mload(add(transcript, 0xbc0)), f_q))mstore(add(transcript, 0xc00), mulmod(mload(add(transcript, 0xbe0)), mload(add(transcript, 0xbe0)), f_q))mstore(add(transcript, 0xc20), mulmod(mload(add(transcript, 0xc00)), mload(add(transcript, 0xc00)), f_q))mstore(add(transcript, 0xc40), mulmod(mload(add(transcript, 0xc20)), mload(add(transcript, 0xc20)), f_q))mstore(add(transcript, 0xc60), mulmod(mload(add(transcript, 0xc40)), mload(add(transcript, 0xc40)), f_q))mstore(add(transcript, 0xc80), mulmod(mload(add(transcript, 0xc60)), mload(add(transcript, 0xc60)), f_q))mstore(add(transcript, 0xca0), mulmod(mload(add(transcript, 0xc80)), mload(add(transcript, 0xc80)), f_q))mstore(add(transcript, 0xcc0), mulmod(mload(add(transcript, 0xca0)), mload(add(transcript, 0xca0)), f_q))mstore(add(transcript, 0xce0), addmod(mload(add(transcript, 0xcc0)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))mstore(add(transcript, 0xd00), mulmod(mload(add(transcript, 0xce0)), 21866867634659744680037180739646672280844703888306253060159436409049855557633, f_q))mstore(add(transcript, 0xd20), mulmod(mload(add(transcript, 0xd00)), 9936069627611189518829255670237324269287146421271524553312532036927871056678, f_q))mstore(add(transcript, 0xd40), addmod(mload(add(transcript, 0x5a0)), 11952173244228085703417150075019950819261217979144509790385672149647937438939, f_q))mstore(add(transcript, 0xd60), mulmod(mload(add(transcript, 0xd00)), 1680739780407307830605919050682431078078760076686599579086116998224280619988, f_q))mstore(add(transcript, 0xd80), addmod(mload(add(transcript, 0x5a0)), 20207503091431967391640486694574844010469604323729434764612087188351527875629, f_q))mstore(add(transcript, 0xda0), mulmod(mload(add(transcript, 0xd00)), 14158528901797138466244491986759313854666262535363044392173788062030301470987, f_q))mstore(add(transcript, 0xdc0), addmod(mload(add(transcript, 0x5a0)), 7729713970042136756001913758497961233882101865052989951524416124545507024630, f_q))mstore(add(transcript, 0xde0), mulmod(mload(add(transcript, 0xd00)), 15699029810934084314820646074566828280617789951162923449200398535581206172418, f_q))mstore(add(transcript, 0xe00), addmod(mload(add(transcript, 0x5a0)), 6189213060905190907425759670690446807930574449253110894497805650994602323199, f_q))mstore(add(transcript, 0xe20), mulmod(mload(add(transcript, 0xd00)), 4260969412351770314333984243767775737437927068151180798236715529158398853173, f_q))mstore(add(transcript, 0xe40), addmod(mload(add(transcript, 0x5a0)), 17627273459487504907912421501489499351110437332264853545461488657417409642444, f_q))mstore(add(transcript, 0xe60), mulmod(mload(add(transcript, 0xd00)), 4925592601992654644734291590386747644864797672605745962807370354577123815907, f_q))mstore(add(transcript, 0xe80), addmod(mload(add(transcript, 0x5a0)), 16962650269846620577512114154870527443683566727810288380890833831998684679710, f_q))mstore(add(transcript, 0xea0), mulmod(mload(add(transcript, 0xd00)), 1, f_q))mstore(add(transcript, 0xec0), addmod(mload(add(transcript, 0x5a0)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))mstore(add(transcript, 0xee0), mulmod(mload(add(transcript, 0xd00)), 19380560087801265747114831706136320509424814679569278834391540198888293317501, f_q))mstore(add(transcript, 0xf00), addmod(mload(add(transcript, 0x5a0)), 2507682784038009475131574039120954579123549720846755509306663987687515178116, f_q))mstore(add(transcript, 0xf20), mulmod(mload(add(transcript, 0xd00)), 6252951856119339508807713076978770803512896272623217303779254502899773638908, f_q))mstore(add(transcript, 0xf40), addmod(mload(add(transcript, 0x5a0)), 15635291015719935713438692668278504285035468127792817039918949683676034856709, f_q)){ let prod := mload(add(transcript, 0xd40)) prod := mulmod(mload(add(transcript, 0xd80)), prod, f_q) mstore(add(transcript, 0xf60), prod) prod := mulmod(mload(add(transcript, 0xdc0)), prod, f_q) mstore(add(transcript, 0xf80), prod) prod := mulmod(mload(add(transcript, 0xe00)), prod, f_q) mstore(add(transcript, 0xfa0), prod) prod := mulmod(mload(add(transcript, 0xe40)), prod, f_q) mstore(add(transcript, 0xfc0), prod) prod := mulmod(mload(add(transcript, 0xe80)), prod, f_q) mstore(add(transcript, 0xfe0), prod) prod := mulmod(mload(add(transcript, 0xec0)), prod, f_q) mstore(add(transcript, 0x1000), prod) prod := mulmod(mload(add(transcript, 0xf00)), prod, f_q) mstore(add(transcript, 0x1020), prod) prod := mulmod(mload(add(transcript, 0xf40)), prod, f_q) mstore(add(transcript, 0x1040), prod) prod := mulmod(mload(add(transcript, 0xce0)), prod, f_q) mstore(add(transcript, 0x1060), prod) }mstore(add(transcript, 0x10a0), 32)mstore(add(transcript, 0x10c0), 32)mstore(add(transcript, 0x10e0), 32)mstore(add(transcript, 0x1100), mload(add(transcript, 0x1060)))mstore(add(transcript, 0x1120), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x1140), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x10a0), 0xc0, add(transcript, 0x1080), 0x20), 1), success){ let inv := mload(add(transcript, 0x1080)) let v v := mload(add(transcript, 0xce0)) mstore(add(transcript, 0xce0), mulmod(mload(add(transcript, 0x1040)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xf40)) mstore(add(transcript, 0xf40), mulmod(mload(add(transcript, 0x1020)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xf00)) mstore(add(transcript, 0xf00), mulmod(mload(add(transcript, 0x1000)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xec0)) mstore(add(transcript, 0xec0), mulmod(mload(add(transcript, 0xfe0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe80)) mstore(add(transcript, 0xe80), mulmod(mload(add(transcript, 0xfc0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe40)) mstore(add(transcript, 0xe40), mulmod(mload(add(transcript, 0xfa0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe00)) mstore(add(transcript, 0xe00), mulmod(mload(add(transcript, 0xf80)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xdc0)) mstore(add(transcript, 0xdc0), mulmod(mload(add(transcript, 0xf60)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xd80)) mstore(add(transcript, 0xd80), mulmod(mload(add(transcript, 0xd40)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0xd40), inv) }mstore(add(transcript, 0x1160), mulmod(mload(add(transcript, 0xd20)), mload(add(transcript, 0xd40)), f_q))mstore(add(transcript, 0x1180), mulmod(mload(add(transcript, 0xd60)), mload(add(transcript, 0xd80)), f_q))mstore(add(transcript, 0x11a0), mulmod(mload(add(transcript, 0xda0)), mload(add(transcript, 0xdc0)), f_q))mstore(add(transcript, 0x11c0), mulmod(mload(add(transcript, 0xde0)), mload(add(transcript, 0xe00)), f_q))mstore(add(transcript, 0x11e0), mulmod(mload(add(transcript, 0xe20)), mload(add(transcript, 0xe40)), f_q))mstore(add(transcript, 0x1200), mulmod(mload(add(transcript, 0xe60)), mload(add(transcript, 0xe80)), f_q))mstore(add(transcript, 0x1220), mulmod(mload(add(transcript, 0xea0)), mload(add(transcript, 0xec0)), f_q))mstore(add(transcript, 0x1240), mulmod(mload(add(transcript, 0xee0)), mload(add(transcript, 0xf00)), f_q))mstore(add(transcript, 0x1260), mulmod(mload(add(transcript, 0xf20)), mload(add(transcript, 0xf40)), f_q)){ let result := mulmod(mload(add(transcript, 0x1220)), mload(add(transcript, 0x20)), f_q)result := addmod(mulmod(mload(add(transcript, 0x1240)), mload(add(transcript, 0x40)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x1260)), mload(add(transcript, 0x60)), f_q), result, f_q)mstore(add(transcript, 0x1280), result) }mstore(add(transcript, 0x12a0), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x720)), f_q))mstore(add(transcript, 0x12c0), mulmod(mload(add(transcript, 0x12a0)), mload(add(transcript, 0x12a0)), f_q))mstore(add(transcript, 0x12e0), mulmod(mload(add(transcript, 0x12c0)), mload(add(transcript, 0x12c0)), f_q))mstore(add(transcript, 0x1300), mulmod(mload(add(transcript, 0x12a0)), mload(add(transcript, 0x12e0)), f_q))mstore(add(transcript, 0x1320), mulmod(mload(add(transcript, 0x1300)), 2910766817845651019878574839501801340070030115151021261302834310722729507541, f_q))mstore(add(transcript, 0x1340), addmod(mload(add(transcript, 0x600)), mload(add(transcript, 0x740)), f_q))mstore(add(transcript, 0x1360), mulmod(mload(add(transcript, 0x1340)), mload(add(transcript, 0x1340)), f_q))mstore(add(transcript, 0x1380), mulmod(mload(add(transcript, 0x1360)), mload(add(transcript, 0x1360)), f_q))mstore(add(transcript, 0x13a0), mulmod(mload(add(transcript, 0x1340)), mload(add(transcript, 0x1380)), f_q))mstore(add(transcript, 0x13c0), mulmod(mload(add(transcript, 0x13a0)), 19727366863391167538122140361473584127147630672623100827934084310230022599144, f_q))mstore(add(transcript, 0x13e0), addmod(mload(add(transcript, 0x1320)), mload(add(transcript, 0x13c0)), f_q))mstore(add(transcript, 0x1400), addmod(mload(add(transcript, 0x13e0)), sub(f_q, mload(add(transcript, 0x620))), f_q))mstore(add(transcript, 0x1420), mulmod(mload(add(transcript, 0x1400)), mload(add(transcript, 0x7a0)), f_q))mstore(add(transcript, 0x1440), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1420)), f_q))mstore(add(transcript, 0x1460), mulmod(mload(add(transcript, 0x1300)), 5776684794125549462448597414050232243778680302179439492664047328281728356345, f_q))mstore(add(transcript, 0x1480), mulmod(mload(add(transcript, 0x13a0)), 8348174920934122550483593999453880006756108121341067172388445916328941978568, f_q))mstore(add(transcript, 0x14a0), addmod(mload(add(transcript, 0x1460)), mload(add(transcript, 0x1480)), f_q))mstore(add(transcript, 0x14c0), addmod(mload(add(transcript, 0x14a0)), sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x14e0), mulmod(mload(add(transcript, 0x14c0)), mload(add(transcript, 0x7a0)), f_q))mstore(add(transcript, 0x1500), addmod(mload(add(transcript, 0x1440)), mload(add(transcript, 0x14e0)), f_q))mstore(add(transcript, 0x1520), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1500)), f_q))mstore(add(transcript, 0x1540), addmod(mload(add(transcript, 0x1300)), sub(f_q, mload(add(transcript, 0x660))), f_q))mstore(add(transcript, 0x1560), mulmod(mload(add(transcript, 0x1540)), mload(add(transcript, 0x7c0)), f_q))mstore(add(transcript, 0x1580), addmod(mload(add(transcript, 0x1520)), mload(add(transcript, 0x1560)), f_q))mstore(add(transcript, 0x15a0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1580)), f_q))mstore(add(transcript, 0x15c0), mulmod(mload(add(transcript, 0x660)), 2910766817845651019878574839501801340070030115151021261302834310722729507541, f_q))mstore(add(transcript, 0x15e0), mulmod(mload(add(transcript, 0x1340)), 19727366863391167538122140361473584127147630672623100827934084310230022599144, f_q))mstore(add(transcript, 0x1600), addmod(mload(add(transcript, 0x15c0)), mload(add(transcript, 0x15e0)), f_q))mstore(add(transcript, 0x1620), addmod(mload(add(transcript, 0x1600)), mload(add(transcript, 0x6e0)), f_q))mstore(add(transcript, 0x1640), mulmod(mload(add(transcript, 0x1620)), mload(add(transcript, 0x1620)), f_q))mstore(add(transcript, 0x1660), mulmod(mload(add(transcript, 0x1640)), mload(add(transcript, 0x1640)), f_q))mstore(add(transcript, 0x1680), mulmod(mload(add(transcript, 0x1620)), mload(add(transcript, 0x1660)), f_q))mstore(add(transcript, 0x16a0), mulmod(mload(add(transcript, 0x620)), 8897705321156975119607866206188469715432233408805434913352778521345836531302, f_q))mstore(add(transcript, 0x16c0), mulmod(mload(add(transcript, 0x640)), 13897810991298242824030978581179475767377101082166056046492926701399149797630, f_q))mstore(add(transcript, 0x16e0), addmod(mload(add(transcript, 0x16a0)), mload(add(transcript, 0x16c0)), f_q))mstore(add(transcript, 0x1700), addmod(mload(add(transcript, 0x1680)), sub(f_q, mload(add(transcript, 0x16e0))), f_q))mstore(add(transcript, 0x1720), mulmod(mload(add(transcript, 0x1700)), mload(add(transcript, 0x7c0)), f_q))mstore(add(transcript, 0x1740), addmod(mload(add(transcript, 0x15a0)), mload(add(transcript, 0x1720)), f_q))mstore(add(transcript, 0x1760), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1740)), f_q))mstore(add(transcript, 0x1780), mulmod(mload(add(transcript, 0x660)), 5776684794125549462448597414050232243778680302179439492664047328281728356345, f_q))mstore(add(transcript, 0x17a0), mulmod(mload(add(transcript, 0x1340)), 8348174920934122550483593999453880006756108121341067172388445916328941978568, f_q))mstore(add(transcript, 0x17c0), addmod(mload(add(transcript, 0x1780)), mload(add(transcript, 0x17a0)), f_q))mstore(add(transcript, 0x17e0), addmod(mload(add(transcript, 0x17c0)), mload(add(transcript, 0x700)), f_q))mstore(add(transcript, 0x1800), mulmod(mload(add(transcript, 0x620)), 7127083008168878795310303301757642617203533252990949589494537404444738046722, f_q))mstore(add(transcript, 0x1820), mulmod(mload(add(transcript, 0x640)), 10251091711782631878897995303436082826711938358699127319815611151510940403902, f_q))mstore(add(transcript, 0x1840), addmod(mload(add(transcript, 0x1800)), mload(add(transcript, 0x1820)), f_q))mstore(add(transcript, 0x1860), addmod(mload(add(transcript, 0x17e0)), sub(f_q, mload(add(transcript, 0x1840))), f_q))mstore(add(transcript, 0x1880), mulmod(mload(add(transcript, 0x1860)), mload(add(transcript, 0x7c0)), f_q))mstore(add(transcript, 0x18a0), addmod(mload(add(transcript, 0x1760)), mload(add(transcript, 0x1880)), f_q))mstore(add(transcript, 0x18c0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x18a0)), f_q))mstore(add(transcript, 0x18e0), addmod(1, sub(f_q, mload(add(transcript, 0x780))), f_q))mstore(add(transcript, 0x1900), mulmod(mload(add(transcript, 0x18e0)), mload(add(transcript, 0x780)), f_q))mstore(add(transcript, 0x1920), addmod(2, sub(f_q, mload(add(transcript, 0x780))), f_q))mstore(add(transcript, 0x1940), mulmod(mload(add(transcript, 0x1920)), mload(add(transcript, 0x1900)), f_q))mstore(add(transcript, 0x1960), addmod(3, sub(f_q, mload(add(transcript, 0x780))), f_q))mstore(add(transcript, 0x1980), mulmod(mload(add(transcript, 0x1960)), mload(add(transcript, 0x1940)), f_q))mstore(add(transcript, 0x19a0), addmod(mload(add(transcript, 0x6a0)), mload(add(transcript, 0x5e0)), f_q))mstore(add(transcript, 0x19c0), addmod(mload(add(transcript, 0x19a0)), sub(f_q, mload(add(transcript, 0x620))), f_q))mstore(add(transcript, 0x19e0), mulmod(mload(add(transcript, 0x19c0)), mload(add(transcript, 0x1980)), f_q))mstore(add(transcript, 0x1a00), addmod(mload(add(transcript, 0x18c0)), mload(add(transcript, 0x19e0)), f_q))mstore(add(transcript, 0x1a20), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1a00)), f_q))mstore(add(transcript, 0x1a40), addmod(mload(add(transcript, 0x680)), sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x1a60), mulmod(mload(add(transcript, 0x1a40)), mload(add(transcript, 0x1980)), f_q))mstore(add(transcript, 0x1a80), addmod(mload(add(transcript, 0x1a20)), mload(add(transcript, 0x1a60)), f_q))mstore(add(transcript, 0x1aa0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1a80)), f_q))mstore(add(transcript, 0x1ac0), mulmod(mload(add(transcript, 0x1920)), mload(add(transcript, 0x780)), f_q))mstore(add(transcript, 0x1ae0), mulmod(mload(add(transcript, 0x1960)), mload(add(transcript, 0x1ac0)), f_q))mstore(add(transcript, 0x1b00), addmod(4, sub(f_q, mload(add(transcript, 0x780))), f_q))mstore(add(transcript, 0x1b20), mulmod(mload(add(transcript, 0x1b00)), mload(add(transcript, 0x1ae0)), f_q))mstore(add(transcript, 0x1b40), mulmod(mload(add(transcript, 0x660)), mload(add(transcript, 0x1b20)), f_q))mstore(add(transcript, 0x1b60), addmod(1, sub(f_q, mload(add(transcript, 0x660))), f_q))mstore(add(transcript, 0x1b80), mulmod(mload(add(transcript, 0x1b60)), mload(add(transcript, 0x1b40)), f_q))mstore(add(transcript, 0x1ba0), addmod(mload(add(transcript, 0x1aa0)), mload(add(transcript, 0x1b80)), f_q))mstore(add(transcript, 0x1bc0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1ba0)), f_q))mstore(add(transcript, 0x1be0), mulmod(2, mload(add(transcript, 0x660)), f_q))mstore(add(transcript, 0x1c00), addmod(mload(add(transcript, 0x600)), sub(f_q, mload(add(transcript, 0x5e0))), f_q))mstore(add(transcript, 0x1c20), mulmod(mload(add(transcript, 0x1c00)), mload(add(transcript, 0x1be0)), f_q))mstore(add(transcript, 0x1c40), addmod(mload(add(transcript, 0x620)), sub(f_q, mload(add(transcript, 0x5e0))), f_q))mstore(add(transcript, 0x1c60), addmod(mload(add(transcript, 0x1c20)), sub(f_q, mload(add(transcript, 0x1c40))), f_q))mstore(add(transcript, 0x1c80), addmod(mload(add(transcript, 0x600)), sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x1ca0), addmod(mload(add(transcript, 0x1c60)), sub(f_q, mload(add(transcript, 0x1c80))), f_q))mstore(add(transcript, 0x1cc0), mulmod(mload(add(transcript, 0x1ca0)), mload(add(transcript, 0x1b20)), f_q))mstore(add(transcript, 0x1ce0), addmod(mload(add(transcript, 0x1bc0)), mload(add(transcript, 0x1cc0)), f_q))mstore(add(transcript, 0x1d00), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1ce0)), f_q))mstore(add(transcript, 0x1d20), mulmod(mload(add(transcript, 0x1960)), mload(add(transcript, 0x1900)), f_q))mstore(add(transcript, 0x1d40), mulmod(mload(add(transcript, 0x1b00)), mload(add(transcript, 0x1d20)), f_q))mstore(add(transcript, 0x1d60), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x600)), f_q))mstore(add(transcript, 0x1d80), addmod(mload(add(transcript, 0x1d60)), sub(f_q, mload(add(transcript, 0x660))), f_q))mstore(add(transcript, 0x1da0), mulmod(mload(add(transcript, 0x1d80)), mload(add(transcript, 0x1d40)), f_q))mstore(add(transcript, 0x1dc0), addmod(mload(add(transcript, 0x1d00)), mload(add(transcript, 0x1da0)), f_q))mstore(add(transcript, 0x1de0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1dc0)), f_q))mstore(add(transcript, 0x1e00), addmod(mload(add(transcript, 0x1de0)), mload(add(transcript, 0x1da0)), f_q))mstore(add(transcript, 0x1e20), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1e00)), f_q))mstore(add(transcript, 0x1e40), mulmod(mload(add(transcript, 0x1b00)), mload(add(transcript, 0x1940)), f_q))mstore(add(transcript, 0x1e60), addmod(mload(add(transcript, 0x5e0)), sub(f_q, mload(add(transcript, 0x600))), f_q))mstore(add(transcript, 0x1e80), addmod(mload(add(transcript, 0x1e60)), 5192296858534827628530496329220096, f_q))mstore(add(transcript, 0x1ea0), addmod(mload(add(transcript, 0x1e80)), sub(f_q, mload(add(transcript, 0x660))), f_q))mstore(add(transcript, 0x1ec0), mulmod(mload(add(transcript, 0x1ea0)), mload(add(transcript, 0x1e40)), f_q))mstore(add(transcript, 0x1ee0), addmod(mload(add(transcript, 0x1e20)), mload(add(transcript, 0x1ec0)), f_q))mstore(add(transcript, 0x1f00), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1ee0)), f_q))mstore(add(transcript, 0x1f20), addmod(1, sub(f_q, mload(add(transcript, 0x8c0))), f_q))mstore(add(transcript, 0x1f40), mulmod(mload(add(transcript, 0x1f20)), mload(add(transcript, 0x1220)), f_q))mstore(add(transcript, 0x1f60), addmod(mload(add(transcript, 0x1f00)), mload(add(transcript, 0x1f40)), f_q))mstore(add(transcript, 0x1f80), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1f60)), f_q))mstore(add(transcript, 0x1fa0), mulmod(mload(add(transcript, 0x920)), mload(add(transcript, 0x920)), f_q))mstore(add(transcript, 0x1fc0), addmod(mload(add(transcript, 0x1fa0)), sub(f_q, mload(add(transcript, 0x920))), f_q))mstore(add(transcript, 0x1fe0), mulmod(mload(add(transcript, 0x1fc0)), mload(add(transcript, 0x1160)), f_q))mstore(add(transcript, 0x2000), addmod(mload(add(transcript, 0x1f80)), mload(add(transcript, 0x1fe0)), f_q))mstore(add(transcript, 0x2020), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2000)), f_q))mstore(add(transcript, 0x2040), addmod(mload(add(transcript, 0x920)), sub(f_q, mload(add(transcript, 0x900))), f_q))mstore(add(transcript, 0x2060), mulmod(mload(add(transcript, 0x2040)), mload(add(transcript, 0x1220)), f_q))mstore(add(transcript, 0x2080), addmod(mload(add(transcript, 0x2020)), mload(add(transcript, 0x2060)), f_q))mstore(add(transcript, 0x20a0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2080)), f_q))mstore(add(transcript, 0x20c0), addmod(1, sub(f_q, mload(add(transcript, 0x1160))), f_q))mstore(add(transcript, 0x20e0), addmod(mload(add(transcript, 0x1180)), mload(add(transcript, 0x11a0)), f_q))mstore(add(transcript, 0x2100), addmod(mload(add(transcript, 0x20e0)), mload(add(transcript, 0x11c0)), f_q))mstore(add(transcript, 0x2120), addmod(mload(add(transcript, 0x2100)), mload(add(transcript, 0x11e0)), f_q))mstore(add(transcript, 0x2140), addmod(mload(add(transcript, 0x2120)), mload(add(transcript, 0x1200)), f_q))mstore(add(transcript, 0x2160), addmod(mload(add(transcript, 0x20c0)), sub(f_q, mload(add(transcript, 0x2140))), f_q))mstore(add(transcript, 0x2180), mulmod(mload(add(transcript, 0x800)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x21a0), addmod(mload(add(transcript, 0x6e0)), mload(add(transcript, 0x2180)), f_q))mstore(add(transcript, 0x21c0), addmod(mload(add(transcript, 0x21a0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x21e0), mulmod(mload(add(transcript, 0x820)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2200), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x21e0)), f_q))mstore(add(transcript, 0x2220), addmod(mload(add(transcript, 0x2200)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2240), mulmod(mload(add(transcript, 0x2220)), mload(add(transcript, 0x21c0)), f_q))mstore(add(transcript, 0x2260), mulmod(mload(add(transcript, 0x840)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2280), addmod(mload(add(transcript, 0x600)), mload(add(transcript, 0x2260)), f_q))mstore(add(transcript, 0x22a0), addmod(mload(add(transcript, 0x2280)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x22c0), mulmod(mload(add(transcript, 0x22a0)), mload(add(transcript, 0x2240)), f_q))mstore(add(transcript, 0x22e0), mulmod(mload(add(transcript, 0x860)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2300), addmod(mload(add(transcript, 0x700)), mload(add(transcript, 0x22e0)), f_q))mstore(add(transcript, 0x2320), addmod(mload(add(transcript, 0x2300)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2340), mulmod(mload(add(transcript, 0x2320)), mload(add(transcript, 0x22c0)), f_q))mstore(add(transcript, 0x2360), mulmod(mload(add(transcript, 0x2340)), mload(add(transcript, 0x8e0)), f_q))mstore(add(transcript, 0x2380), mulmod(1, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x23a0), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x2380)), f_q))mstore(add(transcript, 0x23c0), addmod(mload(add(transcript, 0x6e0)), mload(add(transcript, 0x23a0)), f_q))mstore(add(transcript, 0x23e0), addmod(mload(add(transcript, 0x23c0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2400), mulmod(4131629893567559867359510883348571134090853742863529169391034518566172092834, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2420), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x2400)), f_q))mstore(add(transcript, 0x2440), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x2420)), f_q))mstore(add(transcript, 0x2460), addmod(mload(add(transcript, 0x2440)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2480), mulmod(mload(add(transcript, 0x2460)), mload(add(transcript, 0x23e0)), f_q))mstore(add(transcript, 0x24a0), mulmod(8910878055287538404433155982483128285667088683464058436815641868457422632747, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x24c0), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x24a0)), f_q))mstore(add(transcript, 0x24e0), addmod(mload(add(transcript, 0x600)), mload(add(transcript, 0x24c0)), f_q))mstore(add(transcript, 0x2500), addmod(mload(add(transcript, 0x24e0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2520), mulmod(mload(add(transcript, 0x2500)), mload(add(transcript, 0x2480)), f_q))mstore(add(transcript, 0x2540), mulmod(11166246659983828508719468090013646171463329086121580628794302409516816350802, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2560), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x2540)), f_q))mstore(add(transcript, 0x2580), addmod(mload(add(transcript, 0x700)), mload(add(transcript, 0x2560)), f_q))mstore(add(transcript, 0x25a0), addmod(mload(add(transcript, 0x2580)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x25c0), mulmod(mload(add(transcript, 0x25a0)), mload(add(transcript, 0x2520)), f_q))mstore(add(transcript, 0x25e0), mulmod(mload(add(transcript, 0x25c0)), mload(add(transcript, 0x8c0)), f_q))mstore(add(transcript, 0x2600), addmod(mload(add(transcript, 0x2360)), sub(f_q, mload(add(transcript, 0x25e0))), f_q))mstore(add(transcript, 0x2620), mulmod(mload(add(transcript, 0x2600)), mload(add(transcript, 0x2160)), f_q))mstore(add(transcript, 0x2640), addmod(mload(add(transcript, 0x20a0)), mload(add(transcript, 0x2620)), f_q))mstore(add(transcript, 0x2660), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2640)), f_q))mstore(add(transcript, 0x2680), mulmod(mload(add(transcript, 0x880)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x26a0), addmod(mload(add(transcript, 0x660)), mload(add(transcript, 0x2680)), f_q))mstore(add(transcript, 0x26c0), addmod(mload(add(transcript, 0x26a0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x26e0), mulmod(mload(add(transcript, 0x8a0)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2700), addmod(mload(add(transcript, 0x1280)), mload(add(transcript, 0x26e0)), f_q))mstore(add(transcript, 0x2720), addmod(mload(add(transcript, 0x2700)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2740), mulmod(mload(add(transcript, 0x2720)), mload(add(transcript, 0x26c0)), f_q))mstore(add(transcript, 0x2760), mulmod(mload(add(transcript, 0x2740)), mload(add(transcript, 0x940)), f_q))mstore(add(transcript, 0x2780), mulmod(284840088355319032285349970403338060113257071685626700086398481893096618818, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x27a0), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x2780)), f_q))mstore(add(transcript, 0x27c0), addmod(mload(add(transcript, 0x660)), mload(add(transcript, 0x27a0)), f_q))mstore(add(transcript, 0x27e0), addmod(mload(add(transcript, 0x27c0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2800), mulmod(21134065618345176623193549882539580312263652408302468683943992798037078993309, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2820), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x2800)), f_q))mstore(add(transcript, 0x2840), addmod(mload(add(transcript, 0x1280)), mload(add(transcript, 0x2820)), f_q))mstore(add(transcript, 0x2860), addmod(mload(add(transcript, 0x2840)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2880), mulmod(mload(add(transcript, 0x2860)), mload(add(transcript, 0x27e0)), f_q))mstore(add(transcript, 0x28a0), mulmod(mload(add(transcript, 0x2880)), mload(add(transcript, 0x920)), f_q))mstore(add(transcript, 0x28c0), addmod(mload(add(transcript, 0x2760)), sub(f_q, mload(add(transcript, 0x28a0))), f_q))mstore(add(transcript, 0x28e0), mulmod(mload(add(transcript, 0x28c0)), mload(add(transcript, 0x2160)), f_q))mstore(add(transcript, 0x2900), addmod(mload(add(transcript, 0x2660)), mload(add(transcript, 0x28e0)), f_q))mstore(add(transcript, 0x2920), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2900)), f_q))mstore(add(transcript, 0x2940), addmod(1, sub(f_q, mload(add(transcript, 0x960))), f_q))mstore(add(transcript, 0x2960), mulmod(mload(add(transcript, 0x2940)), mload(add(transcript, 0x1220)), f_q))mstore(add(transcript, 0x2980), addmod(mload(add(transcript, 0x2920)), mload(add(transcript, 0x2960)), f_q))mstore(add(transcript, 0x29a0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2980)), f_q))mstore(add(transcript, 0x29c0), mulmod(mload(add(transcript, 0x960)), mload(add(transcript, 0x960)), f_q))mstore(add(transcript, 0x29e0), addmod(mload(add(transcript, 0x29c0)), sub(f_q, mload(add(transcript, 0x960))), f_q))mstore(add(transcript, 0x2a00), mulmod(mload(add(transcript, 0x29e0)), mload(add(transcript, 0x1160)), f_q))mstore(add(transcript, 0x2a20), addmod(mload(add(transcript, 0x29a0)), mload(add(transcript, 0x2a00)), f_q))mstore(add(transcript, 0x2a40), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2a20)), f_q))mstore(add(transcript, 0x2a60), addmod(mload(add(transcript, 0x9a0)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2a80), mulmod(mload(add(transcript, 0x2a60)), mload(add(transcript, 0x980)), f_q))mstore(add(transcript, 0x2aa0), addmod(mload(add(transcript, 0x9e0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2ac0), mulmod(mload(add(transcript, 0x2aa0)), mload(add(transcript, 0x2a80)), f_q))mstore(add(transcript, 0x2ae0), mulmod(256, mload(add(transcript, 0x6c0)), f_q))mstore(add(transcript, 0x2b00), addmod(mload(add(transcript, 0x660)), sub(f_q, mload(add(transcript, 0x2ae0))), f_q))mstore(add(transcript, 0x2b20), mulmod(mload(add(transcript, 0x2b00)), mload(add(transcript, 0x760)), f_q))mstore(add(transcript, 0x2b40), addmod(mload(add(transcript, 0x2b20)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2b60), mulmod(mload(add(transcript, 0x2b40)), mload(add(transcript, 0x960)), f_q))mstore(add(transcript, 0x2b80), addmod(mload(add(transcript, 0x720)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2ba0), mulmod(mload(add(transcript, 0x2b80)), mload(add(transcript, 0x2b60)), f_q))mstore(add(transcript, 0x2bc0), addmod(mload(add(transcript, 0x2ac0)), sub(f_q, mload(add(transcript, 0x2ba0))), f_q))mstore(add(transcript, 0x2be0), mulmod(mload(add(transcript, 0x2bc0)), mload(add(transcript, 0x2160)), f_q))mstore(add(transcript, 0x2c00), addmod(mload(add(transcript, 0x2a40)), mload(add(transcript, 0x2be0)), f_q))mstore(add(transcript, 0x2c20), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2c00)), f_q))mstore(add(transcript, 0x2c40), addmod(mload(add(transcript, 0x9a0)), sub(f_q, mload(add(transcript, 0x9e0))), f_q))mstore(add(transcript, 0x2c60), mulmod(mload(add(transcript, 0x2c40)), mload(add(transcript, 0x1220)), f_q))mstore(add(transcript, 0x2c80), addmod(mload(add(transcript, 0x2c20)), mload(add(transcript, 0x2c60)), f_q))mstore(add(transcript, 0x2ca0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2c80)), f_q))mstore(add(transcript, 0x2cc0), mulmod(mload(add(transcript, 0x2c40)), mload(add(transcript, 0x2160)), f_q))mstore(add(transcript, 0x2ce0), addmod(mload(add(transcript, 0x9a0)), sub(f_q, mload(add(transcript, 0x9c0))), f_q))mstore(add(transcript, 0x2d00), mulmod(mload(add(transcript, 0x2ce0)), mload(add(transcript, 0x2cc0)), f_q))mstore(add(transcript, 0x2d20), addmod(mload(add(transcript, 0x2ca0)), mload(add(transcript, 0x2d00)), f_q))mstore(add(transcript, 0x2d40), mulmod(mload(add(transcript, 0xcc0)), mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0x2d60), mulmod(mload(add(transcript, 0x2d40)), mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0x2d80), mulmod(mload(add(transcript, 0x2d60)), mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0x2da0), mulmod(mload(add(transcript, 0x2d80)), mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0x2dc0), mulmod(1, mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0x2de0), mulmod(1, mload(add(transcript, 0x2d40)), f_q))mstore(add(transcript, 0x2e00), mulmod(1, mload(add(transcript, 0x2d60)), f_q))mstore(add(transcript, 0x2e20), mulmod(1, mload(add(transcript, 0x2d80)), f_q))mstore(add(transcript, 0x2e40), mulmod(mload(add(transcript, 0x2d20)), mload(add(transcript, 0xce0)), f_q))mstore(add(transcript, 0x2e60), mulmod(mload(add(transcript, 0xba0)), mload(add(transcript, 0x5a0)), f_q))mstore(add(transcript, 0x2e80), mulmod(mload(add(transcript, 0x5a0)), 1, f_q))mstore(add(transcript, 0x2ea0), addmod(mload(add(transcript, 0xb20)), sub(f_q, mload(add(transcript, 0x2e80))), f_q))mstore(add(transcript, 0x2ec0), mulmod(mload(add(transcript, 0x5a0)), 4925592601992654644734291590386747644864797672605745962807370354577123815907, f_q))mstore(add(transcript, 0x2ee0), addmod(mload(add(transcript, 0xb20)), sub(f_q, mload(add(transcript, 0x2ec0))), f_q))mstore(add(transcript, 0x2f00), mulmod(mload(add(transcript, 0x5a0)), 9936069627611189518829255670237324269287146421271524553312532036927871056678, f_q))mstore(add(transcript, 0x2f20), addmod(mload(add(transcript, 0xb20)), sub(f_q, mload(add(transcript, 0x2f00))), f_q))mstore(add(transcript, 0x2f40), mulmod(mload(add(transcript, 0x5a0)), 19380560087801265747114831706136320509424814679569278834391540198888293317501, f_q))mstore(add(transcript, 0x2f60), addmod(mload(add(transcript, 0xb20)), sub(f_q, mload(add(transcript, 0x2f40))), f_q)){ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 19470333053884630052643688193991482022807116448657043890197497819686199857828, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 2417909817954645169602717551265793065741247951758990453500706366889608637789, f_q), f_q), result, f_q)mstore(add(transcript, 0x2f80), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 13686227242150003628673578706486473027501243666075718775893288845164412632930, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 10079503758141076467065204586507257535549232608832327988764044976944819876346, f_q), f_q), result, f_q)mstore(add(transcript, 0x2fa0), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 18715936898160381416714524359517348601997944075114713669820885373469568354766, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 15375775075249615866494035504844970190233299190010037655541891534730124992278, f_q), f_q), result, f_q)mstore(add(transcript, 0x2fc0), result) }mstore(add(transcript, 0x2fe0), mulmod(1, mload(add(transcript, 0x2ea0)), f_q))mstore(add(transcript, 0x3000), mulmod(mload(add(transcript, 0x2fe0)), mload(add(transcript, 0x2f60)), f_q))mstore(add(transcript, 0x3020), mulmod(mload(add(transcript, 0x3000)), mload(add(transcript, 0x2ee0)), f_q)){ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0x5a0)), 2507682784038009475131574039120954579123549720846755509306663987687515178117, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0x5a0)), 19380560087801265747114831706136320509424814679569278834391540198888293317500, f_q), f_q), result, f_q)mstore(add(transcript, 0x3040), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0x5a0)), 19380560087801265747114831706136320509424814679569278834391540198888293317500, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0x5a0)), 13127608231681926238307118629157549705911918406946061530612285695988519678593, f_q), f_q), result, f_q)mstore(add(transcript, 0x3060), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 16140595808673403009154643164823336476463527776677864878778453135559733237044, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 5747647063165872213091762580433938612084836623738169464919751051016075258573, f_q), f_q), result, f_q)mstore(add(transcript, 0x3080), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 17015964487361230672162623735654618573844832338054897787312333529290879253714, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 3176732791729641355588945816447819802711920387939493967460175841862547409845, f_q), f_q), result, f_q)mstore(add(transcript, 0x30a0), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 19187508498431587163140984396833674282302409422288044257471288693049179355069, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 17472297497993506786357772047295541913219081564856233764575529621311665103799, f_q), f_q), result, f_q)mstore(add(transcript, 0x30c0), result) }mstore(add(transcript, 0x30e0), mulmod(mload(add(transcript, 0x3000)), mload(add(transcript, 0x2f20)), f_q)){ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0x5a0)), 16962650269846620577512114154870527443683566727810288380890833831998684679711, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0x5a0)), 4925592601992654644734291590386747644864797672605745962807370354577123815906, f_q), f_q), result, f_q)mstore(add(transcript, 0x3100), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0x5a0)), 4925592601992654644734291590386747644864797672605745962807370354577123815906, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0x5a0)), 664623189640884330400307346618971907426870604454565164570654825418724962734, f_q), f_q), result, f_q)mstore(add(transcript, 0x3120), result) }mstore(add(transcript, 0x3140), mulmod(mload(add(transcript, 0x2fe0)), mload(add(transcript, 0x2ee0)), f_q)){ let result := mulmod(mload(add(transcript, 0xb20)), 1, f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q), result, f_q)mstore(add(transcript, 0x3160), result) }{ let prod := mload(add(transcript, 0x2f80)) prod := mulmod(mload(add(transcript, 0x2fa0)), prod, f_q) mstore(add(transcript, 0x3180), prod) prod := mulmod(mload(add(transcript, 0x2fc0)), prod, f_q) mstore(add(transcript, 0x31a0), prod) prod := mulmod(mload(add(transcript, 0x3040)), prod, f_q) mstore(add(transcript, 0x31c0), prod) prod := mulmod(mload(add(transcript, 0x3060)), prod, f_q) mstore(add(transcript, 0x31e0), prod) prod := mulmod(mload(add(transcript, 0x3000)), prod, f_q) mstore(add(transcript, 0x3200), prod) prod := mulmod(mload(add(transcript, 0x3080)), prod, f_q) mstore(add(transcript, 0x3220), prod) prod := mulmod(mload(add(transcript, 0x30a0)), prod, f_q) mstore(add(transcript, 0x3240), prod) prod := mulmod(mload(add(transcript, 0x30c0)), prod, f_q) mstore(add(transcript, 0x3260), prod) prod := mulmod(mload(add(transcript, 0x30e0)), prod, f_q) mstore(add(transcript, 0x3280), prod) prod := mulmod(mload(add(transcript, 0x3100)), prod, f_q) mstore(add(transcript, 0x32a0), prod) prod := mulmod(mload(add(transcript, 0x3120)), prod, f_q) mstore(add(transcript, 0x32c0), prod) prod := mulmod(mload(add(transcript, 0x3140)), prod, f_q) mstore(add(transcript, 0x32e0), prod) prod := mulmod(mload(add(transcript, 0x3160)), prod, f_q) mstore(add(transcript, 0x3300), prod) prod := mulmod(mload(add(transcript, 0x2fe0)), prod, f_q) mstore(add(transcript, 0x3320), prod) }mstore(add(transcript, 0x3360), 32)mstore(add(transcript, 0x3380), 32)mstore(add(transcript, 0x33a0), 32)mstore(add(transcript, 0x33c0), mload(add(transcript, 0x3320)))mstore(add(transcript, 0x33e0), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x3400), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x3360), 0xc0, add(transcript, 0x3340), 0x20), 1), success){ let inv := mload(add(transcript, 0x3340)) let v v := mload(add(transcript, 0x2fe0)) mstore(add(transcript, 0x2fe0), mulmod(mload(add(transcript, 0x3300)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3160)) mstore(add(transcript, 0x3160), mulmod(mload(add(transcript, 0x32e0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3140)) mstore(add(transcript, 0x3140), mulmod(mload(add(transcript, 0x32c0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3120)) mstore(add(transcript, 0x3120), mulmod(mload(add(transcript, 0x32a0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3100)) mstore(add(transcript, 0x3100), mulmod(mload(add(transcript, 0x3280)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x30e0)) mstore(add(transcript, 0x30e0), mulmod(mload(add(transcript, 0x3260)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x30c0)) mstore(add(transcript, 0x30c0), mulmod(mload(add(transcript, 0x3240)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x30a0)) mstore(add(transcript, 0x30a0), mulmod(mload(add(transcript, 0x3220)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3080)) mstore(add(transcript, 0x3080), mulmod(mload(add(transcript, 0x3200)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3000)) mstore(add(transcript, 0x3000), mulmod(mload(add(transcript, 0x31e0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3060)) mstore(add(transcript, 0x3060), mulmod(mload(add(transcript, 0x31c0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3040)) mstore(add(transcript, 0x3040), mulmod(mload(add(transcript, 0x31a0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x2fc0)) mstore(add(transcript, 0x2fc0), mulmod(mload(add(transcript, 0x3180)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x2fa0)) mstore(add(transcript, 0x2fa0), mulmod(mload(add(transcript, 0x2f80)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0x2f80), inv) }{ let result := mload(add(transcript, 0x2f80))result := addmod(mload(add(transcript, 0x2fa0)), result, f_q)result := addmod(mload(add(transcript, 0x2fc0)), result, f_q)mstore(add(transcript, 0x3420), result) }mstore(add(transcript, 0x3440), mulmod(mload(add(transcript, 0x3020)), mload(add(transcript, 0x3000)), f_q)){ let result := mload(add(transcript, 0x3040))result := addmod(mload(add(transcript, 0x3060)), result, f_q)mstore(add(transcript, 0x3460), result) }mstore(add(transcript, 0x3480), mulmod(mload(add(transcript, 0x3020)), mload(add(transcript, 0x30e0)), f_q)){ let result := mload(add(transcript, 0x3080))result := addmod(mload(add(transcript, 0x30a0)), result, f_q)result := addmod(mload(add(transcript, 0x30c0)), result, f_q)mstore(add(transcript, 0x34a0), result) }mstore(add(transcript, 0x34c0), mulmod(mload(add(transcript, 0x3020)), mload(add(transcript, 0x3140)), f_q)){ let result := mload(add(transcript, 0x3100))result := addmod(mload(add(transcript, 0x3120)), result, f_q)mstore(add(transcript, 0x34e0), result) }mstore(add(transcript, 0x3500), mulmod(mload(add(transcript, 0x3020)), mload(add(transcript, 0x2fe0)), f_q)){ let result := mload(add(transcript, 0x3160))mstore(add(transcript, 0x3520), result) }{ let prod := mload(add(transcript, 0x3420)) prod := mulmod(mload(add(transcript, 0x3460)), prod, f_q) mstore(add(transcript, 0x3540), prod) prod := mulmod(mload(add(transcript, 0x34a0)), prod, f_q) mstore(add(transcript, 0x3560), prod) prod := mulmod(mload(add(transcript, 0x34e0)), prod, f_q) mstore(add(transcript, 0x3580), prod) prod := mulmod(mload(add(transcript, 0x3520)), prod, f_q) mstore(add(transcript, 0x35a0), prod) }mstore(add(transcript, 0x35e0), 32)mstore(add(transcript, 0x3600), 32)mstore(add(transcript, 0x3620), 32)mstore(add(transcript, 0x3640), mload(add(transcript, 0x35a0)))mstore(add(transcript, 0x3660), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x3680), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x35e0), 0xc0, add(transcript, 0x35c0), 0x20), 1), success){ let inv := mload(add(transcript, 0x35c0)) let v v := mload(add(transcript, 0x3520)) mstore(add(transcript, 0x3520), mulmod(mload(add(transcript, 0x3580)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x34e0)) mstore(add(transcript, 0x34e0), mulmod(mload(add(transcript, 0x3560)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x34a0)) mstore(add(transcript, 0x34a0), mulmod(mload(add(transcript, 0x3540)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3460)) mstore(add(transcript, 0x3460), mulmod(mload(add(transcript, 0x3420)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0x3420), inv) }mstore(add(transcript, 0x36a0), mulmod(mload(add(transcript, 0x3440)), mload(add(transcript, 0x3460)), f_q))mstore(add(transcript, 0x36c0), mulmod(mload(add(transcript, 0x3480)), mload(add(transcript, 0x34a0)), f_q))mstore(add(transcript, 0x36e0), mulmod(mload(add(transcript, 0x34c0)), mload(add(transcript, 0x34e0)), f_q))mstore(add(transcript, 0x3700), mulmod(mload(add(transcript, 0x3500)), mload(add(transcript, 0x3520)), f_q))mstore(add(transcript, 0x3720), mulmod(mload(add(transcript, 0xa20)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3740), mulmod(mload(add(transcript, 0x3720)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3760), mulmod(mload(add(transcript, 0x3740)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3780), mulmod(mload(add(transcript, 0x3760)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x37a0), mulmod(mload(add(transcript, 0x3780)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x37c0), mulmod(mload(add(transcript, 0x37a0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x37e0), mulmod(mload(add(transcript, 0x37c0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3800), mulmod(mload(add(transcript, 0x37e0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3820), mulmod(mload(add(transcript, 0x3800)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3840), mulmod(mload(add(transcript, 0x3820)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3860), mulmod(mload(add(transcript, 0x3840)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3880), mulmod(mload(add(transcript, 0x3860)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x38a0), mulmod(mload(add(transcript, 0x3880)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x38c0), mulmod(mload(add(transcript, 0x38a0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x38e0), mulmod(mload(add(transcript, 0x38c0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3900), mulmod(mload(add(transcript, 0x38e0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3920), mulmod(mload(add(transcript, 0xa80)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3940), mulmod(mload(add(transcript, 0x3920)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3960), mulmod(mload(add(transcript, 0x3940)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3980), mulmod(mload(add(transcript, 0x3960)), mload(add(transcript, 0xa80)), f_q)){ let result := mulmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x2f80)), f_q)result := addmod(mulmod(mload(add(transcript, 0x620)), mload(add(transcript, 0x2fa0)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x6a0)), mload(add(transcript, 0x2fc0)), f_q), result, f_q)mstore(add(transcript, 0x39a0), result) }mstore(add(transcript, 0x39c0), mulmod(mload(add(transcript, 0x39a0)), mload(add(transcript, 0x3420)), f_q))mstore(add(transcript, 0x39e0), mulmod(sub(f_q, mload(add(transcript, 0x39c0))), 1, f_q)){ let result := mulmod(mload(add(transcript, 0x600)), mload(add(transcript, 0x2f80)), f_q)result := addmod(mulmod(mload(add(transcript, 0x640)), mload(add(transcript, 0x2fa0)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x680)), mload(add(transcript, 0x2fc0)), f_q), result, f_q)mstore(add(transcript, 0x3a00), result) }mstore(add(transcript, 0x3a20), mulmod(mload(add(transcript, 0x3a00)), mload(add(transcript, 0x3420)), f_q))mstore(add(transcript, 0x3a40), mulmod(sub(f_q, mload(add(transcript, 0x3a20))), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3a60), mulmod(1, mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3a80), addmod(mload(add(transcript, 0x39e0)), mload(add(transcript, 0x3a40)), f_q))mstore(add(transcript, 0x3aa0), mulmod(mload(add(transcript, 0x3a80)), 1, f_q))mstore(add(transcript, 0x3ac0), mulmod(mload(add(transcript, 0x3a60)), 1, f_q))mstore(add(transcript, 0x3ae0), mulmod(1, mload(add(transcript, 0x3440)), f_q)){ let result := mulmod(mload(add(transcript, 0x660)), mload(add(transcript, 0x3040)), f_q)result := addmod(mulmod(mload(add(transcript, 0x6c0)), mload(add(transcript, 0x3060)), f_q), result, f_q)mstore(add(transcript, 0x3b00), result) }mstore(add(transcript, 0x3b20), mulmod(mload(add(transcript, 0x3b00)), mload(add(transcript, 0x36a0)), f_q))mstore(add(transcript, 0x3b40), mulmod(sub(f_q, mload(add(transcript, 0x3b20))), 1, f_q))mstore(add(transcript, 0x3b60), mulmod(mload(add(transcript, 0x3ae0)), 1, f_q)){ let result := mulmod(mload(add(transcript, 0x920)), mload(add(transcript, 0x3040)), f_q)result := addmod(mulmod(mload(add(transcript, 0x940)), mload(add(transcript, 0x3060)), f_q), result, f_q)mstore(add(transcript, 0x3b80), result) }mstore(add(transcript, 0x3ba0), mulmod(mload(add(transcript, 0x3b80)), mload(add(transcript, 0x36a0)), f_q))mstore(add(transcript, 0x3bc0), mulmod(sub(f_q, mload(add(transcript, 0x3ba0))), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3be0), mulmod(mload(add(transcript, 0x3ae0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3c00), addmod(mload(add(transcript, 0x3b40)), mload(add(transcript, 0x3bc0)), f_q)){ let result := mulmod(mload(add(transcript, 0x960)), mload(add(transcript, 0x3040)), f_q)result := addmod(mulmod(mload(add(transcript, 0x980)), mload(add(transcript, 0x3060)), f_q), result, f_q)mstore(add(transcript, 0x3c20), result) }mstore(add(transcript, 0x3c40), mulmod(mload(add(transcript, 0x3c20)), mload(add(transcript, 0x36a0)), f_q))mstore(add(transcript, 0x3c60), mulmod(sub(f_q, mload(add(transcript, 0x3c40))), mload(add(transcript, 0x3720)), f_q))mstore(add(transcript, 0x3c80), mulmod(mload(add(transcript, 0x3ae0)), mload(add(transcript, 0x3720)), f_q))mstore(add(transcript, 0x3ca0), addmod(mload(add(transcript, 0x3c00)), mload(add(transcript, 0x3c60)), f_q))mstore(add(transcript, 0x3cc0), mulmod(mload(add(transcript, 0x3ca0)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3ce0), mulmod(mload(add(transcript, 0x3b60)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3d00), mulmod(mload(add(transcript, 0x3be0)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3d20), mulmod(mload(add(transcript, 0x3c80)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3d40), addmod(mload(add(transcript, 0x3aa0)), mload(add(transcript, 0x3cc0)), f_q))mstore(add(transcript, 0x3d60), mulmod(1, mload(add(transcript, 0x3480)), f_q)){ let result := mulmod(mload(add(transcript, 0x8c0)), mload(add(transcript, 0x3080)), f_q)result := addmod(mulmod(mload(add(transcript, 0x8e0)), mload(add(transcript, 0x30a0)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x900)), mload(add(transcript, 0x30c0)), f_q), result, f_q)mstore(add(transcript, 0x3d80), result) }mstore(add(transcript, 0x3da0), mulmod(mload(add(transcript, 0x3d80)), mload(add(transcript, 0x36c0)), f_q))mstore(add(transcript, 0x3dc0), mulmod(sub(f_q, mload(add(transcript, 0x3da0))), 1, f_q))mstore(add(transcript, 0x3de0), mulmod(mload(add(transcript, 0x3d60)), 1, f_q))mstore(add(transcript, 0x3e00), mulmod(mload(add(transcript, 0x3dc0)), mload(add(transcript, 0x3920)), f_q))mstore(add(transcript, 0x3e20), mulmod(mload(add(transcript, 0x3de0)), mload(add(transcript, 0x3920)), f_q))mstore(add(transcript, 0x3e40), addmod(mload(add(transcript, 0x3d40)), mload(add(transcript, 0x3e00)), f_q))mstore(add(transcript, 0x3e60), mulmod(1, mload(add(transcript, 0x34c0)), f_q)){ let result := mulmod(mload(add(transcript, 0x9a0)), mload(add(transcript, 0x3100)), f_q)result := addmod(mulmod(mload(add(transcript, 0x9c0)), mload(add(transcript, 0x3120)), f_q), result, f_q)mstore(add(transcript, 0x3e80), result) }mstore(add(transcript, 0x3ea0), mulmod(mload(add(transcript, 0x3e80)), mload(add(transcript, 0x36e0)), f_q))mstore(add(transcript, 0x3ec0), mulmod(sub(f_q, mload(add(transcript, 0x3ea0))), 1, f_q))mstore(add(transcript, 0x3ee0), mulmod(mload(add(transcript, 0x3e60)), 1, f_q))mstore(add(transcript, 0x3f00), mulmod(mload(add(transcript, 0x3ec0)), mload(add(transcript, 0x3940)), f_q))mstore(add(transcript, 0x3f20), mulmod(mload(add(transcript, 0x3ee0)), mload(add(transcript, 0x3940)), f_q))mstore(add(transcript, 0x3f40), addmod(mload(add(transcript, 0x3e40)), mload(add(transcript, 0x3f00)), f_q))mstore(add(transcript, 0x3f60), mulmod(1, mload(add(transcript, 0x3500)), f_q)){ let result := mulmod(mload(add(transcript, 0x9e0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x3f80), result) }mstore(add(transcript, 0x3fa0), mulmod(mload(add(transcript, 0x3f80)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x3fc0), mulmod(sub(f_q, mload(add(transcript, 0x3fa0))), 1, f_q))mstore(add(transcript, 0x3fe0), mulmod(mload(add(transcript, 0x3f60)), 1, f_q)){ let result := mulmod(mload(add(transcript, 0x6e0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4000), result) }mstore(add(transcript, 0x4020), mulmod(mload(add(transcript, 0x4000)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4040), mulmod(sub(f_q, mload(add(transcript, 0x4020))), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x4060), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x4080), addmod(mload(add(transcript, 0x3fc0)), mload(add(transcript, 0x4040)), f_q)){ let result := mulmod(mload(add(transcript, 0x700)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x40a0), result) }mstore(add(transcript, 0x40c0), mulmod(mload(add(transcript, 0x40a0)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x40e0), mulmod(sub(f_q, mload(add(transcript, 0x40c0))), mload(add(transcript, 0x3720)), f_q))mstore(add(transcript, 0x4100), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3720)), f_q))mstore(add(transcript, 0x4120), addmod(mload(add(transcript, 0x4080)), mload(add(transcript, 0x40e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x720)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4140), result) }mstore(add(transcript, 0x4160), mulmod(mload(add(transcript, 0x4140)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4180), mulmod(sub(f_q, mload(add(transcript, 0x4160))), mload(add(transcript, 0x3740)), f_q))mstore(add(transcript, 0x41a0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3740)), f_q))mstore(add(transcript, 0x41c0), addmod(mload(add(transcript, 0x4120)), mload(add(transcript, 0x4180)), f_q)){ let result := mulmod(mload(add(transcript, 0x740)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x41e0), result) }mstore(add(transcript, 0x4200), mulmod(mload(add(transcript, 0x41e0)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4220), mulmod(sub(f_q, mload(add(transcript, 0x4200))), mload(add(transcript, 0x3760)), f_q))mstore(add(transcript, 0x4240), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3760)), f_q))mstore(add(transcript, 0x4260), addmod(mload(add(transcript, 0x41c0)), mload(add(transcript, 0x4220)), f_q)){ let result := mulmod(mload(add(transcript, 0x760)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4280), result) }mstore(add(transcript, 0x42a0), mulmod(mload(add(transcript, 0x4280)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x42c0), mulmod(sub(f_q, mload(add(transcript, 0x42a0))), mload(add(transcript, 0x3780)), f_q))mstore(add(transcript, 0x42e0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3780)), f_q))mstore(add(transcript, 0x4300), addmod(mload(add(transcript, 0x4260)), mload(add(transcript, 0x42c0)), f_q)){ let result := mulmod(mload(add(transcript, 0x780)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4320), result) }mstore(add(transcript, 0x4340), mulmod(mload(add(transcript, 0x4320)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4360), mulmod(sub(f_q, mload(add(transcript, 0x4340))), mload(add(transcript, 0x37a0)), f_q))mstore(add(transcript, 0x4380), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x37a0)), f_q))mstore(add(transcript, 0x43a0), addmod(mload(add(transcript, 0x4300)), mload(add(transcript, 0x4360)), f_q)){ let result := mulmod(mload(add(transcript, 0x7a0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x43c0), result) }mstore(add(transcript, 0x43e0), mulmod(mload(add(transcript, 0x43c0)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4400), mulmod(sub(f_q, mload(add(transcript, 0x43e0))), mload(add(transcript, 0x37c0)), f_q))mstore(add(transcript, 0x4420), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x37c0)), f_q))mstore(add(transcript, 0x4440), addmod(mload(add(transcript, 0x43a0)), mload(add(transcript, 0x4400)), f_q)){ let result := mulmod(mload(add(transcript, 0x7c0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4460), result) }mstore(add(transcript, 0x4480), mulmod(mload(add(transcript, 0x4460)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x44a0), mulmod(sub(f_q, mload(add(transcript, 0x4480))), mload(add(transcript, 0x37e0)), f_q))mstore(add(transcript, 0x44c0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x37e0)), f_q))mstore(add(transcript, 0x44e0), addmod(mload(add(transcript, 0x4440)), mload(add(transcript, 0x44a0)), f_q)){ let result := mulmod(mload(add(transcript, 0x800)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4500), result) }mstore(add(transcript, 0x4520), mulmod(mload(add(transcript, 0x4500)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4540), mulmod(sub(f_q, mload(add(transcript, 0x4520))), mload(add(transcript, 0x3800)), f_q))mstore(add(transcript, 0x4560), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3800)), f_q))mstore(add(transcript, 0x4580), addmod(mload(add(transcript, 0x44e0)), mload(add(transcript, 0x4540)), f_q)){ let result := mulmod(mload(add(transcript, 0x820)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x45a0), result) }mstore(add(transcript, 0x45c0), mulmod(mload(add(transcript, 0x45a0)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x45e0), mulmod(sub(f_q, mload(add(transcript, 0x45c0))), mload(add(transcript, 0x3820)), f_q))mstore(add(transcript, 0x4600), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3820)), f_q))mstore(add(transcript, 0x4620), addmod(mload(add(transcript, 0x4580)), mload(add(transcript, 0x45e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x840)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4640), result) }mstore(add(transcript, 0x4660), mulmod(mload(add(transcript, 0x4640)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4680), mulmod(sub(f_q, mload(add(transcript, 0x4660))), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x46a0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x46c0), addmod(mload(add(transcript, 0x4620)), mload(add(transcript, 0x4680)), f_q)){ let result := mulmod(mload(add(transcript, 0x860)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x46e0), result) }mstore(add(transcript, 0x4700), mulmod(mload(add(transcript, 0x46e0)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4720), mulmod(sub(f_q, mload(add(transcript, 0x4700))), mload(add(transcript, 0x3860)), f_q))mstore(add(transcript, 0x4740), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3860)), f_q))mstore(add(transcript, 0x4760), addmod(mload(add(transcript, 0x46c0)), mload(add(transcript, 0x4720)), f_q)){ let result := mulmod(mload(add(transcript, 0x880)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4780), result) }mstore(add(transcript, 0x47a0), mulmod(mload(add(transcript, 0x4780)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x47c0), mulmod(sub(f_q, mload(add(transcript, 0x47a0))), mload(add(transcript, 0x3880)), f_q))mstore(add(transcript, 0x47e0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3880)), f_q))mstore(add(transcript, 0x4800), addmod(mload(add(transcript, 0x4760)), mload(add(transcript, 0x47c0)), f_q)){ let result := mulmod(mload(add(transcript, 0x8a0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4820), result) }mstore(add(transcript, 0x4840), mulmod(mload(add(transcript, 0x4820)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4860), mulmod(sub(f_q, mload(add(transcript, 0x4840))), mload(add(transcript, 0x38a0)), f_q))mstore(add(transcript, 0x4880), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x38a0)), f_q))mstore(add(transcript, 0x48a0), addmod(mload(add(transcript, 0x4800)), mload(add(transcript, 0x4860)), f_q))mstore(add(transcript, 0x48c0), mulmod(mload(add(transcript, 0x2dc0)), mload(add(transcript, 0x3500)), f_q))mstore(add(transcript, 0x48e0), mulmod(mload(add(transcript, 0x2de0)), mload(add(transcript, 0x3500)), f_q))mstore(add(transcript, 0x4900), mulmod(mload(add(transcript, 0x2e00)), mload(add(transcript, 0x3500)), f_q))mstore(add(transcript, 0x4920), mulmod(mload(add(transcript, 0x2e20)), mload(add(transcript, 0x3500)), f_q)){ let result := mulmod(mload(add(transcript, 0x2e40)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4940), result) }mstore(add(transcript, 0x4960), mulmod(mload(add(transcript, 0x4940)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4980), mulmod(sub(f_q, mload(add(transcript, 0x4960))), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x49a0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x49c0), mulmod(mload(add(transcript, 0x48c0)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x49e0), mulmod(mload(add(transcript, 0x48e0)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x4a00), mulmod(mload(add(transcript, 0x4900)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x4a20), mulmod(mload(add(transcript, 0x4920)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x4a40), addmod(mload(add(transcript, 0x48a0)), mload(add(transcript, 0x4980)), f_q)){ let result := mulmod(mload(add(transcript, 0x7e0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4a60), result) }mstore(add(transcript, 0x4a80), mulmod(mload(add(transcript, 0x4a60)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4aa0), mulmod(sub(f_q, mload(add(transcript, 0x4a80))), mload(add(transcript, 0x38e0)), f_q))mstore(add(transcript, 0x4ac0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x38e0)), f_q))mstore(add(transcript, 0x4ae0), addmod(mload(add(transcript, 0x4a40)), mload(add(transcript, 0x4aa0)), f_q))mstore(add(transcript, 0x4b00), mulmod(mload(add(transcript, 0x4ae0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4b20), mulmod(mload(add(transcript, 0x3fe0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4b40), mulmod(mload(add(transcript, 0x4060)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4b60), mulmod(mload(add(transcript, 0x4100)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4b80), mulmod(mload(add(transcript, 0x41a0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4ba0), mulmod(mload(add(transcript, 0x4240)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4bc0), mulmod(mload(add(transcript, 0x42e0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4be0), mulmod(mload(add(transcript, 0x4380)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4c00), mulmod(mload(add(transcript, 0x4420)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4c20), mulmod(mload(add(transcript, 0x44c0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4c40), mulmod(mload(add(transcript, 0x4560)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4c60), mulmod(mload(add(transcript, 0x4600)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4c80), mulmod(mload(add(transcript, 0x46a0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4ca0), mulmod(mload(add(transcript, 0x4740)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4cc0), mulmod(mload(add(transcript, 0x47e0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4ce0), mulmod(mload(add(transcript, 0x4880)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4d00), mulmod(mload(add(transcript, 0x49a0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4d20), mulmod(mload(add(transcript, 0x49c0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4d40), mulmod(mload(add(transcript, 0x49e0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4d60), mulmod(mload(add(transcript, 0x4a00)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4d80), mulmod(mload(add(transcript, 0x4a20)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4da0), mulmod(mload(add(transcript, 0x4ac0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4dc0), addmod(mload(add(transcript, 0x3f40)), mload(add(transcript, 0x4b00)), f_q))mstore(add(transcript, 0x4de0), mulmod(1, mload(add(transcript, 0x3020)), f_q))mstore(add(transcript, 0x4e00), mulmod(1, mload(add(transcript, 0xb20)), f_q))mstore(add(transcript, 0x4e20), 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(add(transcript, 0x4e40), 0x0000000000000000000000000000000000000000000000000000000000000002)mstore(add(transcript, 0x4e60), mload(add(transcript, 0x4dc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x4e20), 0x60, add(transcript, 0x4e20), 0x40), 1), success)mstore(add(transcript, 0x4e80), mload(add(transcript, 0x4e20))) mstore(add(transcript, 0x4ea0), mload(add(transcript, 0x4e40)))mstore(add(transcript, 0x4ec0), mload(add(transcript, 0x80))) mstore(add(transcript, 0x4ee0), mload(add(transcript, 0xa0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x4e80), 0x80, add(transcript, 0x4e80), 0x40), 1), success)mstore(add(transcript, 0x4f00), mload(add(transcript, 0xc0))) mstore(add(transcript, 0x4f20), mload(add(transcript, 0xe0)))mstore(add(transcript, 0x4f40), mload(add(transcript, 0x3ac0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x4f00), 0x60, add(transcript, 0x4f00), 0x40), 1), success)mstore(add(transcript, 0x4f60), mload(add(transcript, 0x4e80))) mstore(add(transcript, 0x4f80), mload(add(transcript, 0x4ea0)))mstore(add(transcript, 0x4fa0), mload(add(transcript, 0x4f00))) mstore(add(transcript, 0x4fc0), mload(add(transcript, 0x4f20)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x4f60), 0x80, add(transcript, 0x4f60), 0x40), 1), success)mstore(add(transcript, 0x4fe0), mload(add(transcript, 0x100))) mstore(add(transcript, 0x5000), mload(add(transcript, 0x120)))mstore(add(transcript, 0x5020), mload(add(transcript, 0x3ce0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x4fe0), 0x60, add(transcript, 0x4fe0), 0x40), 1), success)mstore(add(transcript, 0x5040), mload(add(transcript, 0x4f60))) mstore(add(transcript, 0x5060), mload(add(transcript, 0x4f80)))mstore(add(transcript, 0x5080), mload(add(transcript, 0x4fe0))) mstore(add(transcript, 0x50a0), mload(add(transcript, 0x5000)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5040), 0x80, add(transcript, 0x5040), 0x40), 1), success)mstore(add(transcript, 0x50c0), mload(add(transcript, 0x320))) mstore(add(transcript, 0x50e0), mload(add(transcript, 0x340)))mstore(add(transcript, 0x5100), mload(add(transcript, 0x3d00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x50c0), 0x60, add(transcript, 0x50c0), 0x40), 1), success)mstore(add(transcript, 0x5120), mload(add(transcript, 0x5040))) mstore(add(transcript, 0x5140), mload(add(transcript, 0x5060)))mstore(add(transcript, 0x5160), mload(add(transcript, 0x50c0))) mstore(add(transcript, 0x5180), mload(add(transcript, 0x50e0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5120), 0x80, add(transcript, 0x5120), 0x40), 1), success)mstore(add(transcript, 0x51a0), mload(add(transcript, 0x360))) mstore(add(transcript, 0x51c0), mload(add(transcript, 0x380)))mstore(add(transcript, 0x51e0), mload(add(transcript, 0x3d20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x51a0), 0x60, add(transcript, 0x51a0), 0x40), 1), success)mstore(add(transcript, 0x5200), mload(add(transcript, 0x5120))) mstore(add(transcript, 0x5220), mload(add(transcript, 0x5140)))mstore(add(transcript, 0x5240), mload(add(transcript, 0x51a0))) mstore(add(transcript, 0x5260), mload(add(transcript, 0x51c0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5200), 0x80, add(transcript, 0x5200), 0x40), 1), success)mstore(add(transcript, 0x5280), mload(add(transcript, 0x2e0))) mstore(add(transcript, 0x52a0), mload(add(transcript, 0x300)))mstore(add(transcript, 0x52c0), mload(add(transcript, 0x3e20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5280), 0x60, add(transcript, 0x5280), 0x40), 1), success)mstore(add(transcript, 0x52e0), mload(add(transcript, 0x5200))) mstore(add(transcript, 0x5300), mload(add(transcript, 0x5220)))mstore(add(transcript, 0x5320), mload(add(transcript, 0x5280))) mstore(add(transcript, 0x5340), mload(add(transcript, 0x52a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x52e0), 0x80, add(transcript, 0x52e0), 0x40), 1), success)mstore(add(transcript, 0x5360), mload(add(transcript, 0x1a0))) mstore(add(transcript, 0x5380), mload(add(transcript, 0x1c0)))mstore(add(transcript, 0x53a0), mload(add(transcript, 0x3f20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5360), 0x60, add(transcript, 0x5360), 0x40), 1), success)mstore(add(transcript, 0x53c0), mload(add(transcript, 0x52e0))) mstore(add(transcript, 0x53e0), mload(add(transcript, 0x5300)))mstore(add(transcript, 0x5400), mload(add(transcript, 0x5360))) mstore(add(transcript, 0x5420), mload(add(transcript, 0x5380)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x53c0), 0x80, add(transcript, 0x53c0), 0x40), 1), success)mstore(add(transcript, 0x5440), mload(add(transcript, 0x1e0))) mstore(add(transcript, 0x5460), mload(add(transcript, 0x200)))mstore(add(transcript, 0x5480), mload(add(transcript, 0x4b20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5440), 0x60, add(transcript, 0x5440), 0x40), 1), success)mstore(add(transcript, 0x54a0), mload(add(transcript, 0x53c0))) mstore(add(transcript, 0x54c0), mload(add(transcript, 0x53e0)))mstore(add(transcript, 0x54e0), mload(add(transcript, 0x5440))) mstore(add(transcript, 0x5500), mload(add(transcript, 0x5460)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x54a0), 0x80, add(transcript, 0x54a0), 0x40), 1), success)mstore(add(transcript, 0x5520), 0x07da112d9d1619e15dc5963b63e21f1b5690a96ec64a50b61e71526223987516) mstore(add(transcript, 0x5540), 0x1bd864cde2c40ad753c9196372d23b4f5e3d0056bac48fe99c665f98ba6b82bf)mstore(add(transcript, 0x5560), mload(add(transcript, 0x4b40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5520), 0x60, add(transcript, 0x5520), 0x40), 1), success)mstore(add(transcript, 0x5580), mload(add(transcript, 0x54a0))) mstore(add(transcript, 0x55a0), mload(add(transcript, 0x54c0)))mstore(add(transcript, 0x55c0), mload(add(transcript, 0x5520))) mstore(add(transcript, 0x55e0), mload(add(transcript, 0x5540)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5580), 0x80, add(transcript, 0x5580), 0x40), 1), success)mstore(add(transcript, 0x5600), 0x18ade563194fd8e50151f082c39e7130b67343136a7f5692fbd36d1dff7c3cbb) mstore(add(transcript, 0x5620), 0x2e43b8cec89aabd908d49017ae7779040a4f58e18473710e468b30c267f32031)mstore(add(transcript, 0x5640), mload(add(transcript, 0x4b60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5600), 0x60, add(transcript, 0x5600), 0x40), 1), success)mstore(add(transcript, 0x5660), mload(add(transcript, 0x5580))) mstore(add(transcript, 0x5680), mload(add(transcript, 0x55a0)))mstore(add(transcript, 0x56a0), mload(add(transcript, 0x5600))) mstore(add(transcript, 0x56c0), mload(add(transcript, 0x5620)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5660), 0x80, add(transcript, 0x5660), 0x40), 1), success)mstore(add(transcript, 0x56e0), 0x279bb1b1a84827f08b5a6b1afe82453d687fb716da1a5670e7ea1725330f298f) mstore(add(transcript, 0x5700), 0x1fb3ef44499d47fa6fe79760d3295b2492983695632cc805d7a1f2ffcc814d0c)mstore(add(transcript, 0x5720), mload(add(transcript, 0x4b80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x56e0), 0x60, add(transcript, 0x56e0), 0x40), 1), success)mstore(add(transcript, 0x5740), mload(add(transcript, 0x5660))) mstore(add(transcript, 0x5760), mload(add(transcript, 0x5680)))mstore(add(transcript, 0x5780), mload(add(transcript, 0x56e0))) mstore(add(transcript, 0x57a0), mload(add(transcript, 0x5700)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5740), 0x80, add(transcript, 0x5740), 0x40), 1), success)mstore(add(transcript, 0x57c0), 0x1327a71d31491e1437b1994899267b11c3abbad0340b47fe256d4f91fef92fee) mstore(add(transcript, 0x57e0), 0x1440ebb88ec12e71b3dcf84ac66229ddca0d2d6570cf1ffb7927c2ebc09f8d8e)mstore(add(transcript, 0x5800), mload(add(transcript, 0x4ba0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x57c0), 0x60, add(transcript, 0x57c0), 0x40), 1), success)mstore(add(transcript, 0x5820), mload(add(transcript, 0x5740))) mstore(add(transcript, 0x5840), mload(add(transcript, 0x5760)))mstore(add(transcript, 0x5860), mload(add(transcript, 0x57c0))) mstore(add(transcript, 0x5880), mload(add(transcript, 0x57e0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5820), 0x80, add(transcript, 0x5820), 0x40), 1), success)mstore(add(transcript, 0x58a0), 0x1825601cf3db8549d6b0c0ba6ce4bb7661f81fc7de4fbb3b4a8293ff0938c8e5) mstore(add(transcript, 0x58c0), 0x1a03983f233b00c3a96ae5552c74957f9285b641a9502397fc10ef067e639970)mstore(add(transcript, 0x58e0), mload(add(transcript, 0x4bc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x58a0), 0x60, add(transcript, 0x58a0), 0x40), 1), success)mstore(add(transcript, 0x5900), mload(add(transcript, 0x5820))) mstore(add(transcript, 0x5920), mload(add(transcript, 0x5840)))mstore(add(transcript, 0x5940), mload(add(transcript, 0x58a0))) mstore(add(transcript, 0x5960), mload(add(transcript, 0x58c0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5900), 0x80, add(transcript, 0x5900), 0x40), 1), success)mstore(add(transcript, 0x5980), 0x11d03b31084d49e49e40902891439047cc277aa97e8b2e3a3c5b2e80dac5c364) mstore(add(transcript, 0x59a0), 0x151e9540ac7dd9f60a5033876ad0183c4af24f7d12cd8ebe98e71513939a8cc0)mstore(add(transcript, 0x59c0), mload(add(transcript, 0x4be0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5980), 0x60, add(transcript, 0x5980), 0x40), 1), success)mstore(add(transcript, 0x59e0), mload(add(transcript, 0x5900))) mstore(add(transcript, 0x5a00), mload(add(transcript, 0x5920)))mstore(add(transcript, 0x5a20), mload(add(transcript, 0x5980))) mstore(add(transcript, 0x5a40), mload(add(transcript, 0x59a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x59e0), 0x80, add(transcript, 0x59e0), 0x40), 1), success)mstore(add(transcript, 0x5a60), 0x23d01f8bb44c10b4dd7962ca558169300c7535dc2321c483251841b9dd533c0f) mstore(add(transcript, 0x5a80), 0x1599ae56c0c8434fbfc5eec62917dfa3f0a9e2dbe7c77409ec0f3a004b14cf99)mstore(add(transcript, 0x5aa0), mload(add(transcript, 0x4c00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5a60), 0x60, add(transcript, 0x5a60), 0x40), 1), success)mstore(add(transcript, 0x5ac0), mload(add(transcript, 0x59e0))) mstore(add(transcript, 0x5ae0), mload(add(transcript, 0x5a00)))mstore(add(transcript, 0x5b00), mload(add(transcript, 0x5a60))) mstore(add(transcript, 0x5b20), mload(add(transcript, 0x5a80)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5ac0), 0x80, add(transcript, 0x5ac0), 0x40), 1), success)mstore(add(transcript, 0x5b40), 0x2876b4cb304a71b1eb97c0a33fad6c2567a18f4333d282878103a8a52f9a44dd) mstore(add(transcript, 0x5b60), 0x1cf03a9e7d9f1689bad060e3c93dd13d434e6fc7534b662ba0030f864c9ef982)mstore(add(transcript, 0x5b80), mload(add(transcript, 0x4c20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5b40), 0x60, add(transcript, 0x5b40), 0x40), 1), success)mstore(add(transcript, 0x5ba0), mload(add(transcript, 0x5ac0))) mstore(add(transcript, 0x5bc0), mload(add(transcript, 0x5ae0)))mstore(add(transcript, 0x5be0), mload(add(transcript, 0x5b40))) mstore(add(transcript, 0x5c00), mload(add(transcript, 0x5b60)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5ba0), 0x80, add(transcript, 0x5ba0), 0x40), 1), success)mstore(add(transcript, 0x5c20), 0x09d6b1ef89008418dc31e48ddc1123f06623183c2ca3be3f87c61c4cd416cb07) mstore(add(transcript, 0x5c40), 0x19a196c98c173b7d399c14be13eaa0e3ebf3afdc80b6bb5431a396b7860f8876)mstore(add(transcript, 0x5c60), mload(add(transcript, 0x4c40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5c20), 0x60, add(transcript, 0x5c20), 0x40), 1), success)mstore(add(transcript, 0x5c80), mload(add(transcript, 0x5ba0))) mstore(add(transcript, 0x5ca0), mload(add(transcript, 0x5bc0)))mstore(add(transcript, 0x5cc0), mload(add(transcript, 0x5c20))) mstore(add(transcript, 0x5ce0), mload(add(transcript, 0x5c40)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5c80), 0x80, add(transcript, 0x5c80), 0x40), 1), success)mstore(add(transcript, 0x5d00), 0x0c353a2d3fb9de5a63ae20c29d28031efeaf502224c752372f07969d272ea88b) mstore(add(transcript, 0x5d20), 0x2a66e2b2fc4c41f54f231c0536a3f249d7bac03ab25773c01799f38a9ec2fd2c)mstore(add(transcript, 0x5d40), mload(add(transcript, 0x4c60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5d00), 0x60, add(transcript, 0x5d00), 0x40), 1), success)mstore(add(transcript, 0x5d60), mload(add(transcript, 0x5c80))) mstore(add(transcript, 0x5d80), mload(add(transcript, 0x5ca0)))mstore(add(transcript, 0x5da0), mload(add(transcript, 0x5d00))) mstore(add(transcript, 0x5dc0), mload(add(transcript, 0x5d20)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5d60), 0x80, add(transcript, 0x5d60), 0x40), 1), success)mstore(add(transcript, 0x5de0), 0x09fb582fffb06e472ce594ff04530c9f33d70312b9b8e54ebc70097d415d6b82) mstore(add(transcript, 0x5e00), 0x1045a2adc4faf395b26431d86bdf7604651e06f97cbae9ed8e00676147fe9f83)mstore(add(transcript, 0x5e20), mload(add(transcript, 0x4c80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5de0), 0x60, add(transcript, 0x5de0), 0x40), 1), success)mstore(add(transcript, 0x5e40), mload(add(transcript, 0x5d60))) mstore(add(transcript, 0x5e60), mload(add(transcript, 0x5d80)))mstore(add(transcript, 0x5e80), mload(add(transcript, 0x5de0))) mstore(add(transcript, 0x5ea0), mload(add(transcript, 0x5e00)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5e40), 0x80, add(transcript, 0x5e40), 0x40), 1), success)mstore(add(transcript, 0x5ec0), 0x304c7a0ed7b07d72da0bfd0a63908355b825669b5a62b99b775ee19f940b9114) mstore(add(transcript, 0x5ee0), 0x02fcb2e6131131677facbbc28b73ee6c4571a1d49034a85f72719cd11f922d0b)mstore(add(transcript, 0x5f00), mload(add(transcript, 0x4ca0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5ec0), 0x60, add(transcript, 0x5ec0), 0x40), 1), success)mstore(add(transcript, 0x5f20), mload(add(transcript, 0x5e40))) mstore(add(transcript, 0x5f40), mload(add(transcript, 0x5e60)))mstore(add(transcript, 0x5f60), mload(add(transcript, 0x5ec0))) mstore(add(transcript, 0x5f80), mload(add(transcript, 0x5ee0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5f20), 0x80, add(transcript, 0x5f20), 0x40), 1), success)mstore(add(transcript, 0x5fa0), 0x00347e8e9332a177dba1b65fd1a8a17450521792a7fbac3e0297ebde6e7838e4) mstore(add(transcript, 0x5fc0), 0x289d406011aae1118ff4d86b716d4b9660f5c270ea5b5247a1cc71fc0745c4c7)mstore(add(transcript, 0x5fe0), mload(add(transcript, 0x4cc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5fa0), 0x60, add(transcript, 0x5fa0), 0x40), 1), success)mstore(add(transcript, 0x6000), mload(add(transcript, 0x5f20))) mstore(add(transcript, 0x6020), mload(add(transcript, 0x5f40)))mstore(add(transcript, 0x6040), mload(add(transcript, 0x5fa0))) mstore(add(transcript, 0x6060), mload(add(transcript, 0x5fc0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6000), 0x80, add(transcript, 0x6000), 0x40), 1), success)mstore(add(transcript, 0x6080), 0x238289053176d6ee7aaa36d98249c7dde4fee7f4dc90316f64f92b24ef9f987e) mstore(add(transcript, 0x60a0), 0x0c4e25e98208315fdedc6bde1545533eee6c7c4b89cfa44f764eb39a129d9ba4)mstore(add(transcript, 0x60c0), mload(add(transcript, 0x4ce0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6080), 0x60, add(transcript, 0x6080), 0x40), 1), success)mstore(add(transcript, 0x60e0), mload(add(transcript, 0x6000))) mstore(add(transcript, 0x6100), mload(add(transcript, 0x6020)))mstore(add(transcript, 0x6120), mload(add(transcript, 0x6080))) mstore(add(transcript, 0x6140), mload(add(transcript, 0x60a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x60e0), 0x80, add(transcript, 0x60e0), 0x40), 1), success)mstore(add(transcript, 0x6160), mload(add(transcript, 0x440))) mstore(add(transcript, 0x6180), mload(add(transcript, 0x460)))mstore(add(transcript, 0x61a0), mload(add(transcript, 0x4d00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6160), 0x60, add(transcript, 0x6160), 0x40), 1), success)mstore(add(transcript, 0x61c0), mload(add(transcript, 0x60e0))) mstore(add(transcript, 0x61e0), mload(add(transcript, 0x6100)))mstore(add(transcript, 0x6200), mload(add(transcript, 0x6160))) mstore(add(transcript, 0x6220), mload(add(transcript, 0x6180)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x61c0), 0x80, add(transcript, 0x61c0), 0x40), 1), success)mstore(add(transcript, 0x6240), mload(add(transcript, 0x480))) mstore(add(transcript, 0x6260), mload(add(transcript, 0x4a0)))mstore(add(transcript, 0x6280), mload(add(transcript, 0x4d20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6240), 0x60, add(transcript, 0x6240), 0x40), 1), success)mstore(add(transcript, 0x62a0), mload(add(transcript, 0x61c0))) mstore(add(transcript, 0x62c0), mload(add(transcript, 0x61e0)))mstore(add(transcript, 0x62e0), mload(add(transcript, 0x6240))) mstore(add(transcript, 0x6300), mload(add(transcript, 0x6260)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x62a0), 0x80, add(transcript, 0x62a0), 0x40), 1), success)mstore(add(transcript, 0x6320), mload(add(transcript, 0x4c0))) mstore(add(transcript, 0x6340), mload(add(transcript, 0x4e0)))mstore(add(transcript, 0x6360), mload(add(transcript, 0x4d40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6320), 0x60, add(transcript, 0x6320), 0x40), 1), success)mstore(add(transcript, 0x6380), mload(add(transcript, 0x62a0))) mstore(add(transcript, 0x63a0), mload(add(transcript, 0x62c0)))mstore(add(transcript, 0x63c0), mload(add(transcript, 0x6320))) mstore(add(transcript, 0x63e0), mload(add(transcript, 0x6340)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6380), 0x80, add(transcript, 0x6380), 0x40), 1), success)mstore(add(transcript, 0x6400), mload(add(transcript, 0x500))) mstore(add(transcript, 0x6420), mload(add(transcript, 0x520)))mstore(add(transcript, 0x6440), mload(add(transcript, 0x4d60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6400), 0x60, add(transcript, 0x6400), 0x40), 1), success)mstore(add(transcript, 0x6460), mload(add(transcript, 0x6380))) mstore(add(transcript, 0x6480), mload(add(transcript, 0x63a0)))mstore(add(transcript, 0x64a0), mload(add(transcript, 0x6400))) mstore(add(transcript, 0x64c0), mload(add(transcript, 0x6420)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6460), 0x80, add(transcript, 0x6460), 0x40), 1), success)mstore(add(transcript, 0x64e0), mload(add(transcript, 0x540))) mstore(add(transcript, 0x6500), mload(add(transcript, 0x560)))mstore(add(transcript, 0x6520), mload(add(transcript, 0x4d80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x64e0), 0x60, add(transcript, 0x64e0), 0x40), 1), success)mstore(add(transcript, 0x6540), mload(add(transcript, 0x6460))) mstore(add(transcript, 0x6560), mload(add(transcript, 0x6480)))mstore(add(transcript, 0x6580), mload(add(transcript, 0x64e0))) mstore(add(transcript, 0x65a0), mload(add(transcript, 0x6500)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6540), 0x80, add(transcript, 0x6540), 0x40), 1), success)mstore(add(transcript, 0x65c0), mload(add(transcript, 0x3a0))) mstore(add(transcript, 0x65e0), mload(add(transcript, 0x3c0)))mstore(add(transcript, 0x6600), mload(add(transcript, 0x4da0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x65c0), 0x60, add(transcript, 0x65c0), 0x40), 1), success)mstore(add(transcript, 0x6620), mload(add(transcript, 0x6540))) mstore(add(transcript, 0x6640), mload(add(transcript, 0x6560)))mstore(add(transcript, 0x6660), mload(add(transcript, 0x65c0))) mstore(add(transcript, 0x6680), mload(add(transcript, 0x65e0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6620), 0x80, add(transcript, 0x6620), 0x40), 1), success)mstore(add(transcript, 0x66a0), mload(add(transcript, 0xac0))) mstore(add(transcript, 0x66c0), mload(add(transcript, 0xae0)))mstore(add(transcript, 0x66e0), sub(f_q, mload(add(transcript, 0x4de0))))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x66a0), 0x60, add(transcript, 0x66a0), 0x40), 1), success)mstore(add(transcript, 0x6700), mload(add(transcript, 0x6620))) mstore(add(transcript, 0x6720), mload(add(transcript, 0x6640)))mstore(add(transcript, 0x6740), mload(add(transcript, 0x66a0))) mstore(add(transcript, 0x6760), mload(add(transcript, 0x66c0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6700), 0x80, add(transcript, 0x6700), 0x40), 1), success)mstore(add(transcript, 0x6780), mload(add(transcript, 0xb60))) mstore(add(transcript, 0x67a0), mload(add(transcript, 0xb80)))mstore(add(transcript, 0x67c0), mload(add(transcript, 0x4e00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6780), 0x60, add(transcript, 0x6780), 0x40), 1), success)mstore(add(transcript, 0x67e0), mload(add(transcript, 0x6700))) mstore(add(transcript, 0x6800), mload(add(transcript, 0x6720)))mstore(add(transcript, 0x6820), mload(add(transcript, 0x6780))) mstore(add(transcript, 0x6840), mload(add(transcript, 0x67a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x67e0), 0x80, add(transcript, 0x67e0), 0x40), 1), success)mstore(add(transcript, 0x6860), mload(add(transcript, 0x67e0))) mstore(add(transcript, 0x6880), mload(add(transcript, 0x6800)))mstore(add(transcript, 0x68a0), 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) mstore(add(transcript, 0x68c0), 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) mstore(add(transcript, 0x68e0), 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) mstore(add(transcript, 0x6900), 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa)mstore(add(transcript, 0x6920), mload(add(transcript, 0xb60))) mstore(add(transcript, 0x6940), mload(add(transcript, 0xb80)))mstore(add(transcript, 0x6960), 0x249b89133f51f707a562a9b69acaad642bd08c9179aa90c8188f40b5205dad43) mstore(add(transcript, 0x6980), 0x2981bdcac7171f8537f1064de061b5ce5e18dd2fc4a4e4430eb5087506e8ed82) mstore(add(transcript, 0x69a0), 0x1305f9ff4409c8d36208d7529987ea2438c22d017090ac2841b3d4fb36a6ea6f) mstore(add(transcript, 0x69c0), 0x14ed363012c9eb27ba479ea030fd6467e9a1f4e86d78097f3b37a7e91f7011dc)success := and(eq(staticcall(gas(), 0x8, add(transcript, 0x6860), 0x180, add(transcript, 0x6860), 0x20), 1), success)success := and(eq(mload(add(transcript, 0x6860)), 1), success)} return success; } } + assembly { let f_p := 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 let f_q := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 function validate_ec_point(x, y) -> valid { { let x_lt_p := lt(x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let y_lt_p := lt(y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) valid := and(x_lt_p, y_lt_p) } { let y_square := mulmod(y, y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_square := mulmod(x, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube := mulmod(x_square, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube_plus_3 := addmod(x_cube, 3, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let is_affine := eq(x_cube_plus_3, y_square) valid := and(valid, is_affine) } } mstore(add(transcript, 0x20), mod(mload(add(pubInputs, 0x20)), f_q))mstore(add(transcript, 0x40), mod(mload(add(pubInputs, 0x40)), f_q))mstore(add(transcript, 0x60), mod(mload(add(pubInputs, 0x60)), f_q))mstore(add(transcript, 0x0), 17670701479603100502823625940353980192460425255394494203384293782765030717197) { let x := mload(add(proof, 0x20)) mstore(add(transcript, 0x80), x) let y := mload(add(proof, 0x40)) mstore(add(transcript, 0xa0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x60)) mstore(add(transcript, 0xc0), x) let y := mload(add(proof, 0x80)) mstore(add(transcript, 0xe0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0xa0)) mstore(add(transcript, 0x100), x) let y := mload(add(proof, 0xc0)) mstore(add(transcript, 0x120), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x140), keccak256(add(transcript, 0x0), 320)){ let hash := mload(add(transcript, 0x140)) mstore(add(transcript, 0x160), mod(hash, f_q)) mstore(add(transcript, 0x180), hash) } { let x := mload(add(proof, 0xe0)) mstore(add(transcript, 0x1a0), x) let y := mload(add(proof, 0x100)) mstore(add(transcript, 0x1c0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x120)) mstore(add(transcript, 0x1e0), x) let y := mload(add(proof, 0x140)) mstore(add(transcript, 0x200), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x220), keccak256(add(transcript, 0x180), 160)){ let hash := mload(add(transcript, 0x220)) mstore(add(transcript, 0x240), mod(hash, f_q)) mstore(add(transcript, 0x260), hash) }mstore8(add(transcript, 0x280), 1)mstore(add(transcript, 0x280), keccak256(add(transcript, 0x260), 33)){ let hash := mload(add(transcript, 0x280)) mstore(add(transcript, 0x2a0), mod(hash, f_q)) mstore(add(transcript, 0x2c0), hash) } { let x := mload(add(proof, 0x160)) mstore(add(transcript, 0x2e0), x) let y := mload(add(proof, 0x180)) mstore(add(transcript, 0x300), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x1a0)) mstore(add(transcript, 0x320), x) let y := mload(add(proof, 0x1c0)) mstore(add(transcript, 0x340), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x1e0)) mstore(add(transcript, 0x360), x) let y := mload(add(proof, 0x200)) mstore(add(transcript, 0x380), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x220)) mstore(add(transcript, 0x3a0), x) let y := mload(add(proof, 0x240)) mstore(add(transcript, 0x3c0), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x3e0), keccak256(add(transcript, 0x2c0), 288)){ let hash := mload(add(transcript, 0x3e0)) mstore(add(transcript, 0x400), mod(hash, f_q)) mstore(add(transcript, 0x420), hash) } { let x := mload(add(proof, 0x260)) mstore(add(transcript, 0x440), x) let y := mload(add(proof, 0x280)) mstore(add(transcript, 0x460), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x2a0)) mstore(add(transcript, 0x480), x) let y := mload(add(proof, 0x2c0)) mstore(add(transcript, 0x4a0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x2e0)) mstore(add(transcript, 0x4c0), x) let y := mload(add(proof, 0x300)) mstore(add(transcript, 0x4e0), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x320)) mstore(add(transcript, 0x500), x) let y := mload(add(proof, 0x340)) mstore(add(transcript, 0x520), y) success := and(validate_ec_point(x, y), success) } { let x := mload(add(proof, 0x360)) mstore(add(transcript, 0x540), x) let y := mload(add(proof, 0x380)) mstore(add(transcript, 0x560), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0x580), keccak256(add(transcript, 0x420), 352)){ let hash := mload(add(transcript, 0x580)) mstore(add(transcript, 0x5a0), mod(hash, f_q)) mstore(add(transcript, 0x5c0), hash) }mstore(add(transcript, 0x5e0), mod(mload(add(proof, 0x3a0)), f_q))mstore(add(transcript, 0x600), mod(mload(add(proof, 0x3c0)), f_q))mstore(add(transcript, 0x620), mod(mload(add(proof, 0x3e0)), f_q))mstore(add(transcript, 0x640), mod(mload(add(proof, 0x400)), f_q))mstore(add(transcript, 0x660), mod(mload(add(proof, 0x420)), f_q))mstore(add(transcript, 0x680), mod(mload(add(proof, 0x440)), f_q))mstore(add(transcript, 0x6a0), mod(mload(add(proof, 0x460)), f_q))mstore(add(transcript, 0x6c0), mod(mload(add(proof, 0x480)), f_q))mstore(add(transcript, 0x6e0), mod(mload(add(proof, 0x4a0)), f_q))mstore(add(transcript, 0x700), mod(mload(add(proof, 0x4c0)), f_q))mstore(add(transcript, 0x720), mod(mload(add(proof, 0x4e0)), f_q))mstore(add(transcript, 0x740), mod(mload(add(proof, 0x500)), f_q))mstore(add(transcript, 0x760), mod(mload(add(proof, 0x520)), f_q))mstore(add(transcript, 0x780), mod(mload(add(proof, 0x540)), f_q))mstore(add(transcript, 0x7a0), mod(mload(add(proof, 0x560)), f_q))mstore(add(transcript, 0x7c0), mod(mload(add(proof, 0x580)), f_q))mstore(add(transcript, 0x7e0), mod(mload(add(proof, 0x5a0)), f_q))mstore(add(transcript, 0x800), mod(mload(add(proof, 0x5c0)), f_q))mstore(add(transcript, 0x820), mod(mload(add(proof, 0x5e0)), f_q))mstore(add(transcript, 0x840), mod(mload(add(proof, 0x600)), f_q))mstore(add(transcript, 0x860), mod(mload(add(proof, 0x620)), f_q))mstore(add(transcript, 0x880), mod(mload(add(proof, 0x640)), f_q))mstore(add(transcript, 0x8a0), mod(mload(add(proof, 0x660)), f_q))mstore(add(transcript, 0x8c0), mod(mload(add(proof, 0x680)), f_q))mstore(add(transcript, 0x8e0), mod(mload(add(proof, 0x6a0)), f_q))mstore(add(transcript, 0x900), mod(mload(add(proof, 0x6c0)), f_q))mstore(add(transcript, 0x920), mod(mload(add(proof, 0x6e0)), f_q))mstore(add(transcript, 0x940), mod(mload(add(proof, 0x700)), f_q))mstore(add(transcript, 0x960), mod(mload(add(proof, 0x720)), f_q))mstore(add(transcript, 0x980), mod(mload(add(proof, 0x740)), f_q))mstore(add(transcript, 0x9a0), mod(mload(add(proof, 0x760)), f_q))mstore(add(transcript, 0x9c0), mod(mload(add(proof, 0x780)), f_q))mstore(add(transcript, 0x9e0), mod(mload(add(proof, 0x7a0)), f_q))mstore(add(transcript, 0xa00), keccak256(add(transcript, 0x5c0), 1088)){ let hash := mload(add(transcript, 0xa00)) mstore(add(transcript, 0xa20), mod(hash, f_q)) mstore(add(transcript, 0xa40), hash) }mstore8(add(transcript, 0xa60), 1)mstore(add(transcript, 0xa60), keccak256(add(transcript, 0xa40), 33)){ let hash := mload(add(transcript, 0xa60)) mstore(add(transcript, 0xa80), mod(hash, f_q)) mstore(add(transcript, 0xaa0), hash) } { let x := mload(add(proof, 0x7c0)) mstore(add(transcript, 0xac0), x) let y := mload(add(proof, 0x7e0)) mstore(add(transcript, 0xae0), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0xb00), keccak256(add(transcript, 0xaa0), 96)){ let hash := mload(add(transcript, 0xb00)) mstore(add(transcript, 0xb20), mod(hash, f_q)) mstore(add(transcript, 0xb40), hash) } { let x := mload(add(proof, 0x800)) mstore(add(transcript, 0xb60), x) let y := mload(add(proof, 0x820)) mstore(add(transcript, 0xb80), y) success := and(validate_ec_point(x, y), success) }mstore(add(transcript, 0xba0), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x5a0)), f_q))mstore(add(transcript, 0xbc0), mulmod(mload(add(transcript, 0xba0)), mload(add(transcript, 0xba0)), f_q))mstore(add(transcript, 0xbe0), mulmod(mload(add(transcript, 0xbc0)), mload(add(transcript, 0xbc0)), f_q))mstore(add(transcript, 0xc00), mulmod(mload(add(transcript, 0xbe0)), mload(add(transcript, 0xbe0)), f_q))mstore(add(transcript, 0xc20), mulmod(mload(add(transcript, 0xc00)), mload(add(transcript, 0xc00)), f_q))mstore(add(transcript, 0xc40), mulmod(mload(add(transcript, 0xc20)), mload(add(transcript, 0xc20)), f_q))mstore(add(transcript, 0xc60), mulmod(mload(add(transcript, 0xc40)), mload(add(transcript, 0xc40)), f_q))mstore(add(transcript, 0xc80), mulmod(mload(add(transcript, 0xc60)), mload(add(transcript, 0xc60)), f_q))mstore(add(transcript, 0xca0), mulmod(mload(add(transcript, 0xc80)), mload(add(transcript, 0xc80)), f_q))mstore(add(transcript, 0xcc0), mulmod(mload(add(transcript, 0xca0)), mload(add(transcript, 0xca0)), f_q))mstore(add(transcript, 0xce0), addmod(mload(add(transcript, 0xcc0)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))mstore(add(transcript, 0xd00), mulmod(mload(add(transcript, 0xce0)), 21866867634659744680037180739646672280844703888306253060159436409049855557633, f_q))mstore(add(transcript, 0xd20), mulmod(mload(add(transcript, 0xd00)), 9936069627611189518829255670237324269287146421271524553312532036927871056678, f_q))mstore(add(transcript, 0xd40), addmod(mload(add(transcript, 0x5a0)), 11952173244228085703417150075019950819261217979144509790385672149647937438939, f_q))mstore(add(transcript, 0xd60), mulmod(mload(add(transcript, 0xd00)), 1680739780407307830605919050682431078078760076686599579086116998224280619988, f_q))mstore(add(transcript, 0xd80), addmod(mload(add(transcript, 0x5a0)), 20207503091431967391640486694574844010469604323729434764612087188351527875629, f_q))mstore(add(transcript, 0xda0), mulmod(mload(add(transcript, 0xd00)), 14158528901797138466244491986759313854666262535363044392173788062030301470987, f_q))mstore(add(transcript, 0xdc0), addmod(mload(add(transcript, 0x5a0)), 7729713970042136756001913758497961233882101865052989951524416124545507024630, f_q))mstore(add(transcript, 0xde0), mulmod(mload(add(transcript, 0xd00)), 15699029810934084314820646074566828280617789951162923449200398535581206172418, f_q))mstore(add(transcript, 0xe00), addmod(mload(add(transcript, 0x5a0)), 6189213060905190907425759670690446807930574449253110894497805650994602323199, f_q))mstore(add(transcript, 0xe20), mulmod(mload(add(transcript, 0xd00)), 4260969412351770314333984243767775737437927068151180798236715529158398853173, f_q))mstore(add(transcript, 0xe40), addmod(mload(add(transcript, 0x5a0)), 17627273459487504907912421501489499351110437332264853545461488657417409642444, f_q))mstore(add(transcript, 0xe60), mulmod(mload(add(transcript, 0xd00)), 4925592601992654644734291590386747644864797672605745962807370354577123815907, f_q))mstore(add(transcript, 0xe80), addmod(mload(add(transcript, 0x5a0)), 16962650269846620577512114154870527443683566727810288380890833831998684679710, f_q))mstore(add(transcript, 0xea0), mulmod(mload(add(transcript, 0xd00)), 1, f_q))mstore(add(transcript, 0xec0), addmod(mload(add(transcript, 0x5a0)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))mstore(add(transcript, 0xee0), mulmod(mload(add(transcript, 0xd00)), 19380560087801265747114831706136320509424814679569278834391540198888293317501, f_q))mstore(add(transcript, 0xf00), addmod(mload(add(transcript, 0x5a0)), 2507682784038009475131574039120954579123549720846755509306663987687515178116, f_q))mstore(add(transcript, 0xf20), mulmod(mload(add(transcript, 0xd00)), 6252951856119339508807713076978770803512896272623217303779254502899773638908, f_q))mstore(add(transcript, 0xf40), addmod(mload(add(transcript, 0x5a0)), 15635291015719935713438692668278504285035468127792817039918949683676034856709, f_q)){ let prod := mload(add(transcript, 0xd40)) prod := mulmod(mload(add(transcript, 0xd80)), prod, f_q) mstore(add(transcript, 0xf60), prod) prod := mulmod(mload(add(transcript, 0xdc0)), prod, f_q) mstore(add(transcript, 0xf80), prod) prod := mulmod(mload(add(transcript, 0xe00)), prod, f_q) mstore(add(transcript, 0xfa0), prod) prod := mulmod(mload(add(transcript, 0xe40)), prod, f_q) mstore(add(transcript, 0xfc0), prod) prod := mulmod(mload(add(transcript, 0xe80)), prod, f_q) mstore(add(transcript, 0xfe0), prod) prod := mulmod(mload(add(transcript, 0xec0)), prod, f_q) mstore(add(transcript, 0x1000), prod) prod := mulmod(mload(add(transcript, 0xf00)), prod, f_q) mstore(add(transcript, 0x1020), prod) prod := mulmod(mload(add(transcript, 0xf40)), prod, f_q) mstore(add(transcript, 0x1040), prod) prod := mulmod(mload(add(transcript, 0xce0)), prod, f_q) mstore(add(transcript, 0x1060), prod) }mstore(add(transcript, 0x10a0), 32)mstore(add(transcript, 0x10c0), 32)mstore(add(transcript, 0x10e0), 32)mstore(add(transcript, 0x1100), mload(add(transcript, 0x1060)))mstore(add(transcript, 0x1120), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x1140), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x10a0), 0xc0, add(transcript, 0x1080), 0x20), 1), success){ let inv := mload(add(transcript, 0x1080)) let v v := mload(add(transcript, 0xce0)) mstore(add(transcript, 0xce0), mulmod(mload(add(transcript, 0x1040)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xf40)) mstore(add(transcript, 0xf40), mulmod(mload(add(transcript, 0x1020)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xf00)) mstore(add(transcript, 0xf00), mulmod(mload(add(transcript, 0x1000)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xec0)) mstore(add(transcript, 0xec0), mulmod(mload(add(transcript, 0xfe0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe80)) mstore(add(transcript, 0xe80), mulmod(mload(add(transcript, 0xfc0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe40)) mstore(add(transcript, 0xe40), mulmod(mload(add(transcript, 0xfa0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xe00)) mstore(add(transcript, 0xe00), mulmod(mload(add(transcript, 0xf80)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xdc0)) mstore(add(transcript, 0xdc0), mulmod(mload(add(transcript, 0xf60)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0xd80)) mstore(add(transcript, 0xd80), mulmod(mload(add(transcript, 0xd40)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0xd40), inv) }mstore(add(transcript, 0x1160), mulmod(mload(add(transcript, 0xd20)), mload(add(transcript, 0xd40)), f_q))mstore(add(transcript, 0x1180), mulmod(mload(add(transcript, 0xd60)), mload(add(transcript, 0xd80)), f_q))mstore(add(transcript, 0x11a0), mulmod(mload(add(transcript, 0xda0)), mload(add(transcript, 0xdc0)), f_q))mstore(add(transcript, 0x11c0), mulmod(mload(add(transcript, 0xde0)), mload(add(transcript, 0xe00)), f_q))mstore(add(transcript, 0x11e0), mulmod(mload(add(transcript, 0xe20)), mload(add(transcript, 0xe40)), f_q))mstore(add(transcript, 0x1200), mulmod(mload(add(transcript, 0xe60)), mload(add(transcript, 0xe80)), f_q))mstore(add(transcript, 0x1220), mulmod(mload(add(transcript, 0xea0)), mload(add(transcript, 0xec0)), f_q))mstore(add(transcript, 0x1240), mulmod(mload(add(transcript, 0xee0)), mload(add(transcript, 0xf00)), f_q))mstore(add(transcript, 0x1260), mulmod(mload(add(transcript, 0xf20)), mload(add(transcript, 0xf40)), f_q)){ let result := mulmod(mload(add(transcript, 0x1220)), mload(add(transcript, 0x20)), f_q)result := addmod(mulmod(mload(add(transcript, 0x1240)), mload(add(transcript, 0x40)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x1260)), mload(add(transcript, 0x60)), f_q), result, f_q)mstore(add(transcript, 0x1280), result) }mstore(add(transcript, 0x12a0), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x720)), f_q))mstore(add(transcript, 0x12c0), mulmod(mload(add(transcript, 0x12a0)), mload(add(transcript, 0x12a0)), f_q))mstore(add(transcript, 0x12e0), mulmod(mload(add(transcript, 0x12c0)), mload(add(transcript, 0x12c0)), f_q))mstore(add(transcript, 0x1300), mulmod(mload(add(transcript, 0x12a0)), mload(add(transcript, 0x12e0)), f_q))mstore(add(transcript, 0x1320), mulmod(mload(add(transcript, 0x1300)), 2910766817845651019878574839501801340070030115151021261302834310722729507541, f_q))mstore(add(transcript, 0x1340), addmod(mload(add(transcript, 0x600)), mload(add(transcript, 0x740)), f_q))mstore(add(transcript, 0x1360), mulmod(mload(add(transcript, 0x1340)), mload(add(transcript, 0x1340)), f_q))mstore(add(transcript, 0x1380), mulmod(mload(add(transcript, 0x1360)), mload(add(transcript, 0x1360)), f_q))mstore(add(transcript, 0x13a0), mulmod(mload(add(transcript, 0x1340)), mload(add(transcript, 0x1380)), f_q))mstore(add(transcript, 0x13c0), mulmod(mload(add(transcript, 0x13a0)), 19727366863391167538122140361473584127147630672623100827934084310230022599144, f_q))mstore(add(transcript, 0x13e0), addmod(mload(add(transcript, 0x1320)), mload(add(transcript, 0x13c0)), f_q))mstore(add(transcript, 0x1400), addmod(mload(add(transcript, 0x13e0)), sub(f_q, mload(add(transcript, 0x620))), f_q))mstore(add(transcript, 0x1420), mulmod(mload(add(transcript, 0x1400)), mload(add(transcript, 0x7a0)), f_q))mstore(add(transcript, 0x1440), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1420)), f_q))mstore(add(transcript, 0x1460), mulmod(mload(add(transcript, 0x1300)), 5776684794125549462448597414050232243778680302179439492664047328281728356345, f_q))mstore(add(transcript, 0x1480), mulmod(mload(add(transcript, 0x13a0)), 8348174920934122550483593999453880006756108121341067172388445916328941978568, f_q))mstore(add(transcript, 0x14a0), addmod(mload(add(transcript, 0x1460)), mload(add(transcript, 0x1480)), f_q))mstore(add(transcript, 0x14c0), addmod(mload(add(transcript, 0x14a0)), sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x14e0), mulmod(mload(add(transcript, 0x14c0)), mload(add(transcript, 0x7a0)), f_q))mstore(add(transcript, 0x1500), addmod(mload(add(transcript, 0x1440)), mload(add(transcript, 0x14e0)), f_q))mstore(add(transcript, 0x1520), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1500)), f_q))mstore(add(transcript, 0x1540), addmod(mload(add(transcript, 0x1300)), sub(f_q, mload(add(transcript, 0x660))), f_q))mstore(add(transcript, 0x1560), mulmod(mload(add(transcript, 0x1540)), mload(add(transcript, 0x7c0)), f_q))mstore(add(transcript, 0x1580), addmod(mload(add(transcript, 0x1520)), mload(add(transcript, 0x1560)), f_q))mstore(add(transcript, 0x15a0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1580)), f_q))mstore(add(transcript, 0x15c0), mulmod(mload(add(transcript, 0x660)), 2910766817845651019878574839501801340070030115151021261302834310722729507541, f_q))mstore(add(transcript, 0x15e0), mulmod(mload(add(transcript, 0x1340)), 19727366863391167538122140361473584127147630672623100827934084310230022599144, f_q))mstore(add(transcript, 0x1600), addmod(mload(add(transcript, 0x15c0)), mload(add(transcript, 0x15e0)), f_q))mstore(add(transcript, 0x1620), addmod(mload(add(transcript, 0x1600)), mload(add(transcript, 0x6e0)), f_q))mstore(add(transcript, 0x1640), mulmod(mload(add(transcript, 0x1620)), mload(add(transcript, 0x1620)), f_q))mstore(add(transcript, 0x1660), mulmod(mload(add(transcript, 0x1640)), mload(add(transcript, 0x1640)), f_q))mstore(add(transcript, 0x1680), mulmod(mload(add(transcript, 0x1620)), mload(add(transcript, 0x1660)), f_q))mstore(add(transcript, 0x16a0), mulmod(mload(add(transcript, 0x620)), 8897705321156975119607866206188469715432233408805434913352778521345836531302, f_q))mstore(add(transcript, 0x16c0), mulmod(mload(add(transcript, 0x640)), 13897810991298242824030978581179475767377101082166056046492926701399149797630, f_q))mstore(add(transcript, 0x16e0), addmod(mload(add(transcript, 0x16a0)), mload(add(transcript, 0x16c0)), f_q))mstore(add(transcript, 0x1700), addmod(mload(add(transcript, 0x1680)), sub(f_q, mload(add(transcript, 0x16e0))), f_q))mstore(add(transcript, 0x1720), mulmod(mload(add(transcript, 0x1700)), mload(add(transcript, 0x7c0)), f_q))mstore(add(transcript, 0x1740), addmod(mload(add(transcript, 0x15a0)), mload(add(transcript, 0x1720)), f_q))mstore(add(transcript, 0x1760), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1740)), f_q))mstore(add(transcript, 0x1780), mulmod(mload(add(transcript, 0x660)), 5776684794125549462448597414050232243778680302179439492664047328281728356345, f_q))mstore(add(transcript, 0x17a0), mulmod(mload(add(transcript, 0x1340)), 8348174920934122550483593999453880006756108121341067172388445916328941978568, f_q))mstore(add(transcript, 0x17c0), addmod(mload(add(transcript, 0x1780)), mload(add(transcript, 0x17a0)), f_q))mstore(add(transcript, 0x17e0), addmod(mload(add(transcript, 0x17c0)), mload(add(transcript, 0x700)), f_q))mstore(add(transcript, 0x1800), mulmod(mload(add(transcript, 0x620)), 7127083008168878795310303301757642617203533252990949589494537404444738046722, f_q))mstore(add(transcript, 0x1820), mulmod(mload(add(transcript, 0x640)), 10251091711782631878897995303436082826711938358699127319815611151510940403902, f_q))mstore(add(transcript, 0x1840), addmod(mload(add(transcript, 0x1800)), mload(add(transcript, 0x1820)), f_q))mstore(add(transcript, 0x1860), addmod(mload(add(transcript, 0x17e0)), sub(f_q, mload(add(transcript, 0x1840))), f_q))mstore(add(transcript, 0x1880), mulmod(mload(add(transcript, 0x1860)), mload(add(transcript, 0x7c0)), f_q))mstore(add(transcript, 0x18a0), addmod(mload(add(transcript, 0x1760)), mload(add(transcript, 0x1880)), f_q))mstore(add(transcript, 0x18c0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x18a0)), f_q))mstore(add(transcript, 0x18e0), addmod(1, sub(f_q, mload(add(transcript, 0x780))), f_q))mstore(add(transcript, 0x1900), mulmod(mload(add(transcript, 0x18e0)), mload(add(transcript, 0x780)), f_q))mstore(add(transcript, 0x1920), addmod(2, sub(f_q, mload(add(transcript, 0x780))), f_q))mstore(add(transcript, 0x1940), mulmod(mload(add(transcript, 0x1920)), mload(add(transcript, 0x1900)), f_q))mstore(add(transcript, 0x1960), addmod(3, sub(f_q, mload(add(transcript, 0x780))), f_q))mstore(add(transcript, 0x1980), mulmod(mload(add(transcript, 0x1960)), mload(add(transcript, 0x1940)), f_q))mstore(add(transcript, 0x19a0), addmod(mload(add(transcript, 0x6a0)), mload(add(transcript, 0x5e0)), f_q))mstore(add(transcript, 0x19c0), addmod(mload(add(transcript, 0x19a0)), sub(f_q, mload(add(transcript, 0x620))), f_q))mstore(add(transcript, 0x19e0), mulmod(mload(add(transcript, 0x19c0)), mload(add(transcript, 0x1980)), f_q))mstore(add(transcript, 0x1a00), addmod(mload(add(transcript, 0x18c0)), mload(add(transcript, 0x19e0)), f_q))mstore(add(transcript, 0x1a20), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1a00)), f_q))mstore(add(transcript, 0x1a40), addmod(mload(add(transcript, 0x680)), sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x1a60), mulmod(mload(add(transcript, 0x1a40)), mload(add(transcript, 0x1980)), f_q))mstore(add(transcript, 0x1a80), addmod(mload(add(transcript, 0x1a20)), mload(add(transcript, 0x1a60)), f_q))mstore(add(transcript, 0x1aa0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1a80)), f_q))mstore(add(transcript, 0x1ac0), mulmod(mload(add(transcript, 0x1920)), mload(add(transcript, 0x780)), f_q))mstore(add(transcript, 0x1ae0), mulmod(mload(add(transcript, 0x1960)), mload(add(transcript, 0x1ac0)), f_q))mstore(add(transcript, 0x1b00), addmod(4, sub(f_q, mload(add(transcript, 0x780))), f_q))mstore(add(transcript, 0x1b20), mulmod(mload(add(transcript, 0x1b00)), mload(add(transcript, 0x1ae0)), f_q))mstore(add(transcript, 0x1b40), mulmod(mload(add(transcript, 0x660)), mload(add(transcript, 0x1b20)), f_q))mstore(add(transcript, 0x1b60), addmod(1, sub(f_q, mload(add(transcript, 0x660))), f_q))mstore(add(transcript, 0x1b80), mulmod(mload(add(transcript, 0x1b60)), mload(add(transcript, 0x1b40)), f_q))mstore(add(transcript, 0x1ba0), addmod(mload(add(transcript, 0x1aa0)), mload(add(transcript, 0x1b80)), f_q))mstore(add(transcript, 0x1bc0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1ba0)), f_q))mstore(add(transcript, 0x1be0), mulmod(2, mload(add(transcript, 0x660)), f_q))mstore(add(transcript, 0x1c00), addmod(mload(add(transcript, 0x600)), sub(f_q, mload(add(transcript, 0x5e0))), f_q))mstore(add(transcript, 0x1c20), mulmod(mload(add(transcript, 0x1c00)), mload(add(transcript, 0x1be0)), f_q))mstore(add(transcript, 0x1c40), addmod(mload(add(transcript, 0x620)), sub(f_q, mload(add(transcript, 0x5e0))), f_q))mstore(add(transcript, 0x1c60), addmod(mload(add(transcript, 0x1c20)), sub(f_q, mload(add(transcript, 0x1c40))), f_q))mstore(add(transcript, 0x1c80), addmod(mload(add(transcript, 0x600)), sub(f_q, mload(add(transcript, 0x640))), f_q))mstore(add(transcript, 0x1ca0), addmod(mload(add(transcript, 0x1c60)), sub(f_q, mload(add(transcript, 0x1c80))), f_q))mstore(add(transcript, 0x1cc0), mulmod(mload(add(transcript, 0x1ca0)), mload(add(transcript, 0x1b20)), f_q))mstore(add(transcript, 0x1ce0), addmod(mload(add(transcript, 0x1bc0)), mload(add(transcript, 0x1cc0)), f_q))mstore(add(transcript, 0x1d00), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1ce0)), f_q))mstore(add(transcript, 0x1d20), mulmod(mload(add(transcript, 0x1960)), mload(add(transcript, 0x1900)), f_q))mstore(add(transcript, 0x1d40), mulmod(mload(add(transcript, 0x1b00)), mload(add(transcript, 0x1d20)), f_q))mstore(add(transcript, 0x1d60), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x600)), f_q))mstore(add(transcript, 0x1d80), addmod(mload(add(transcript, 0x1d60)), sub(f_q, mload(add(transcript, 0x660))), f_q))mstore(add(transcript, 0x1da0), mulmod(mload(add(transcript, 0x1d80)), mload(add(transcript, 0x1d40)), f_q))mstore(add(transcript, 0x1dc0), addmod(mload(add(transcript, 0x1d00)), mload(add(transcript, 0x1da0)), f_q))mstore(add(transcript, 0x1de0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1dc0)), f_q))mstore(add(transcript, 0x1e00), addmod(mload(add(transcript, 0x1de0)), mload(add(transcript, 0x1da0)), f_q))mstore(add(transcript, 0x1e20), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1e00)), f_q))mstore(add(transcript, 0x1e40), mulmod(mload(add(transcript, 0x1b00)), mload(add(transcript, 0x1940)), f_q))mstore(add(transcript, 0x1e60), addmod(mload(add(transcript, 0x5e0)), sub(f_q, mload(add(transcript, 0x600))), f_q))mstore(add(transcript, 0x1e80), addmod(mload(add(transcript, 0x1e60)), 5192296858534827628530496329220096, f_q))mstore(add(transcript, 0x1ea0), addmod(mload(add(transcript, 0x1e80)), sub(f_q, mload(add(transcript, 0x660))), f_q))mstore(add(transcript, 0x1ec0), mulmod(mload(add(transcript, 0x1ea0)), mload(add(transcript, 0x1e40)), f_q))mstore(add(transcript, 0x1ee0), addmod(mload(add(transcript, 0x1e20)), mload(add(transcript, 0x1ec0)), f_q))mstore(add(transcript, 0x1f00), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1ee0)), f_q))mstore(add(transcript, 0x1f20), addmod(1, sub(f_q, mload(add(transcript, 0x8c0))), f_q))mstore(add(transcript, 0x1f40), mulmod(mload(add(transcript, 0x1f20)), mload(add(transcript, 0x1220)), f_q))mstore(add(transcript, 0x1f60), addmod(mload(add(transcript, 0x1f00)), mload(add(transcript, 0x1f40)), f_q))mstore(add(transcript, 0x1f80), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x1f60)), f_q))mstore(add(transcript, 0x1fa0), mulmod(mload(add(transcript, 0x920)), mload(add(transcript, 0x920)), f_q))mstore(add(transcript, 0x1fc0), addmod(mload(add(transcript, 0x1fa0)), sub(f_q, mload(add(transcript, 0x920))), f_q))mstore(add(transcript, 0x1fe0), mulmod(mload(add(transcript, 0x1fc0)), mload(add(transcript, 0x1160)), f_q))mstore(add(transcript, 0x2000), addmod(mload(add(transcript, 0x1f80)), mload(add(transcript, 0x1fe0)), f_q))mstore(add(transcript, 0x2020), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2000)), f_q))mstore(add(transcript, 0x2040), addmod(mload(add(transcript, 0x920)), sub(f_q, mload(add(transcript, 0x900))), f_q))mstore(add(transcript, 0x2060), mulmod(mload(add(transcript, 0x2040)), mload(add(transcript, 0x1220)), f_q))mstore(add(transcript, 0x2080), addmod(mload(add(transcript, 0x2020)), mload(add(transcript, 0x2060)), f_q))mstore(add(transcript, 0x20a0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2080)), f_q))mstore(add(transcript, 0x20c0), addmod(1, sub(f_q, mload(add(transcript, 0x1160))), f_q))mstore(add(transcript, 0x20e0), addmod(mload(add(transcript, 0x1180)), mload(add(transcript, 0x11a0)), f_q))mstore(add(transcript, 0x2100), addmod(mload(add(transcript, 0x20e0)), mload(add(transcript, 0x11c0)), f_q))mstore(add(transcript, 0x2120), addmod(mload(add(transcript, 0x2100)), mload(add(transcript, 0x11e0)), f_q))mstore(add(transcript, 0x2140), addmod(mload(add(transcript, 0x2120)), mload(add(transcript, 0x1200)), f_q))mstore(add(transcript, 0x2160), addmod(mload(add(transcript, 0x20c0)), sub(f_q, mload(add(transcript, 0x2140))), f_q))mstore(add(transcript, 0x2180), mulmod(mload(add(transcript, 0x800)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x21a0), addmod(mload(add(transcript, 0x6e0)), mload(add(transcript, 0x2180)), f_q))mstore(add(transcript, 0x21c0), addmod(mload(add(transcript, 0x21a0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x21e0), mulmod(mload(add(transcript, 0x820)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2200), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x21e0)), f_q))mstore(add(transcript, 0x2220), addmod(mload(add(transcript, 0x2200)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2240), mulmod(mload(add(transcript, 0x2220)), mload(add(transcript, 0x21c0)), f_q))mstore(add(transcript, 0x2260), mulmod(mload(add(transcript, 0x840)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2280), addmod(mload(add(transcript, 0x600)), mload(add(transcript, 0x2260)), f_q))mstore(add(transcript, 0x22a0), addmod(mload(add(transcript, 0x2280)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x22c0), mulmod(mload(add(transcript, 0x22a0)), mload(add(transcript, 0x2240)), f_q))mstore(add(transcript, 0x22e0), mulmod(mload(add(transcript, 0x860)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2300), addmod(mload(add(transcript, 0x700)), mload(add(transcript, 0x22e0)), f_q))mstore(add(transcript, 0x2320), addmod(mload(add(transcript, 0x2300)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2340), mulmod(mload(add(transcript, 0x2320)), mload(add(transcript, 0x22c0)), f_q))mstore(add(transcript, 0x2360), mulmod(mload(add(transcript, 0x2340)), mload(add(transcript, 0x8e0)), f_q))mstore(add(transcript, 0x2380), mulmod(1, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x23a0), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x2380)), f_q))mstore(add(transcript, 0x23c0), addmod(mload(add(transcript, 0x6e0)), mload(add(transcript, 0x23a0)), f_q))mstore(add(transcript, 0x23e0), addmod(mload(add(transcript, 0x23c0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2400), mulmod(4131629893567559867359510883348571134090853742863529169391034518566172092834, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2420), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x2400)), f_q))mstore(add(transcript, 0x2440), addmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x2420)), f_q))mstore(add(transcript, 0x2460), addmod(mload(add(transcript, 0x2440)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2480), mulmod(mload(add(transcript, 0x2460)), mload(add(transcript, 0x23e0)), f_q))mstore(add(transcript, 0x24a0), mulmod(8910878055287538404433155982483128285667088683464058436815641868457422632747, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x24c0), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x24a0)), f_q))mstore(add(transcript, 0x24e0), addmod(mload(add(transcript, 0x600)), mload(add(transcript, 0x24c0)), f_q))mstore(add(transcript, 0x2500), addmod(mload(add(transcript, 0x24e0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2520), mulmod(mload(add(transcript, 0x2500)), mload(add(transcript, 0x2480)), f_q))mstore(add(transcript, 0x2540), mulmod(11166246659983828508719468090013646171463329086121580628794302409516816350802, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2560), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x2540)), f_q))mstore(add(transcript, 0x2580), addmod(mload(add(transcript, 0x700)), mload(add(transcript, 0x2560)), f_q))mstore(add(transcript, 0x25a0), addmod(mload(add(transcript, 0x2580)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x25c0), mulmod(mload(add(transcript, 0x25a0)), mload(add(transcript, 0x2520)), f_q))mstore(add(transcript, 0x25e0), mulmod(mload(add(transcript, 0x25c0)), mload(add(transcript, 0x8c0)), f_q))mstore(add(transcript, 0x2600), addmod(mload(add(transcript, 0x2360)), sub(f_q, mload(add(transcript, 0x25e0))), f_q))mstore(add(transcript, 0x2620), mulmod(mload(add(transcript, 0x2600)), mload(add(transcript, 0x2160)), f_q))mstore(add(transcript, 0x2640), addmod(mload(add(transcript, 0x20a0)), mload(add(transcript, 0x2620)), f_q))mstore(add(transcript, 0x2660), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2640)), f_q))mstore(add(transcript, 0x2680), mulmod(mload(add(transcript, 0x880)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x26a0), addmod(mload(add(transcript, 0x660)), mload(add(transcript, 0x2680)), f_q))mstore(add(transcript, 0x26c0), addmod(mload(add(transcript, 0x26a0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x26e0), mulmod(mload(add(transcript, 0x8a0)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2700), addmod(mload(add(transcript, 0x1280)), mload(add(transcript, 0x26e0)), f_q))mstore(add(transcript, 0x2720), addmod(mload(add(transcript, 0x2700)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2740), mulmod(mload(add(transcript, 0x2720)), mload(add(transcript, 0x26c0)), f_q))mstore(add(transcript, 0x2760), mulmod(mload(add(transcript, 0x2740)), mload(add(transcript, 0x940)), f_q))mstore(add(transcript, 0x2780), mulmod(284840088355319032285349970403338060113257071685626700086398481893096618818, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x27a0), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x2780)), f_q))mstore(add(transcript, 0x27c0), addmod(mload(add(transcript, 0x660)), mload(add(transcript, 0x27a0)), f_q))mstore(add(transcript, 0x27e0), addmod(mload(add(transcript, 0x27c0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2800), mulmod(21134065618345176623193549882539580312263652408302468683943992798037078993309, mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2820), mulmod(mload(add(transcript, 0x5a0)), mload(add(transcript, 0x2800)), f_q))mstore(add(transcript, 0x2840), addmod(mload(add(transcript, 0x1280)), mload(add(transcript, 0x2820)), f_q))mstore(add(transcript, 0x2860), addmod(mload(add(transcript, 0x2840)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2880), mulmod(mload(add(transcript, 0x2860)), mload(add(transcript, 0x27e0)), f_q))mstore(add(transcript, 0x28a0), mulmod(mload(add(transcript, 0x2880)), mload(add(transcript, 0x920)), f_q))mstore(add(transcript, 0x28c0), addmod(mload(add(transcript, 0x2760)), sub(f_q, mload(add(transcript, 0x28a0))), f_q))mstore(add(transcript, 0x28e0), mulmod(mload(add(transcript, 0x28c0)), mload(add(transcript, 0x2160)), f_q))mstore(add(transcript, 0x2900), addmod(mload(add(transcript, 0x2660)), mload(add(transcript, 0x28e0)), f_q))mstore(add(transcript, 0x2920), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2900)), f_q))mstore(add(transcript, 0x2940), addmod(1, sub(f_q, mload(add(transcript, 0x960))), f_q))mstore(add(transcript, 0x2960), mulmod(mload(add(transcript, 0x2940)), mload(add(transcript, 0x1220)), f_q))mstore(add(transcript, 0x2980), addmod(mload(add(transcript, 0x2920)), mload(add(transcript, 0x2960)), f_q))mstore(add(transcript, 0x29a0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2980)), f_q))mstore(add(transcript, 0x29c0), mulmod(mload(add(transcript, 0x960)), mload(add(transcript, 0x960)), f_q))mstore(add(transcript, 0x29e0), addmod(mload(add(transcript, 0x29c0)), sub(f_q, mload(add(transcript, 0x960))), f_q))mstore(add(transcript, 0x2a00), mulmod(mload(add(transcript, 0x29e0)), mload(add(transcript, 0x1160)), f_q))mstore(add(transcript, 0x2a20), addmod(mload(add(transcript, 0x29a0)), mload(add(transcript, 0x2a00)), f_q))mstore(add(transcript, 0x2a40), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2a20)), f_q))mstore(add(transcript, 0x2a60), addmod(mload(add(transcript, 0x9a0)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2a80), mulmod(mload(add(transcript, 0x2a60)), mload(add(transcript, 0x980)), f_q))mstore(add(transcript, 0x2aa0), addmod(mload(add(transcript, 0x9e0)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2ac0), mulmod(mload(add(transcript, 0x2aa0)), mload(add(transcript, 0x2a80)), f_q))mstore(add(transcript, 0x2ae0), mulmod(256, mload(add(transcript, 0x6c0)), f_q))mstore(add(transcript, 0x2b00), addmod(mload(add(transcript, 0x660)), sub(f_q, mload(add(transcript, 0x2ae0))), f_q))mstore(add(transcript, 0x2b20), mulmod(mload(add(transcript, 0x2b00)), mload(add(transcript, 0x760)), f_q))mstore(add(transcript, 0x2b40), addmod(mload(add(transcript, 0x2b20)), mload(add(transcript, 0x240)), f_q))mstore(add(transcript, 0x2b60), mulmod(mload(add(transcript, 0x2b40)), mload(add(transcript, 0x960)), f_q))mstore(add(transcript, 0x2b80), addmod(mload(add(transcript, 0x720)), mload(add(transcript, 0x2a0)), f_q))mstore(add(transcript, 0x2ba0), mulmod(mload(add(transcript, 0x2b80)), mload(add(transcript, 0x2b60)), f_q))mstore(add(transcript, 0x2bc0), addmod(mload(add(transcript, 0x2ac0)), sub(f_q, mload(add(transcript, 0x2ba0))), f_q))mstore(add(transcript, 0x2be0), mulmod(mload(add(transcript, 0x2bc0)), mload(add(transcript, 0x2160)), f_q))mstore(add(transcript, 0x2c00), addmod(mload(add(transcript, 0x2a40)), mload(add(transcript, 0x2be0)), f_q))mstore(add(transcript, 0x2c20), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2c00)), f_q))mstore(add(transcript, 0x2c40), addmod(mload(add(transcript, 0x9a0)), sub(f_q, mload(add(transcript, 0x9e0))), f_q))mstore(add(transcript, 0x2c60), mulmod(mload(add(transcript, 0x2c40)), mload(add(transcript, 0x1220)), f_q))mstore(add(transcript, 0x2c80), addmod(mload(add(transcript, 0x2c20)), mload(add(transcript, 0x2c60)), f_q))mstore(add(transcript, 0x2ca0), mulmod(mload(add(transcript, 0x400)), mload(add(transcript, 0x2c80)), f_q))mstore(add(transcript, 0x2cc0), mulmod(mload(add(transcript, 0x2c40)), mload(add(transcript, 0x2160)), f_q))mstore(add(transcript, 0x2ce0), addmod(mload(add(transcript, 0x9a0)), sub(f_q, mload(add(transcript, 0x9c0))), f_q))mstore(add(transcript, 0x2d00), mulmod(mload(add(transcript, 0x2ce0)), mload(add(transcript, 0x2cc0)), f_q))mstore(add(transcript, 0x2d20), addmod(mload(add(transcript, 0x2ca0)), mload(add(transcript, 0x2d00)), f_q))mstore(add(transcript, 0x2d40), mulmod(mload(add(transcript, 0xcc0)), mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0x2d60), mulmod(mload(add(transcript, 0x2d40)), mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0x2d80), mulmod(mload(add(transcript, 0x2d60)), mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0x2da0), mulmod(mload(add(transcript, 0x2d80)), mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0x2dc0), mulmod(1, mload(add(transcript, 0xcc0)), f_q))mstore(add(transcript, 0x2de0), mulmod(1, mload(add(transcript, 0x2d40)), f_q))mstore(add(transcript, 0x2e00), mulmod(1, mload(add(transcript, 0x2d60)), f_q))mstore(add(transcript, 0x2e20), mulmod(1, mload(add(transcript, 0x2d80)), f_q))mstore(add(transcript, 0x2e40), mulmod(mload(add(transcript, 0x2d20)), mload(add(transcript, 0xce0)), f_q))mstore(add(transcript, 0x2e60), mulmod(mload(add(transcript, 0xba0)), mload(add(transcript, 0x5a0)), f_q))mstore(add(transcript, 0x2e80), mulmod(mload(add(transcript, 0x5a0)), 1, f_q))mstore(add(transcript, 0x2ea0), addmod(mload(add(transcript, 0xb20)), sub(f_q, mload(add(transcript, 0x2e80))), f_q))mstore(add(transcript, 0x2ec0), mulmod(mload(add(transcript, 0x5a0)), 4925592601992654644734291590386747644864797672605745962807370354577123815907, f_q))mstore(add(transcript, 0x2ee0), addmod(mload(add(transcript, 0xb20)), sub(f_q, mload(add(transcript, 0x2ec0))), f_q))mstore(add(transcript, 0x2f00), mulmod(mload(add(transcript, 0x5a0)), 9936069627611189518829255670237324269287146421271524553312532036927871056678, f_q))mstore(add(transcript, 0x2f20), addmod(mload(add(transcript, 0xb20)), sub(f_q, mload(add(transcript, 0x2f00))), f_q))mstore(add(transcript, 0x2f40), mulmod(mload(add(transcript, 0x5a0)), 19380560087801265747114831706136320509424814679569278834391540198888293317501, f_q))mstore(add(transcript, 0x2f60), addmod(mload(add(transcript, 0xb20)), sub(f_q, mload(add(transcript, 0x2f40))), f_q)){ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 19470333053884630052643688193991482022807116448657043890197497819686199857828, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 2417909817954645169602717551265793065741247951758990453500706366889608637789, f_q), f_q), result, f_q)mstore(add(transcript, 0x2f80), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 13686227242150003628673578706486473027501243666075718775893288845164412632930, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 10079503758141076467065204586507257535549232608832327988764044976944819876346, f_q), f_q), result, f_q)mstore(add(transcript, 0x2fa0), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 18715936898160381416714524359517348601997944075114713669820885373469568354766, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 15375775075249615866494035504844970190233299190010037655541891534730124992278, f_q), f_q), result, f_q)mstore(add(transcript, 0x2fc0), result) }mstore(add(transcript, 0x2fe0), mulmod(1, mload(add(transcript, 0x2ea0)), f_q))mstore(add(transcript, 0x3000), mulmod(mload(add(transcript, 0x2fe0)), mload(add(transcript, 0x2f60)), f_q))mstore(add(transcript, 0x3020), mulmod(mload(add(transcript, 0x3000)), mload(add(transcript, 0x2ee0)), f_q)){ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0x5a0)), 2507682784038009475131574039120954579123549720846755509306663987687515178117, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0x5a0)), 19380560087801265747114831706136320509424814679569278834391540198888293317500, f_q), f_q), result, f_q)mstore(add(transcript, 0x3040), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0x5a0)), 19380560087801265747114831706136320509424814679569278834391540198888293317500, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0x5a0)), 13127608231681926238307118629157549705911918406946061530612285695988519678593, f_q), f_q), result, f_q)mstore(add(transcript, 0x3060), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 16140595808673403009154643164823336476463527776677864878778453135559733237044, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 5747647063165872213091762580433938612084836623738169464919751051016075258573, f_q), f_q), result, f_q)mstore(add(transcript, 0x3080), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 17015964487361230672162623735654618573844832338054897787312333529290879253714, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 3176732791729641355588945816447819802711920387939493967460175841862547409845, f_q), f_q), result, f_q)mstore(add(transcript, 0x30a0), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0xba0)), 19187508498431587163140984396833674282302409422288044257471288693049179355069, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0xba0)), 17472297497993506786357772047295541913219081564856233764575529621311665103799, f_q), f_q), result, f_q)mstore(add(transcript, 0x30c0), result) }mstore(add(transcript, 0x30e0), mulmod(mload(add(transcript, 0x3000)), mload(add(transcript, 0x2f20)), f_q)){ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0x5a0)), 16962650269846620577512114154870527443683566727810288380890833831998684679711, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0x5a0)), 4925592601992654644734291590386747644864797672605745962807370354577123815906, f_q), f_q), result, f_q)mstore(add(transcript, 0x3100), result) }{ let result := mulmod(mload(add(transcript, 0xb20)), mulmod(mload(add(transcript, 0x5a0)), 4925592601992654644734291590386747644864797672605745962807370354577123815906, f_q), f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), mulmod(mload(add(transcript, 0x5a0)), 664623189640884330400307346618971907426870604454565164570654825418724962734, f_q), f_q), result, f_q)mstore(add(transcript, 0x3120), result) }mstore(add(transcript, 0x3140), mulmod(mload(add(transcript, 0x2fe0)), mload(add(transcript, 0x2ee0)), f_q)){ let result := mulmod(mload(add(transcript, 0xb20)), 1, f_q)result := addmod(mulmod(mload(add(transcript, 0x5a0)), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q), result, f_q)mstore(add(transcript, 0x3160), result) }{ let prod := mload(add(transcript, 0x2f80)) prod := mulmod(mload(add(transcript, 0x2fa0)), prod, f_q) mstore(add(transcript, 0x3180), prod) prod := mulmod(mload(add(transcript, 0x2fc0)), prod, f_q) mstore(add(transcript, 0x31a0), prod) prod := mulmod(mload(add(transcript, 0x3040)), prod, f_q) mstore(add(transcript, 0x31c0), prod) prod := mulmod(mload(add(transcript, 0x3060)), prod, f_q) mstore(add(transcript, 0x31e0), prod) prod := mulmod(mload(add(transcript, 0x3000)), prod, f_q) mstore(add(transcript, 0x3200), prod) prod := mulmod(mload(add(transcript, 0x3080)), prod, f_q) mstore(add(transcript, 0x3220), prod) prod := mulmod(mload(add(transcript, 0x30a0)), prod, f_q) mstore(add(transcript, 0x3240), prod) prod := mulmod(mload(add(transcript, 0x30c0)), prod, f_q) mstore(add(transcript, 0x3260), prod) prod := mulmod(mload(add(transcript, 0x30e0)), prod, f_q) mstore(add(transcript, 0x3280), prod) prod := mulmod(mload(add(transcript, 0x3100)), prod, f_q) mstore(add(transcript, 0x32a0), prod) prod := mulmod(mload(add(transcript, 0x3120)), prod, f_q) mstore(add(transcript, 0x32c0), prod) prod := mulmod(mload(add(transcript, 0x3140)), prod, f_q) mstore(add(transcript, 0x32e0), prod) prod := mulmod(mload(add(transcript, 0x3160)), prod, f_q) mstore(add(transcript, 0x3300), prod) prod := mulmod(mload(add(transcript, 0x2fe0)), prod, f_q) mstore(add(transcript, 0x3320), prod) }mstore(add(transcript, 0x3360), 32)mstore(add(transcript, 0x3380), 32)mstore(add(transcript, 0x33a0), 32)mstore(add(transcript, 0x33c0), mload(add(transcript, 0x3320)))mstore(add(transcript, 0x33e0), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x3400), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x3360), 0xc0, add(transcript, 0x3340), 0x20), 1), success){ let inv := mload(add(transcript, 0x3340)) let v v := mload(add(transcript, 0x2fe0)) mstore(add(transcript, 0x2fe0), mulmod(mload(add(transcript, 0x3300)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3160)) mstore(add(transcript, 0x3160), mulmod(mload(add(transcript, 0x32e0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3140)) mstore(add(transcript, 0x3140), mulmod(mload(add(transcript, 0x32c0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3120)) mstore(add(transcript, 0x3120), mulmod(mload(add(transcript, 0x32a0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3100)) mstore(add(transcript, 0x3100), mulmod(mload(add(transcript, 0x3280)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x30e0)) mstore(add(transcript, 0x30e0), mulmod(mload(add(transcript, 0x3260)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x30c0)) mstore(add(transcript, 0x30c0), mulmod(mload(add(transcript, 0x3240)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x30a0)) mstore(add(transcript, 0x30a0), mulmod(mload(add(transcript, 0x3220)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3080)) mstore(add(transcript, 0x3080), mulmod(mload(add(transcript, 0x3200)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3000)) mstore(add(transcript, 0x3000), mulmod(mload(add(transcript, 0x31e0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3060)) mstore(add(transcript, 0x3060), mulmod(mload(add(transcript, 0x31c0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3040)) mstore(add(transcript, 0x3040), mulmod(mload(add(transcript, 0x31a0)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x2fc0)) mstore(add(transcript, 0x2fc0), mulmod(mload(add(transcript, 0x3180)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x2fa0)) mstore(add(transcript, 0x2fa0), mulmod(mload(add(transcript, 0x2f80)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0x2f80), inv) }{ let result := mload(add(transcript, 0x2f80))result := addmod(mload(add(transcript, 0x2fa0)), result, f_q)result := addmod(mload(add(transcript, 0x2fc0)), result, f_q)mstore(add(transcript, 0x3420), result) }mstore(add(transcript, 0x3440), mulmod(mload(add(transcript, 0x3020)), mload(add(transcript, 0x3000)), f_q)){ let result := mload(add(transcript, 0x3040))result := addmod(mload(add(transcript, 0x3060)), result, f_q)mstore(add(transcript, 0x3460), result) }mstore(add(transcript, 0x3480), mulmod(mload(add(transcript, 0x3020)), mload(add(transcript, 0x30e0)), f_q)){ let result := mload(add(transcript, 0x3080))result := addmod(mload(add(transcript, 0x30a0)), result, f_q)result := addmod(mload(add(transcript, 0x30c0)), result, f_q)mstore(add(transcript, 0x34a0), result) }mstore(add(transcript, 0x34c0), mulmod(mload(add(transcript, 0x3020)), mload(add(transcript, 0x3140)), f_q)){ let result := mload(add(transcript, 0x3100))result := addmod(mload(add(transcript, 0x3120)), result, f_q)mstore(add(transcript, 0x34e0), result) }mstore(add(transcript, 0x3500), mulmod(mload(add(transcript, 0x3020)), mload(add(transcript, 0x2fe0)), f_q)){ let result := mload(add(transcript, 0x3160))mstore(add(transcript, 0x3520), result) }{ let prod := mload(add(transcript, 0x3420)) prod := mulmod(mload(add(transcript, 0x3460)), prod, f_q) mstore(add(transcript, 0x3540), prod) prod := mulmod(mload(add(transcript, 0x34a0)), prod, f_q) mstore(add(transcript, 0x3560), prod) prod := mulmod(mload(add(transcript, 0x34e0)), prod, f_q) mstore(add(transcript, 0x3580), prod) prod := mulmod(mload(add(transcript, 0x3520)), prod, f_q) mstore(add(transcript, 0x35a0), prod) }mstore(add(transcript, 0x35e0), 32)mstore(add(transcript, 0x3600), 32)mstore(add(transcript, 0x3620), 32)mstore(add(transcript, 0x3640), mload(add(transcript, 0x35a0)))mstore(add(transcript, 0x3660), 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(add(transcript, 0x3680), 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, add(transcript, 0x35e0), 0xc0, add(transcript, 0x35c0), 0x20), 1), success){ let inv := mload(add(transcript, 0x35c0)) let v v := mload(add(transcript, 0x3520)) mstore(add(transcript, 0x3520), mulmod(mload(add(transcript, 0x3580)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x34e0)) mstore(add(transcript, 0x34e0), mulmod(mload(add(transcript, 0x3560)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x34a0)) mstore(add(transcript, 0x34a0), mulmod(mload(add(transcript, 0x3540)), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(add(transcript, 0x3460)) mstore(add(transcript, 0x3460), mulmod(mload(add(transcript, 0x3420)), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(add(transcript, 0x3420), inv) }mstore(add(transcript, 0x36a0), mulmod(mload(add(transcript, 0x3440)), mload(add(transcript, 0x3460)), f_q))mstore(add(transcript, 0x36c0), mulmod(mload(add(transcript, 0x3480)), mload(add(transcript, 0x34a0)), f_q))mstore(add(transcript, 0x36e0), mulmod(mload(add(transcript, 0x34c0)), mload(add(transcript, 0x34e0)), f_q))mstore(add(transcript, 0x3700), mulmod(mload(add(transcript, 0x3500)), mload(add(transcript, 0x3520)), f_q))mstore(add(transcript, 0x3720), mulmod(mload(add(transcript, 0xa20)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3740), mulmod(mload(add(transcript, 0x3720)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3760), mulmod(mload(add(transcript, 0x3740)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3780), mulmod(mload(add(transcript, 0x3760)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x37a0), mulmod(mload(add(transcript, 0x3780)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x37c0), mulmod(mload(add(transcript, 0x37a0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x37e0), mulmod(mload(add(transcript, 0x37c0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3800), mulmod(mload(add(transcript, 0x37e0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3820), mulmod(mload(add(transcript, 0x3800)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3840), mulmod(mload(add(transcript, 0x3820)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3860), mulmod(mload(add(transcript, 0x3840)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3880), mulmod(mload(add(transcript, 0x3860)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x38a0), mulmod(mload(add(transcript, 0x3880)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x38c0), mulmod(mload(add(transcript, 0x38a0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x38e0), mulmod(mload(add(transcript, 0x38c0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3900), mulmod(mload(add(transcript, 0x38e0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3920), mulmod(mload(add(transcript, 0xa80)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3940), mulmod(mload(add(transcript, 0x3920)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3960), mulmod(mload(add(transcript, 0x3940)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3980), mulmod(mload(add(transcript, 0x3960)), mload(add(transcript, 0xa80)), f_q)){ let result := mulmod(mload(add(transcript, 0x5e0)), mload(add(transcript, 0x2f80)), f_q)result := addmod(mulmod(mload(add(transcript, 0x620)), mload(add(transcript, 0x2fa0)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x6a0)), mload(add(transcript, 0x2fc0)), f_q), result, f_q)mstore(add(transcript, 0x39a0), result) }mstore(add(transcript, 0x39c0), mulmod(mload(add(transcript, 0x39a0)), mload(add(transcript, 0x3420)), f_q))mstore(add(transcript, 0x39e0), mulmod(sub(f_q, mload(add(transcript, 0x39c0))), 1, f_q)){ let result := mulmod(mload(add(transcript, 0x600)), mload(add(transcript, 0x2f80)), f_q)result := addmod(mulmod(mload(add(transcript, 0x640)), mload(add(transcript, 0x2fa0)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x680)), mload(add(transcript, 0x2fc0)), f_q), result, f_q)mstore(add(transcript, 0x3a00), result) }mstore(add(transcript, 0x3a20), mulmod(mload(add(transcript, 0x3a00)), mload(add(transcript, 0x3420)), f_q))mstore(add(transcript, 0x3a40), mulmod(sub(f_q, mload(add(transcript, 0x3a20))), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3a60), mulmod(1, mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3a80), addmod(mload(add(transcript, 0x39e0)), mload(add(transcript, 0x3a40)), f_q))mstore(add(transcript, 0x3aa0), mulmod(mload(add(transcript, 0x3a80)), 1, f_q))mstore(add(transcript, 0x3ac0), mulmod(mload(add(transcript, 0x3a60)), 1, f_q))mstore(add(transcript, 0x3ae0), mulmod(1, mload(add(transcript, 0x3440)), f_q)){ let result := mulmod(mload(add(transcript, 0x660)), mload(add(transcript, 0x3040)), f_q)result := addmod(mulmod(mload(add(transcript, 0x6c0)), mload(add(transcript, 0x3060)), f_q), result, f_q)mstore(add(transcript, 0x3b00), result) }mstore(add(transcript, 0x3b20), mulmod(mload(add(transcript, 0x3b00)), mload(add(transcript, 0x36a0)), f_q))mstore(add(transcript, 0x3b40), mulmod(sub(f_q, mload(add(transcript, 0x3b20))), 1, f_q))mstore(add(transcript, 0x3b60), mulmod(mload(add(transcript, 0x3ae0)), 1, f_q)){ let result := mulmod(mload(add(transcript, 0x920)), mload(add(transcript, 0x3040)), f_q)result := addmod(mulmod(mload(add(transcript, 0x940)), mload(add(transcript, 0x3060)), f_q), result, f_q)mstore(add(transcript, 0x3b80), result) }mstore(add(transcript, 0x3ba0), mulmod(mload(add(transcript, 0x3b80)), mload(add(transcript, 0x36a0)), f_q))mstore(add(transcript, 0x3bc0), mulmod(sub(f_q, mload(add(transcript, 0x3ba0))), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3be0), mulmod(mload(add(transcript, 0x3ae0)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x3c00), addmod(mload(add(transcript, 0x3b40)), mload(add(transcript, 0x3bc0)), f_q)){ let result := mulmod(mload(add(transcript, 0x960)), mload(add(transcript, 0x3040)), f_q)result := addmod(mulmod(mload(add(transcript, 0x980)), mload(add(transcript, 0x3060)), f_q), result, f_q)mstore(add(transcript, 0x3c20), result) }mstore(add(transcript, 0x3c40), mulmod(mload(add(transcript, 0x3c20)), mload(add(transcript, 0x36a0)), f_q))mstore(add(transcript, 0x3c60), mulmod(sub(f_q, mload(add(transcript, 0x3c40))), mload(add(transcript, 0x3720)), f_q))mstore(add(transcript, 0x3c80), mulmod(mload(add(transcript, 0x3ae0)), mload(add(transcript, 0x3720)), f_q))mstore(add(transcript, 0x3ca0), addmod(mload(add(transcript, 0x3c00)), mload(add(transcript, 0x3c60)), f_q))mstore(add(transcript, 0x3cc0), mulmod(mload(add(transcript, 0x3ca0)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3ce0), mulmod(mload(add(transcript, 0x3b60)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3d00), mulmod(mload(add(transcript, 0x3be0)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3d20), mulmod(mload(add(transcript, 0x3c80)), mload(add(transcript, 0xa80)), f_q))mstore(add(transcript, 0x3d40), addmod(mload(add(transcript, 0x3aa0)), mload(add(transcript, 0x3cc0)), f_q))mstore(add(transcript, 0x3d60), mulmod(1, mload(add(transcript, 0x3480)), f_q)){ let result := mulmod(mload(add(transcript, 0x8c0)), mload(add(transcript, 0x3080)), f_q)result := addmod(mulmod(mload(add(transcript, 0x8e0)), mload(add(transcript, 0x30a0)), f_q), result, f_q)result := addmod(mulmod(mload(add(transcript, 0x900)), mload(add(transcript, 0x30c0)), f_q), result, f_q)mstore(add(transcript, 0x3d80), result) }mstore(add(transcript, 0x3da0), mulmod(mload(add(transcript, 0x3d80)), mload(add(transcript, 0x36c0)), f_q))mstore(add(transcript, 0x3dc0), mulmod(sub(f_q, mload(add(transcript, 0x3da0))), 1, f_q))mstore(add(transcript, 0x3de0), mulmod(mload(add(transcript, 0x3d60)), 1, f_q))mstore(add(transcript, 0x3e00), mulmod(mload(add(transcript, 0x3dc0)), mload(add(transcript, 0x3920)), f_q))mstore(add(transcript, 0x3e20), mulmod(mload(add(transcript, 0x3de0)), mload(add(transcript, 0x3920)), f_q))mstore(add(transcript, 0x3e40), addmod(mload(add(transcript, 0x3d40)), mload(add(transcript, 0x3e00)), f_q))mstore(add(transcript, 0x3e60), mulmod(1, mload(add(transcript, 0x34c0)), f_q)){ let result := mulmod(mload(add(transcript, 0x9a0)), mload(add(transcript, 0x3100)), f_q)result := addmod(mulmod(mload(add(transcript, 0x9c0)), mload(add(transcript, 0x3120)), f_q), result, f_q)mstore(add(transcript, 0x3e80), result) }mstore(add(transcript, 0x3ea0), mulmod(mload(add(transcript, 0x3e80)), mload(add(transcript, 0x36e0)), f_q))mstore(add(transcript, 0x3ec0), mulmod(sub(f_q, mload(add(transcript, 0x3ea0))), 1, f_q))mstore(add(transcript, 0x3ee0), mulmod(mload(add(transcript, 0x3e60)), 1, f_q))mstore(add(transcript, 0x3f00), mulmod(mload(add(transcript, 0x3ec0)), mload(add(transcript, 0x3940)), f_q))mstore(add(transcript, 0x3f20), mulmod(mload(add(transcript, 0x3ee0)), mload(add(transcript, 0x3940)), f_q))mstore(add(transcript, 0x3f40), addmod(mload(add(transcript, 0x3e40)), mload(add(transcript, 0x3f00)), f_q))mstore(add(transcript, 0x3f60), mulmod(1, mload(add(transcript, 0x3500)), f_q)){ let result := mulmod(mload(add(transcript, 0x9e0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x3f80), result) }mstore(add(transcript, 0x3fa0), mulmod(mload(add(transcript, 0x3f80)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x3fc0), mulmod(sub(f_q, mload(add(transcript, 0x3fa0))), 1, f_q))mstore(add(transcript, 0x3fe0), mulmod(mload(add(transcript, 0x3f60)), 1, f_q)){ let result := mulmod(mload(add(transcript, 0x6e0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4000), result) }mstore(add(transcript, 0x4020), mulmod(mload(add(transcript, 0x4000)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4040), mulmod(sub(f_q, mload(add(transcript, 0x4020))), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x4060), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0xa20)), f_q))mstore(add(transcript, 0x4080), addmod(mload(add(transcript, 0x3fc0)), mload(add(transcript, 0x4040)), f_q)){ let result := mulmod(mload(add(transcript, 0x700)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x40a0), result) }mstore(add(transcript, 0x40c0), mulmod(mload(add(transcript, 0x40a0)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x40e0), mulmod(sub(f_q, mload(add(transcript, 0x40c0))), mload(add(transcript, 0x3720)), f_q))mstore(add(transcript, 0x4100), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3720)), f_q))mstore(add(transcript, 0x4120), addmod(mload(add(transcript, 0x4080)), mload(add(transcript, 0x40e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x720)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4140), result) }mstore(add(transcript, 0x4160), mulmod(mload(add(transcript, 0x4140)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4180), mulmod(sub(f_q, mload(add(transcript, 0x4160))), mload(add(transcript, 0x3740)), f_q))mstore(add(transcript, 0x41a0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3740)), f_q))mstore(add(transcript, 0x41c0), addmod(mload(add(transcript, 0x4120)), mload(add(transcript, 0x4180)), f_q)){ let result := mulmod(mload(add(transcript, 0x740)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x41e0), result) }mstore(add(transcript, 0x4200), mulmod(mload(add(transcript, 0x41e0)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4220), mulmod(sub(f_q, mload(add(transcript, 0x4200))), mload(add(transcript, 0x3760)), f_q))mstore(add(transcript, 0x4240), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3760)), f_q))mstore(add(transcript, 0x4260), addmod(mload(add(transcript, 0x41c0)), mload(add(transcript, 0x4220)), f_q)){ let result := mulmod(mload(add(transcript, 0x760)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4280), result) }mstore(add(transcript, 0x42a0), mulmod(mload(add(transcript, 0x4280)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x42c0), mulmod(sub(f_q, mload(add(transcript, 0x42a0))), mload(add(transcript, 0x3780)), f_q))mstore(add(transcript, 0x42e0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3780)), f_q))mstore(add(transcript, 0x4300), addmod(mload(add(transcript, 0x4260)), mload(add(transcript, 0x42c0)), f_q)){ let result := mulmod(mload(add(transcript, 0x780)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4320), result) }mstore(add(transcript, 0x4340), mulmod(mload(add(transcript, 0x4320)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4360), mulmod(sub(f_q, mload(add(transcript, 0x4340))), mload(add(transcript, 0x37a0)), f_q))mstore(add(transcript, 0x4380), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x37a0)), f_q))mstore(add(transcript, 0x43a0), addmod(mload(add(transcript, 0x4300)), mload(add(transcript, 0x4360)), f_q)){ let result := mulmod(mload(add(transcript, 0x7a0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x43c0), result) }mstore(add(transcript, 0x43e0), mulmod(mload(add(transcript, 0x43c0)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4400), mulmod(sub(f_q, mload(add(transcript, 0x43e0))), mload(add(transcript, 0x37c0)), f_q))mstore(add(transcript, 0x4420), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x37c0)), f_q))mstore(add(transcript, 0x4440), addmod(mload(add(transcript, 0x43a0)), mload(add(transcript, 0x4400)), f_q)){ let result := mulmod(mload(add(transcript, 0x7c0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4460), result) }mstore(add(transcript, 0x4480), mulmod(mload(add(transcript, 0x4460)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x44a0), mulmod(sub(f_q, mload(add(transcript, 0x4480))), mload(add(transcript, 0x37e0)), f_q))mstore(add(transcript, 0x44c0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x37e0)), f_q))mstore(add(transcript, 0x44e0), addmod(mload(add(transcript, 0x4440)), mload(add(transcript, 0x44a0)), f_q)){ let result := mulmod(mload(add(transcript, 0x800)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4500), result) }mstore(add(transcript, 0x4520), mulmod(mload(add(transcript, 0x4500)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4540), mulmod(sub(f_q, mload(add(transcript, 0x4520))), mload(add(transcript, 0x3800)), f_q))mstore(add(transcript, 0x4560), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3800)), f_q))mstore(add(transcript, 0x4580), addmod(mload(add(transcript, 0x44e0)), mload(add(transcript, 0x4540)), f_q)){ let result := mulmod(mload(add(transcript, 0x820)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x45a0), result) }mstore(add(transcript, 0x45c0), mulmod(mload(add(transcript, 0x45a0)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x45e0), mulmod(sub(f_q, mload(add(transcript, 0x45c0))), mload(add(transcript, 0x3820)), f_q))mstore(add(transcript, 0x4600), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3820)), f_q))mstore(add(transcript, 0x4620), addmod(mload(add(transcript, 0x4580)), mload(add(transcript, 0x45e0)), f_q)){ let result := mulmod(mload(add(transcript, 0x840)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4640), result) }mstore(add(transcript, 0x4660), mulmod(mload(add(transcript, 0x4640)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4680), mulmod(sub(f_q, mload(add(transcript, 0x4660))), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x46a0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3840)), f_q))mstore(add(transcript, 0x46c0), addmod(mload(add(transcript, 0x4620)), mload(add(transcript, 0x4680)), f_q)){ let result := mulmod(mload(add(transcript, 0x860)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x46e0), result) }mstore(add(transcript, 0x4700), mulmod(mload(add(transcript, 0x46e0)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4720), mulmod(sub(f_q, mload(add(transcript, 0x4700))), mload(add(transcript, 0x3860)), f_q))mstore(add(transcript, 0x4740), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3860)), f_q))mstore(add(transcript, 0x4760), addmod(mload(add(transcript, 0x46c0)), mload(add(transcript, 0x4720)), f_q)){ let result := mulmod(mload(add(transcript, 0x880)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4780), result) }mstore(add(transcript, 0x47a0), mulmod(mload(add(transcript, 0x4780)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x47c0), mulmod(sub(f_q, mload(add(transcript, 0x47a0))), mload(add(transcript, 0x3880)), f_q))mstore(add(transcript, 0x47e0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x3880)), f_q))mstore(add(transcript, 0x4800), addmod(mload(add(transcript, 0x4760)), mload(add(transcript, 0x47c0)), f_q)){ let result := mulmod(mload(add(transcript, 0x8a0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4820), result) }mstore(add(transcript, 0x4840), mulmod(mload(add(transcript, 0x4820)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4860), mulmod(sub(f_q, mload(add(transcript, 0x4840))), mload(add(transcript, 0x38a0)), f_q))mstore(add(transcript, 0x4880), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x38a0)), f_q))mstore(add(transcript, 0x48a0), addmod(mload(add(transcript, 0x4800)), mload(add(transcript, 0x4860)), f_q))mstore(add(transcript, 0x48c0), mulmod(mload(add(transcript, 0x2dc0)), mload(add(transcript, 0x3500)), f_q))mstore(add(transcript, 0x48e0), mulmod(mload(add(transcript, 0x2de0)), mload(add(transcript, 0x3500)), f_q))mstore(add(transcript, 0x4900), mulmod(mload(add(transcript, 0x2e00)), mload(add(transcript, 0x3500)), f_q))mstore(add(transcript, 0x4920), mulmod(mload(add(transcript, 0x2e20)), mload(add(transcript, 0x3500)), f_q)){ let result := mulmod(mload(add(transcript, 0x2e40)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4940), result) }mstore(add(transcript, 0x4960), mulmod(mload(add(transcript, 0x4940)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4980), mulmod(sub(f_q, mload(add(transcript, 0x4960))), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x49a0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x49c0), mulmod(mload(add(transcript, 0x48c0)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x49e0), mulmod(mload(add(transcript, 0x48e0)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x4a00), mulmod(mload(add(transcript, 0x4900)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x4a20), mulmod(mload(add(transcript, 0x4920)), mload(add(transcript, 0x38c0)), f_q))mstore(add(transcript, 0x4a40), addmod(mload(add(transcript, 0x48a0)), mload(add(transcript, 0x4980)), f_q)){ let result := mulmod(mload(add(transcript, 0x7e0)), mload(add(transcript, 0x3160)), f_q)mstore(add(transcript, 0x4a60), result) }mstore(add(transcript, 0x4a80), mulmod(mload(add(transcript, 0x4a60)), mload(add(transcript, 0x3700)), f_q))mstore(add(transcript, 0x4aa0), mulmod(sub(f_q, mload(add(transcript, 0x4a80))), mload(add(transcript, 0x38e0)), f_q))mstore(add(transcript, 0x4ac0), mulmod(mload(add(transcript, 0x3f60)), mload(add(transcript, 0x38e0)), f_q))mstore(add(transcript, 0x4ae0), addmod(mload(add(transcript, 0x4a40)), mload(add(transcript, 0x4aa0)), f_q))mstore(add(transcript, 0x4b00), mulmod(mload(add(transcript, 0x4ae0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4b20), mulmod(mload(add(transcript, 0x3fe0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4b40), mulmod(mload(add(transcript, 0x4060)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4b60), mulmod(mload(add(transcript, 0x4100)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4b80), mulmod(mload(add(transcript, 0x41a0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4ba0), mulmod(mload(add(transcript, 0x4240)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4bc0), mulmod(mload(add(transcript, 0x42e0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4be0), mulmod(mload(add(transcript, 0x4380)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4c00), mulmod(mload(add(transcript, 0x4420)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4c20), mulmod(mload(add(transcript, 0x44c0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4c40), mulmod(mload(add(transcript, 0x4560)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4c60), mulmod(mload(add(transcript, 0x4600)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4c80), mulmod(mload(add(transcript, 0x46a0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4ca0), mulmod(mload(add(transcript, 0x4740)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4cc0), mulmod(mload(add(transcript, 0x47e0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4ce0), mulmod(mload(add(transcript, 0x4880)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4d00), mulmod(mload(add(transcript, 0x49a0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4d20), mulmod(mload(add(transcript, 0x49c0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4d40), mulmod(mload(add(transcript, 0x49e0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4d60), mulmod(mload(add(transcript, 0x4a00)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4d80), mulmod(mload(add(transcript, 0x4a20)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4da0), mulmod(mload(add(transcript, 0x4ac0)), mload(add(transcript, 0x3960)), f_q))mstore(add(transcript, 0x4dc0), addmod(mload(add(transcript, 0x3f40)), mload(add(transcript, 0x4b00)), f_q))mstore(add(transcript, 0x4de0), mulmod(1, mload(add(transcript, 0x3020)), f_q))mstore(add(transcript, 0x4e00), mulmod(1, mload(add(transcript, 0xb20)), f_q))mstore(add(transcript, 0x4e20), 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(add(transcript, 0x4e40), 0x0000000000000000000000000000000000000000000000000000000000000002)mstore(add(transcript, 0x4e60), mload(add(transcript, 0x4dc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x4e20), 0x60, add(transcript, 0x4e20), 0x40), 1), success)mstore(add(transcript, 0x4e80), mload(add(transcript, 0x4e20))) mstore(add(transcript, 0x4ea0), mload(add(transcript, 0x4e40)))mstore(add(transcript, 0x4ec0), mload(add(transcript, 0x80))) mstore(add(transcript, 0x4ee0), mload(add(transcript, 0xa0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x4e80), 0x80, add(transcript, 0x4e80), 0x40), 1), success)mstore(add(transcript, 0x4f00), mload(add(transcript, 0xc0))) mstore(add(transcript, 0x4f20), mload(add(transcript, 0xe0)))mstore(add(transcript, 0x4f40), mload(add(transcript, 0x3ac0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x4f00), 0x60, add(transcript, 0x4f00), 0x40), 1), success)mstore(add(transcript, 0x4f60), mload(add(transcript, 0x4e80))) mstore(add(transcript, 0x4f80), mload(add(transcript, 0x4ea0)))mstore(add(transcript, 0x4fa0), mload(add(transcript, 0x4f00))) mstore(add(transcript, 0x4fc0), mload(add(transcript, 0x4f20)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x4f60), 0x80, add(transcript, 0x4f60), 0x40), 1), success)mstore(add(transcript, 0x4fe0), mload(add(transcript, 0x100))) mstore(add(transcript, 0x5000), mload(add(transcript, 0x120)))mstore(add(transcript, 0x5020), mload(add(transcript, 0x3ce0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x4fe0), 0x60, add(transcript, 0x4fe0), 0x40), 1), success)mstore(add(transcript, 0x5040), mload(add(transcript, 0x4f60))) mstore(add(transcript, 0x5060), mload(add(transcript, 0x4f80)))mstore(add(transcript, 0x5080), mload(add(transcript, 0x4fe0))) mstore(add(transcript, 0x50a0), mload(add(transcript, 0x5000)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5040), 0x80, add(transcript, 0x5040), 0x40), 1), success)mstore(add(transcript, 0x50c0), mload(add(transcript, 0x320))) mstore(add(transcript, 0x50e0), mload(add(transcript, 0x340)))mstore(add(transcript, 0x5100), mload(add(transcript, 0x3d00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x50c0), 0x60, add(transcript, 0x50c0), 0x40), 1), success)mstore(add(transcript, 0x5120), mload(add(transcript, 0x5040))) mstore(add(transcript, 0x5140), mload(add(transcript, 0x5060)))mstore(add(transcript, 0x5160), mload(add(transcript, 0x50c0))) mstore(add(transcript, 0x5180), mload(add(transcript, 0x50e0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5120), 0x80, add(transcript, 0x5120), 0x40), 1), success)mstore(add(transcript, 0x51a0), mload(add(transcript, 0x360))) mstore(add(transcript, 0x51c0), mload(add(transcript, 0x380)))mstore(add(transcript, 0x51e0), mload(add(transcript, 0x3d20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x51a0), 0x60, add(transcript, 0x51a0), 0x40), 1), success)mstore(add(transcript, 0x5200), mload(add(transcript, 0x5120))) mstore(add(transcript, 0x5220), mload(add(transcript, 0x5140)))mstore(add(transcript, 0x5240), mload(add(transcript, 0x51a0))) mstore(add(transcript, 0x5260), mload(add(transcript, 0x51c0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5200), 0x80, add(transcript, 0x5200), 0x40), 1), success)mstore(add(transcript, 0x5280), mload(add(transcript, 0x2e0))) mstore(add(transcript, 0x52a0), mload(add(transcript, 0x300)))mstore(add(transcript, 0x52c0), mload(add(transcript, 0x3e20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5280), 0x60, add(transcript, 0x5280), 0x40), 1), success)mstore(add(transcript, 0x52e0), mload(add(transcript, 0x5200))) mstore(add(transcript, 0x5300), mload(add(transcript, 0x5220)))mstore(add(transcript, 0x5320), mload(add(transcript, 0x5280))) mstore(add(transcript, 0x5340), mload(add(transcript, 0x52a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x52e0), 0x80, add(transcript, 0x52e0), 0x40), 1), success)mstore(add(transcript, 0x5360), mload(add(transcript, 0x1a0))) mstore(add(transcript, 0x5380), mload(add(transcript, 0x1c0)))mstore(add(transcript, 0x53a0), mload(add(transcript, 0x3f20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5360), 0x60, add(transcript, 0x5360), 0x40), 1), success)mstore(add(transcript, 0x53c0), mload(add(transcript, 0x52e0))) mstore(add(transcript, 0x53e0), mload(add(transcript, 0x5300)))mstore(add(transcript, 0x5400), mload(add(transcript, 0x5360))) mstore(add(transcript, 0x5420), mload(add(transcript, 0x5380)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x53c0), 0x80, add(transcript, 0x53c0), 0x40), 1), success)mstore(add(transcript, 0x5440), mload(add(transcript, 0x1e0))) mstore(add(transcript, 0x5460), mload(add(transcript, 0x200)))mstore(add(transcript, 0x5480), mload(add(transcript, 0x4b20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5440), 0x60, add(transcript, 0x5440), 0x40), 1), success)mstore(add(transcript, 0x54a0), mload(add(transcript, 0x53c0))) mstore(add(transcript, 0x54c0), mload(add(transcript, 0x53e0)))mstore(add(transcript, 0x54e0), mload(add(transcript, 0x5440))) mstore(add(transcript, 0x5500), mload(add(transcript, 0x5460)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x54a0), 0x80, add(transcript, 0x54a0), 0x40), 1), success)mstore(add(transcript, 0x5520), 0x2f76bb5b87a6969c4ebb851bb10df173a462316bec33392c426c2f2b3a23f18b) mstore(add(transcript, 0x5540), 0x1128e4c8af582c69c209db87ec18fa85466ea71b7198f6d8c79083103261fec3)mstore(add(transcript, 0x5560), mload(add(transcript, 0x4b40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5520), 0x60, add(transcript, 0x5520), 0x40), 1), success)mstore(add(transcript, 0x5580), mload(add(transcript, 0x54a0))) mstore(add(transcript, 0x55a0), mload(add(transcript, 0x54c0)))mstore(add(transcript, 0x55c0), mload(add(transcript, 0x5520))) mstore(add(transcript, 0x55e0), mload(add(transcript, 0x5540)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5580), 0x80, add(transcript, 0x5580), 0x40), 1), success)mstore(add(transcript, 0x5600), 0x133492493eb62499c1ba03a8715f8d07e78490f157ef603bdfbafb396a1bdcbf) mstore(add(transcript, 0x5620), 0x079b0b5d58e739eea6bdfe4092e232bacee0d027bd0f5186c22977bfd24620d7)mstore(add(transcript, 0x5640), mload(add(transcript, 0x4b60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5600), 0x60, add(transcript, 0x5600), 0x40), 1), success)mstore(add(transcript, 0x5660), mload(add(transcript, 0x5580))) mstore(add(transcript, 0x5680), mload(add(transcript, 0x55a0)))mstore(add(transcript, 0x56a0), mload(add(transcript, 0x5600))) mstore(add(transcript, 0x56c0), mload(add(transcript, 0x5620)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5660), 0x80, add(transcript, 0x5660), 0x40), 1), success)mstore(add(transcript, 0x56e0), 0x187bddea7dbe1c5acd2e01afadc1c0df38180c00ab7439352151b7e801502a0b) mstore(add(transcript, 0x5700), 0x0fc2689a279dba9a368a34988064e5dc4f1cd3f2598bd2a6949e1b1a02d10b76)mstore(add(transcript, 0x5720), mload(add(transcript, 0x4b80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x56e0), 0x60, add(transcript, 0x56e0), 0x40), 1), success)mstore(add(transcript, 0x5740), mload(add(transcript, 0x5660))) mstore(add(transcript, 0x5760), mload(add(transcript, 0x5680)))mstore(add(transcript, 0x5780), mload(add(transcript, 0x56e0))) mstore(add(transcript, 0x57a0), mload(add(transcript, 0x5700)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5740), 0x80, add(transcript, 0x5740), 0x40), 1), success)mstore(add(transcript, 0x57c0), 0x16fbd0af4b59dc890346304d35c999dd8dfad3a06ad8a10f474527fad9ea9c32) mstore(add(transcript, 0x57e0), 0x2ab015bc2b8a19b48338928187638174065562d0a5a83b008546a9e6612ec6c4)mstore(add(transcript, 0x5800), mload(add(transcript, 0x4ba0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x57c0), 0x60, add(transcript, 0x57c0), 0x40), 1), success)mstore(add(transcript, 0x5820), mload(add(transcript, 0x5740))) mstore(add(transcript, 0x5840), mload(add(transcript, 0x5760)))mstore(add(transcript, 0x5860), mload(add(transcript, 0x57c0))) mstore(add(transcript, 0x5880), mload(add(transcript, 0x57e0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5820), 0x80, add(transcript, 0x5820), 0x40), 1), success)mstore(add(transcript, 0x58a0), 0x1dcfb31490b59327642f4b9392465bd8824f732a9e94e46b0bad32b5706087af) mstore(add(transcript, 0x58c0), 0x16b484290b48dce843c6bab1e64e7f45eb424bb17ce605fbcea4650fb021f600)mstore(add(transcript, 0x58e0), mload(add(transcript, 0x4bc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x58a0), 0x60, add(transcript, 0x58a0), 0x40), 1), success)mstore(add(transcript, 0x5900), mload(add(transcript, 0x5820))) mstore(add(transcript, 0x5920), mload(add(transcript, 0x5840)))mstore(add(transcript, 0x5940), mload(add(transcript, 0x58a0))) mstore(add(transcript, 0x5960), mload(add(transcript, 0x58c0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5900), 0x80, add(transcript, 0x5900), 0x40), 1), success)mstore(add(transcript, 0x5980), 0x1eeb3f7b26d5c9871bc2c16a4ed5056dbe613a4bad07a1865e94b5a3f1f46842) mstore(add(transcript, 0x59a0), 0x2226ac7577fc6b41920682f07383ed12ef175ee617888551e764434eda30a02e)mstore(add(transcript, 0x59c0), mload(add(transcript, 0x4be0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5980), 0x60, add(transcript, 0x5980), 0x40), 1), success)mstore(add(transcript, 0x59e0), mload(add(transcript, 0x5900))) mstore(add(transcript, 0x5a00), mload(add(transcript, 0x5920)))mstore(add(transcript, 0x5a20), mload(add(transcript, 0x5980))) mstore(add(transcript, 0x5a40), mload(add(transcript, 0x59a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x59e0), 0x80, add(transcript, 0x59e0), 0x40), 1), success)mstore(add(transcript, 0x5a60), 0x26e3fbd5c5a66607cd8371419cac48be464539f883f1edfaca3c6bf8507a7410) mstore(add(transcript, 0x5a80), 0x08f6e991d52b47307f2f83f267b41f3f3310fa21831988da7ab39054fe2ac53b)mstore(add(transcript, 0x5aa0), mload(add(transcript, 0x4c00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5a60), 0x60, add(transcript, 0x5a60), 0x40), 1), success)mstore(add(transcript, 0x5ac0), mload(add(transcript, 0x59e0))) mstore(add(transcript, 0x5ae0), mload(add(transcript, 0x5a00)))mstore(add(transcript, 0x5b00), mload(add(transcript, 0x5a60))) mstore(add(transcript, 0x5b20), mload(add(transcript, 0x5a80)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5ac0), 0x80, add(transcript, 0x5ac0), 0x40), 1), success)mstore(add(transcript, 0x5b40), 0x1654ed6ee24ad6ebd5c4c2dc0febbb2e92d556bb946f336c7cc1566170f64cdd) mstore(add(transcript, 0x5b60), 0x2e60765d74d1d5c043e2299c4e457312b1358f4e51cdea038ec00ef453f20a09)mstore(add(transcript, 0x5b80), mload(add(transcript, 0x4c20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5b40), 0x60, add(transcript, 0x5b40), 0x40), 1), success)mstore(add(transcript, 0x5ba0), mload(add(transcript, 0x5ac0))) mstore(add(transcript, 0x5bc0), mload(add(transcript, 0x5ae0)))mstore(add(transcript, 0x5be0), mload(add(transcript, 0x5b40))) mstore(add(transcript, 0x5c00), mload(add(transcript, 0x5b60)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5ba0), 0x80, add(transcript, 0x5ba0), 0x40), 1), success)mstore(add(transcript, 0x5c20), 0x23a0c541643962fd3751f386670057a24c2a2966d6f975b8474b1df1df58aec5) mstore(add(transcript, 0x5c40), 0x12adacf7628483c9dd1d014cb00243aa716100680f195d25d59bc85ee7fdf202)mstore(add(transcript, 0x5c60), mload(add(transcript, 0x4c40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5c20), 0x60, add(transcript, 0x5c20), 0x40), 1), success)mstore(add(transcript, 0x5c80), mload(add(transcript, 0x5ba0))) mstore(add(transcript, 0x5ca0), mload(add(transcript, 0x5bc0)))mstore(add(transcript, 0x5cc0), mload(add(transcript, 0x5c20))) mstore(add(transcript, 0x5ce0), mload(add(transcript, 0x5c40)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5c80), 0x80, add(transcript, 0x5c80), 0x40), 1), success)mstore(add(transcript, 0x5d00), 0x19780ae2901b7f5ddedf94c1b53b504977a5181f39a0502c6e86b8378203f22e) mstore(add(transcript, 0x5d20), 0x1f5f311a3d179380fe7cd9e6d14150dc860629541bb2c8f88110e31de91c7bfa)mstore(add(transcript, 0x5d40), mload(add(transcript, 0x4c60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5d00), 0x60, add(transcript, 0x5d00), 0x40), 1), success)mstore(add(transcript, 0x5d60), mload(add(transcript, 0x5c80))) mstore(add(transcript, 0x5d80), mload(add(transcript, 0x5ca0)))mstore(add(transcript, 0x5da0), mload(add(transcript, 0x5d00))) mstore(add(transcript, 0x5dc0), mload(add(transcript, 0x5d20)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5d60), 0x80, add(transcript, 0x5d60), 0x40), 1), success)mstore(add(transcript, 0x5de0), 0x021fa11f2c822b49466f473bc750e172be66ff9df35bc5a393cee59294f42b98) mstore(add(transcript, 0x5e00), 0x2281445678651a0a05ccdbea47bde6e7a6c82e43de0a52a5414fe82995229130)mstore(add(transcript, 0x5e20), mload(add(transcript, 0x4c80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5de0), 0x60, add(transcript, 0x5de0), 0x40), 1), success)mstore(add(transcript, 0x5e40), mload(add(transcript, 0x5d60))) mstore(add(transcript, 0x5e60), mload(add(transcript, 0x5d80)))mstore(add(transcript, 0x5e80), mload(add(transcript, 0x5de0))) mstore(add(transcript, 0x5ea0), mload(add(transcript, 0x5e00)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5e40), 0x80, add(transcript, 0x5e40), 0x40), 1), success)mstore(add(transcript, 0x5ec0), 0x0e67f06b3cd6ad600c3a3b705d3d178c2ea4afa419a60ff56b42774a44f2c151) mstore(add(transcript, 0x5ee0), 0x1cc0dd45b27e99dcba7e4c721c4255ebde7a5b3aea6279859073398d6bf3ba1d)mstore(add(transcript, 0x5f00), mload(add(transcript, 0x4ca0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5ec0), 0x60, add(transcript, 0x5ec0), 0x40), 1), success)mstore(add(transcript, 0x5f20), mload(add(transcript, 0x5e40))) mstore(add(transcript, 0x5f40), mload(add(transcript, 0x5e60)))mstore(add(transcript, 0x5f60), mload(add(transcript, 0x5ec0))) mstore(add(transcript, 0x5f80), mload(add(transcript, 0x5ee0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x5f20), 0x80, add(transcript, 0x5f20), 0x40), 1), success)mstore(add(transcript, 0x5fa0), 0x279c16cd7feb17ed6cfe4ce27f00473872b340ebcae3dfe2c6d8aa97d9602273) mstore(add(transcript, 0x5fc0), 0x0aaffc872c798473df012c13c5185eb7cca39ba51cbf0358a7f5b7903fbde64d)mstore(add(transcript, 0x5fe0), mload(add(transcript, 0x4cc0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x5fa0), 0x60, add(transcript, 0x5fa0), 0x40), 1), success)mstore(add(transcript, 0x6000), mload(add(transcript, 0x5f20))) mstore(add(transcript, 0x6020), mload(add(transcript, 0x5f40)))mstore(add(transcript, 0x6040), mload(add(transcript, 0x5fa0))) mstore(add(transcript, 0x6060), mload(add(transcript, 0x5fc0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6000), 0x80, add(transcript, 0x6000), 0x40), 1), success)mstore(add(transcript, 0x6080), 0x1b711abfd5ca379b0c7a059a3c0a23f8aa6d033158b9bcb922f191cd11a374db) mstore(add(transcript, 0x60a0), 0x2293e4350f716a42b09abf2696b53647b98656e217dfc39071b2207cb348c494)mstore(add(transcript, 0x60c0), mload(add(transcript, 0x4ce0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6080), 0x60, add(transcript, 0x6080), 0x40), 1), success)mstore(add(transcript, 0x60e0), mload(add(transcript, 0x6000))) mstore(add(transcript, 0x6100), mload(add(transcript, 0x6020)))mstore(add(transcript, 0x6120), mload(add(transcript, 0x6080))) mstore(add(transcript, 0x6140), mload(add(transcript, 0x60a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x60e0), 0x80, add(transcript, 0x60e0), 0x40), 1), success)mstore(add(transcript, 0x6160), mload(add(transcript, 0x440))) mstore(add(transcript, 0x6180), mload(add(transcript, 0x460)))mstore(add(transcript, 0x61a0), mload(add(transcript, 0x4d00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6160), 0x60, add(transcript, 0x6160), 0x40), 1), success)mstore(add(transcript, 0x61c0), mload(add(transcript, 0x60e0))) mstore(add(transcript, 0x61e0), mload(add(transcript, 0x6100)))mstore(add(transcript, 0x6200), mload(add(transcript, 0x6160))) mstore(add(transcript, 0x6220), mload(add(transcript, 0x6180)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x61c0), 0x80, add(transcript, 0x61c0), 0x40), 1), success)mstore(add(transcript, 0x6240), mload(add(transcript, 0x480))) mstore(add(transcript, 0x6260), mload(add(transcript, 0x4a0)))mstore(add(transcript, 0x6280), mload(add(transcript, 0x4d20)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6240), 0x60, add(transcript, 0x6240), 0x40), 1), success)mstore(add(transcript, 0x62a0), mload(add(transcript, 0x61c0))) mstore(add(transcript, 0x62c0), mload(add(transcript, 0x61e0)))mstore(add(transcript, 0x62e0), mload(add(transcript, 0x6240))) mstore(add(transcript, 0x6300), mload(add(transcript, 0x6260)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x62a0), 0x80, add(transcript, 0x62a0), 0x40), 1), success)mstore(add(transcript, 0x6320), mload(add(transcript, 0x4c0))) mstore(add(transcript, 0x6340), mload(add(transcript, 0x4e0)))mstore(add(transcript, 0x6360), mload(add(transcript, 0x4d40)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6320), 0x60, add(transcript, 0x6320), 0x40), 1), success)mstore(add(transcript, 0x6380), mload(add(transcript, 0x62a0))) mstore(add(transcript, 0x63a0), mload(add(transcript, 0x62c0)))mstore(add(transcript, 0x63c0), mload(add(transcript, 0x6320))) mstore(add(transcript, 0x63e0), mload(add(transcript, 0x6340)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6380), 0x80, add(transcript, 0x6380), 0x40), 1), success)mstore(add(transcript, 0x6400), mload(add(transcript, 0x500))) mstore(add(transcript, 0x6420), mload(add(transcript, 0x520)))mstore(add(transcript, 0x6440), mload(add(transcript, 0x4d60)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6400), 0x60, add(transcript, 0x6400), 0x40), 1), success)mstore(add(transcript, 0x6460), mload(add(transcript, 0x6380))) mstore(add(transcript, 0x6480), mload(add(transcript, 0x63a0)))mstore(add(transcript, 0x64a0), mload(add(transcript, 0x6400))) mstore(add(transcript, 0x64c0), mload(add(transcript, 0x6420)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6460), 0x80, add(transcript, 0x6460), 0x40), 1), success)mstore(add(transcript, 0x64e0), mload(add(transcript, 0x540))) mstore(add(transcript, 0x6500), mload(add(transcript, 0x560)))mstore(add(transcript, 0x6520), mload(add(transcript, 0x4d80)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x64e0), 0x60, add(transcript, 0x64e0), 0x40), 1), success)mstore(add(transcript, 0x6540), mload(add(transcript, 0x6460))) mstore(add(transcript, 0x6560), mload(add(transcript, 0x6480)))mstore(add(transcript, 0x6580), mload(add(transcript, 0x64e0))) mstore(add(transcript, 0x65a0), mload(add(transcript, 0x6500)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6540), 0x80, add(transcript, 0x6540), 0x40), 1), success)mstore(add(transcript, 0x65c0), mload(add(transcript, 0x3a0))) mstore(add(transcript, 0x65e0), mload(add(transcript, 0x3c0)))mstore(add(transcript, 0x6600), mload(add(transcript, 0x4da0)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x65c0), 0x60, add(transcript, 0x65c0), 0x40), 1), success)mstore(add(transcript, 0x6620), mload(add(transcript, 0x6540))) mstore(add(transcript, 0x6640), mload(add(transcript, 0x6560)))mstore(add(transcript, 0x6660), mload(add(transcript, 0x65c0))) mstore(add(transcript, 0x6680), mload(add(transcript, 0x65e0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6620), 0x80, add(transcript, 0x6620), 0x40), 1), success)mstore(add(transcript, 0x66a0), mload(add(transcript, 0xac0))) mstore(add(transcript, 0x66c0), mload(add(transcript, 0xae0)))mstore(add(transcript, 0x66e0), sub(f_q, mload(add(transcript, 0x4de0))))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x66a0), 0x60, add(transcript, 0x66a0), 0x40), 1), success)mstore(add(transcript, 0x6700), mload(add(transcript, 0x6620))) mstore(add(transcript, 0x6720), mload(add(transcript, 0x6640)))mstore(add(transcript, 0x6740), mload(add(transcript, 0x66a0))) mstore(add(transcript, 0x6760), mload(add(transcript, 0x66c0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x6700), 0x80, add(transcript, 0x6700), 0x40), 1), success)mstore(add(transcript, 0x6780), mload(add(transcript, 0xb60))) mstore(add(transcript, 0x67a0), mload(add(transcript, 0xb80)))mstore(add(transcript, 0x67c0), mload(add(transcript, 0x4e00)))success := and(eq(staticcall(gas(), 0x7, add(transcript, 0x6780), 0x60, add(transcript, 0x6780), 0x40), 1), success)mstore(add(transcript, 0x67e0), mload(add(transcript, 0x6700))) mstore(add(transcript, 0x6800), mload(add(transcript, 0x6720)))mstore(add(transcript, 0x6820), mload(add(transcript, 0x6780))) mstore(add(transcript, 0x6840), mload(add(transcript, 0x67a0)))success := and(eq(staticcall(gas(), 0x6, add(transcript, 0x67e0), 0x80, add(transcript, 0x67e0), 0x40), 1), success)mstore(add(transcript, 0x6860), mload(add(transcript, 0x67e0))) mstore(add(transcript, 0x6880), mload(add(transcript, 0x6800)))mstore(add(transcript, 0x68a0), 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) mstore(add(transcript, 0x68c0), 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) mstore(add(transcript, 0x68e0), 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) mstore(add(transcript, 0x6900), 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa)mstore(add(transcript, 0x6920), mload(add(transcript, 0xb60))) mstore(add(transcript, 0x6940), mload(add(transcript, 0xb80)))mstore(add(transcript, 0x6960), 0x2bda3e3f6913dbd628d5cb2e235040d9902e3f5cd9b5f5669ed765984db32b55) mstore(add(transcript, 0x6980), 0x14f987df3f0b40848192c76a191314d67fb1f2618fba33e163e28ce9e895ab80) mstore(add(transcript, 0x69a0), 0x2b11a57fe3e865318a9cba27a410871987a176b7746acccc7aa6c59c47c9c07b) mstore(add(transcript, 0x69c0), 0x071173db1791499cdfe9b9ca8a89c405cdf9a28e622dc3417b7d3c70882d034f)success := and(eq(staticcall(gas(), 0x8, add(transcript, 0x6860), 0x180, add(transcript, 0x6860), 0x20), 1), success)success := and(eq(mload(add(transcript, 0x6860)), 1), success)} return success; } } diff --git a/contracts/src/SolvencyVerifier.yul b/contracts/src/SolvencyVerifier.yul index ef4acfd6..6984cac0 100644 --- a/contracts/src/SolvencyVerifier.yul +++ b/contracts/src/SolvencyVerifier.yul @@ -34,7 +34,7 @@ mstore(0x20, mod(calldataload(0x0), f_q)) mstore(0x40, mod(calldataload(0x20), f_q)) mstore(0x60, mod(calldataload(0x40), f_q)) -mstore(0x0, 10019076969128440693561739196454840883339425900500712756121228777141389475461) +mstore(0x0, 17670701479603100502823625940353980192460425255394494203384293782765030717197) { let x := calldataload(0x60) @@ -1197,8 +1197,8 @@ mstore(0x54a0, mload(0x53c0)) mstore(0x54e0, mload(0x5440)) mstore(0x5500, mload(0x5460)) success := and(eq(staticcall(gas(), 0x6, 0x54a0, 0x80, 0x54a0, 0x40), 1), success) -mstore(0x5520, 0x07da112d9d1619e15dc5963b63e21f1b5690a96ec64a50b61e71526223987516) - mstore(0x5540, 0x1bd864cde2c40ad753c9196372d23b4f5e3d0056bac48fe99c665f98ba6b82bf) +mstore(0x5520, 0x2f76bb5b87a6969c4ebb851bb10df173a462316bec33392c426c2f2b3a23f18b) + mstore(0x5540, 0x1128e4c8af582c69c209db87ec18fa85466ea71b7198f6d8c79083103261fec3) mstore(0x5560, mload(0x4b40)) success := and(eq(staticcall(gas(), 0x7, 0x5520, 0x60, 0x5520, 0x40), 1), success) mstore(0x5580, mload(0x54a0)) @@ -1206,8 +1206,8 @@ mstore(0x5580, mload(0x54a0)) mstore(0x55c0, mload(0x5520)) mstore(0x55e0, mload(0x5540)) success := and(eq(staticcall(gas(), 0x6, 0x5580, 0x80, 0x5580, 0x40), 1), success) -mstore(0x5600, 0x18ade563194fd8e50151f082c39e7130b67343136a7f5692fbd36d1dff7c3cbb) - mstore(0x5620, 0x2e43b8cec89aabd908d49017ae7779040a4f58e18473710e468b30c267f32031) +mstore(0x5600, 0x133492493eb62499c1ba03a8715f8d07e78490f157ef603bdfbafb396a1bdcbf) + mstore(0x5620, 0x079b0b5d58e739eea6bdfe4092e232bacee0d027bd0f5186c22977bfd24620d7) mstore(0x5640, mload(0x4b60)) success := and(eq(staticcall(gas(), 0x7, 0x5600, 0x60, 0x5600, 0x40), 1), success) mstore(0x5660, mload(0x5580)) @@ -1215,8 +1215,8 @@ mstore(0x5660, mload(0x5580)) mstore(0x56a0, mload(0x5600)) mstore(0x56c0, mload(0x5620)) success := and(eq(staticcall(gas(), 0x6, 0x5660, 0x80, 0x5660, 0x40), 1), success) -mstore(0x56e0, 0x279bb1b1a84827f08b5a6b1afe82453d687fb716da1a5670e7ea1725330f298f) - mstore(0x5700, 0x1fb3ef44499d47fa6fe79760d3295b2492983695632cc805d7a1f2ffcc814d0c) +mstore(0x56e0, 0x187bddea7dbe1c5acd2e01afadc1c0df38180c00ab7439352151b7e801502a0b) + mstore(0x5700, 0x0fc2689a279dba9a368a34988064e5dc4f1cd3f2598bd2a6949e1b1a02d10b76) mstore(0x5720, mload(0x4b80)) success := and(eq(staticcall(gas(), 0x7, 0x56e0, 0x60, 0x56e0, 0x40), 1), success) mstore(0x5740, mload(0x5660)) @@ -1224,8 +1224,8 @@ mstore(0x5740, mload(0x5660)) mstore(0x5780, mload(0x56e0)) mstore(0x57a0, mload(0x5700)) success := and(eq(staticcall(gas(), 0x6, 0x5740, 0x80, 0x5740, 0x40), 1), success) -mstore(0x57c0, 0x1327a71d31491e1437b1994899267b11c3abbad0340b47fe256d4f91fef92fee) - mstore(0x57e0, 0x1440ebb88ec12e71b3dcf84ac66229ddca0d2d6570cf1ffb7927c2ebc09f8d8e) +mstore(0x57c0, 0x16fbd0af4b59dc890346304d35c999dd8dfad3a06ad8a10f474527fad9ea9c32) + mstore(0x57e0, 0x2ab015bc2b8a19b48338928187638174065562d0a5a83b008546a9e6612ec6c4) mstore(0x5800, mload(0x4ba0)) success := and(eq(staticcall(gas(), 0x7, 0x57c0, 0x60, 0x57c0, 0x40), 1), success) mstore(0x5820, mload(0x5740)) @@ -1233,8 +1233,8 @@ mstore(0x5820, mload(0x5740)) mstore(0x5860, mload(0x57c0)) mstore(0x5880, mload(0x57e0)) success := and(eq(staticcall(gas(), 0x6, 0x5820, 0x80, 0x5820, 0x40), 1), success) -mstore(0x58a0, 0x1825601cf3db8549d6b0c0ba6ce4bb7661f81fc7de4fbb3b4a8293ff0938c8e5) - mstore(0x58c0, 0x1a03983f233b00c3a96ae5552c74957f9285b641a9502397fc10ef067e639970) +mstore(0x58a0, 0x1dcfb31490b59327642f4b9392465bd8824f732a9e94e46b0bad32b5706087af) + mstore(0x58c0, 0x16b484290b48dce843c6bab1e64e7f45eb424bb17ce605fbcea4650fb021f600) mstore(0x58e0, mload(0x4bc0)) success := and(eq(staticcall(gas(), 0x7, 0x58a0, 0x60, 0x58a0, 0x40), 1), success) mstore(0x5900, mload(0x5820)) @@ -1242,8 +1242,8 @@ mstore(0x5900, mload(0x5820)) mstore(0x5940, mload(0x58a0)) mstore(0x5960, mload(0x58c0)) success := and(eq(staticcall(gas(), 0x6, 0x5900, 0x80, 0x5900, 0x40), 1), success) -mstore(0x5980, 0x11d03b31084d49e49e40902891439047cc277aa97e8b2e3a3c5b2e80dac5c364) - mstore(0x59a0, 0x151e9540ac7dd9f60a5033876ad0183c4af24f7d12cd8ebe98e71513939a8cc0) +mstore(0x5980, 0x1eeb3f7b26d5c9871bc2c16a4ed5056dbe613a4bad07a1865e94b5a3f1f46842) + mstore(0x59a0, 0x2226ac7577fc6b41920682f07383ed12ef175ee617888551e764434eda30a02e) mstore(0x59c0, mload(0x4be0)) success := and(eq(staticcall(gas(), 0x7, 0x5980, 0x60, 0x5980, 0x40), 1), success) mstore(0x59e0, mload(0x5900)) @@ -1251,8 +1251,8 @@ mstore(0x59e0, mload(0x5900)) mstore(0x5a20, mload(0x5980)) mstore(0x5a40, mload(0x59a0)) success := and(eq(staticcall(gas(), 0x6, 0x59e0, 0x80, 0x59e0, 0x40), 1), success) -mstore(0x5a60, 0x23d01f8bb44c10b4dd7962ca558169300c7535dc2321c483251841b9dd533c0f) - mstore(0x5a80, 0x1599ae56c0c8434fbfc5eec62917dfa3f0a9e2dbe7c77409ec0f3a004b14cf99) +mstore(0x5a60, 0x26e3fbd5c5a66607cd8371419cac48be464539f883f1edfaca3c6bf8507a7410) + mstore(0x5a80, 0x08f6e991d52b47307f2f83f267b41f3f3310fa21831988da7ab39054fe2ac53b) mstore(0x5aa0, mload(0x4c00)) success := and(eq(staticcall(gas(), 0x7, 0x5a60, 0x60, 0x5a60, 0x40), 1), success) mstore(0x5ac0, mload(0x59e0)) @@ -1260,8 +1260,8 @@ mstore(0x5ac0, mload(0x59e0)) mstore(0x5b00, mload(0x5a60)) mstore(0x5b20, mload(0x5a80)) success := and(eq(staticcall(gas(), 0x6, 0x5ac0, 0x80, 0x5ac0, 0x40), 1), success) -mstore(0x5b40, 0x2876b4cb304a71b1eb97c0a33fad6c2567a18f4333d282878103a8a52f9a44dd) - mstore(0x5b60, 0x1cf03a9e7d9f1689bad060e3c93dd13d434e6fc7534b662ba0030f864c9ef982) +mstore(0x5b40, 0x1654ed6ee24ad6ebd5c4c2dc0febbb2e92d556bb946f336c7cc1566170f64cdd) + mstore(0x5b60, 0x2e60765d74d1d5c043e2299c4e457312b1358f4e51cdea038ec00ef453f20a09) mstore(0x5b80, mload(0x4c20)) success := and(eq(staticcall(gas(), 0x7, 0x5b40, 0x60, 0x5b40, 0x40), 1), success) mstore(0x5ba0, mload(0x5ac0)) @@ -1269,8 +1269,8 @@ mstore(0x5ba0, mload(0x5ac0)) mstore(0x5be0, mload(0x5b40)) mstore(0x5c00, mload(0x5b60)) success := and(eq(staticcall(gas(), 0x6, 0x5ba0, 0x80, 0x5ba0, 0x40), 1), success) -mstore(0x5c20, 0x09d6b1ef89008418dc31e48ddc1123f06623183c2ca3be3f87c61c4cd416cb07) - mstore(0x5c40, 0x19a196c98c173b7d399c14be13eaa0e3ebf3afdc80b6bb5431a396b7860f8876) +mstore(0x5c20, 0x23a0c541643962fd3751f386670057a24c2a2966d6f975b8474b1df1df58aec5) + mstore(0x5c40, 0x12adacf7628483c9dd1d014cb00243aa716100680f195d25d59bc85ee7fdf202) mstore(0x5c60, mload(0x4c40)) success := and(eq(staticcall(gas(), 0x7, 0x5c20, 0x60, 0x5c20, 0x40), 1), success) mstore(0x5c80, mload(0x5ba0)) @@ -1278,8 +1278,8 @@ mstore(0x5c80, mload(0x5ba0)) mstore(0x5cc0, mload(0x5c20)) mstore(0x5ce0, mload(0x5c40)) success := and(eq(staticcall(gas(), 0x6, 0x5c80, 0x80, 0x5c80, 0x40), 1), success) -mstore(0x5d00, 0x0c353a2d3fb9de5a63ae20c29d28031efeaf502224c752372f07969d272ea88b) - mstore(0x5d20, 0x2a66e2b2fc4c41f54f231c0536a3f249d7bac03ab25773c01799f38a9ec2fd2c) +mstore(0x5d00, 0x19780ae2901b7f5ddedf94c1b53b504977a5181f39a0502c6e86b8378203f22e) + mstore(0x5d20, 0x1f5f311a3d179380fe7cd9e6d14150dc860629541bb2c8f88110e31de91c7bfa) mstore(0x5d40, mload(0x4c60)) success := and(eq(staticcall(gas(), 0x7, 0x5d00, 0x60, 0x5d00, 0x40), 1), success) mstore(0x5d60, mload(0x5c80)) @@ -1287,8 +1287,8 @@ mstore(0x5d60, mload(0x5c80)) mstore(0x5da0, mload(0x5d00)) mstore(0x5dc0, mload(0x5d20)) success := and(eq(staticcall(gas(), 0x6, 0x5d60, 0x80, 0x5d60, 0x40), 1), success) -mstore(0x5de0, 0x09fb582fffb06e472ce594ff04530c9f33d70312b9b8e54ebc70097d415d6b82) - mstore(0x5e00, 0x1045a2adc4faf395b26431d86bdf7604651e06f97cbae9ed8e00676147fe9f83) +mstore(0x5de0, 0x021fa11f2c822b49466f473bc750e172be66ff9df35bc5a393cee59294f42b98) + mstore(0x5e00, 0x2281445678651a0a05ccdbea47bde6e7a6c82e43de0a52a5414fe82995229130) mstore(0x5e20, mload(0x4c80)) success := and(eq(staticcall(gas(), 0x7, 0x5de0, 0x60, 0x5de0, 0x40), 1), success) mstore(0x5e40, mload(0x5d60)) @@ -1296,8 +1296,8 @@ mstore(0x5e40, mload(0x5d60)) mstore(0x5e80, mload(0x5de0)) mstore(0x5ea0, mload(0x5e00)) success := and(eq(staticcall(gas(), 0x6, 0x5e40, 0x80, 0x5e40, 0x40), 1), success) -mstore(0x5ec0, 0x304c7a0ed7b07d72da0bfd0a63908355b825669b5a62b99b775ee19f940b9114) - mstore(0x5ee0, 0x02fcb2e6131131677facbbc28b73ee6c4571a1d49034a85f72719cd11f922d0b) +mstore(0x5ec0, 0x0e67f06b3cd6ad600c3a3b705d3d178c2ea4afa419a60ff56b42774a44f2c151) + mstore(0x5ee0, 0x1cc0dd45b27e99dcba7e4c721c4255ebde7a5b3aea6279859073398d6bf3ba1d) mstore(0x5f00, mload(0x4ca0)) success := and(eq(staticcall(gas(), 0x7, 0x5ec0, 0x60, 0x5ec0, 0x40), 1), success) mstore(0x5f20, mload(0x5e40)) @@ -1305,8 +1305,8 @@ mstore(0x5f20, mload(0x5e40)) mstore(0x5f60, mload(0x5ec0)) mstore(0x5f80, mload(0x5ee0)) success := and(eq(staticcall(gas(), 0x6, 0x5f20, 0x80, 0x5f20, 0x40), 1), success) -mstore(0x5fa0, 0x00347e8e9332a177dba1b65fd1a8a17450521792a7fbac3e0297ebde6e7838e4) - mstore(0x5fc0, 0x289d406011aae1118ff4d86b716d4b9660f5c270ea5b5247a1cc71fc0745c4c7) +mstore(0x5fa0, 0x279c16cd7feb17ed6cfe4ce27f00473872b340ebcae3dfe2c6d8aa97d9602273) + mstore(0x5fc0, 0x0aaffc872c798473df012c13c5185eb7cca39ba51cbf0358a7f5b7903fbde64d) mstore(0x5fe0, mload(0x4cc0)) success := and(eq(staticcall(gas(), 0x7, 0x5fa0, 0x60, 0x5fa0, 0x40), 1), success) mstore(0x6000, mload(0x5f20)) @@ -1314,8 +1314,8 @@ mstore(0x6000, mload(0x5f20)) mstore(0x6040, mload(0x5fa0)) mstore(0x6060, mload(0x5fc0)) success := and(eq(staticcall(gas(), 0x6, 0x6000, 0x80, 0x6000, 0x40), 1), success) -mstore(0x6080, 0x238289053176d6ee7aaa36d98249c7dde4fee7f4dc90316f64f92b24ef9f987e) - mstore(0x60a0, 0x0c4e25e98208315fdedc6bde1545533eee6c7c4b89cfa44f764eb39a129d9ba4) +mstore(0x6080, 0x1b711abfd5ca379b0c7a059a3c0a23f8aa6d033158b9bcb922f191cd11a374db) + mstore(0x60a0, 0x2293e4350f716a42b09abf2696b53647b98656e217dfc39071b2207cb348c494) mstore(0x60c0, mload(0x4ce0)) success := and(eq(staticcall(gas(), 0x7, 0x6080, 0x60, 0x6080, 0x40), 1), success) mstore(0x60e0, mload(0x6000)) @@ -1403,10 +1403,10 @@ mstore(0x68a0, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c mstore(0x6900, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa) mstore(0x6920, mload(0xb60)) mstore(0x6940, mload(0xb80)) -mstore(0x6960, 0x249b89133f51f707a562a9b69acaad642bd08c9179aa90c8188f40b5205dad43) - mstore(0x6980, 0x2981bdcac7171f8537f1064de061b5ce5e18dd2fc4a4e4430eb5087506e8ed82) - mstore(0x69a0, 0x1305f9ff4409c8d36208d7529987ea2438c22d017090ac2841b3d4fb36a6ea6f) - mstore(0x69c0, 0x14ed363012c9eb27ba479ea030fd6467e9a1f4e86d78097f3b37a7e91f7011dc) +mstore(0x6960, 0x2bda3e3f6913dbd628d5cb2e235040d9902e3f5cd9b5f5669ed765984db32b55) + mstore(0x6980, 0x14f987df3f0b40848192c76a191314d67fb1f2618fba33e163e28ce9e895ab80) + mstore(0x69a0, 0x2b11a57fe3e865318a9cba27a410871987a176b7746acccc7aa6c59c47c9c07b) + mstore(0x69c0, 0x071173db1791499cdfe9b9ca8a89c405cdf9a28e622dc3417b7d3c70882d034f) success := and(eq(staticcall(gas(), 0x8, 0x6860, 0x180, 0x6860, 0x20), 1), success) success := and(eq(mload(0x6860), 1), success) diff --git a/zk_prover/README.md b/zk_prover/README.md index 38a0c7ae..640ff405 100644 --- a/zk_prover/README.md +++ b/zk_prover/README.md @@ -26,7 +26,9 @@ For real-world situations, you must provide the path of a specific `ptau` file t ## Build a Solvency Verifier Contract -A `gen_solvency_verifier.rs` script is provided to generate a solidity contract that can be used to verify the proof of solvency on-chain. The script can be run as follows: +A `gen_solvency_verifier.rs` script is provided to generate a solidity contract that can be used to verify the proof of solvency via a smart contract. Note that the function to verify such proof is a view function, which means that it can be called without spending gas and that it does not modify the state of the contract + +The script can be run as follows: ``` cargo run --release --example gen_solvency_verifier @@ -38,7 +40,7 @@ Note that the generic parameters of the circuits `N_ASSETS` and `N_BYTES` are se Furthermore, the verifier are generated based on an unsafe setup. For a production ready verifier, the setup should be generated by providing a `ptau` file generated after a trusted setup ceremony to `generate_setup_artifacts` function. -On top of that the script will also generate a `solvency_proof_solidity_calldata.json` file that contains some testing calldata to be used within `contracts` and `backend` to test the verifier. +On top of that the script will also generate a `solvency_proof_solidity_calldata.json` file that contains some testing calldata to be used within `contracts` and `backend` to test the verifier. Again, in the example, the proof is generated based on the `src/merkle_sum_tree/csv/entry_16.csv` file. If you want to generate a proof for a different file, you can change the path in the script. ## Build an Inclusion Verifier Contract @@ -50,9 +52,11 @@ cargo run --release --example gen_inclusion_verifier The script will generate a new `InclusionVerifier.sol` and `InclusionVerifier.yul` contracts in `contracts/src`. +Note that the generic parameters of the circuits `LEVELS`, `N_ASSETS` and `N_BYTES` are set to `4`, `2` and `14`. This means that the circuit is tuned to verify the proof of inclusion for an exchange with a userbase of 4 levels (2^4 = 16 users), 2 assets and a balances in a range of 14 bytes. These parameters can be changed in the script. + The verifier are generated based on an unsafe setup. For a production ready verifier, the setup should be generated by providing a `ptau` file generated after a trusted setup ceremony to `generate_setup_artifacts` function. -The script will also generate a `inclusion_proof_solidity_calldata.json` file that contains some testing calldata to be used within `contracts` and `backend` to test the verifier. +On top of that the script will also generate a `inclusion_proof_solidity_calldata.json` file that contains some testing calldata to be used within `contracts` and `backend` to test the verifier. Again, in the example, the proof is generated based on the `src/merkle_sum_tree/csv/entry_16.csv` file for a specific `user_index`, which is set to 0 by default. If you want to generate a testing proof for a different file, you can change the path in the script. If you want to generate a proof for a different `user_index`, you can change the `user_index` in the script. ## Benches diff --git a/zk_prover/examples/gen_inclusion_verifier.rs b/zk_prover/examples/gen_inclusion_verifier.rs index 178e0aa6..60906b00 100644 --- a/zk_prover/examples/gen_inclusion_verifier.rs +++ b/zk_prover/examples/gen_inclusion_verifier.rs @@ -22,15 +22,33 @@ const N_ASSETS: usize = 2; const N_BYTES: usize = 14; fn main() { - let merkle_sum_tree = - MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv").unwrap(); - - let circuit = MstInclusionCircuit::::init(merkle_sum_tree, 0); + // In order to generate the verifier we create the circuit using the init_empty() method, which means that the circuit is not initialized with any data. + let circuit = MstInclusionCircuit::::init_empty(); // generate a universal trusted setup for testing, along with the verification key (vk) and the proving key (pk). let (params, pk, _) = generate_setup_artifacts(11, None, circuit.clone()).unwrap(); let num_instances = circuit.num_instance(); + + let yul_output_path = "../contracts/src/InclusionVerifier.yul"; + let sol_output_path = "../contracts/src/InclusionVerifier.sol"; + + let deployment_code = gen_evm_verifier_shplonk::>( + ¶ms, + pk.get_vk(), + num_instances, + Some(Path::new(yul_output_path)), + ); + + write_verifier_sol_from_yul(yul_output_path, sol_output_path).unwrap(); + + let merkle_sum_tree = + MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv").unwrap(); + + // In order to generate a proof for testing purpose we create the circuit using the init() method + // which takes as input the merkle sum tree and the index of the leaf we are generating the proof for. + let circuit = MstInclusionCircuit::::init(merkle_sum_tree, 0); + let instances = circuit.instances(); let proof = gen_evm_proof_shplonk(¶ms, &pk, circuit.clone(), instances.clone()); @@ -53,18 +71,6 @@ fn main() { file.write_all(serialized_data.as_bytes()) .expect("Unable to write data to file"); - let yul_output_path = "../contracts/src/InclusionVerifier.yul"; - let sol_output_path = "../contracts/src/InclusionVerifier.sol"; - - let deployment_code = gen_evm_verifier_shplonk::>( - ¶ms, - pk.get_vk(), - num_instances, - Some(Path::new(yul_output_path)), - ); - - write_verifier_sol_from_yul(yul_output_path, sol_output_path).unwrap(); - let gas_cost = evm_verify(deployment_code, instances, proof); print!("gas_cost: {:?}", gas_cost); diff --git a/zk_prover/examples/gen_solvency_verifier.rs b/zk_prover/examples/gen_solvency_verifier.rs index 8a32502e..385794a0 100644 --- a/zk_prover/examples/gen_solvency_verifier.rs +++ b/zk_prover/examples/gen_solvency_verifier.rs @@ -22,6 +22,27 @@ const N_ASSETS: usize = 2; const N_BYTES: usize = 14; fn main() { + // In order to generate the verifier we create the circuit using the init_empty() method, which means that the circuit is not initialized with any data. + let circuit = SolvencyCircuit::::init_empty(); + + // generate a universal trusted setup for testing, along with the verification key (vk) and the proving key (pk). + let (params, pk, _) = generate_setup_artifacts(10, None, circuit.clone()).unwrap(); + + let num_instances = circuit.num_instance(); + + let yul_output_path = "../contracts/src/SolvencyVerifier.yul"; + let sol_output_path = "../contracts/src/SolvencyVerifier.sol"; + + let deployment_code = gen_evm_verifier_shplonk::>( + ¶ms, + pk.get_vk(), + num_instances, + Some(Path::new(yul_output_path)), + ); + + write_verifier_sol_from_yul(yul_output_path, sol_output_path).unwrap(); + + // In order to generate a proof for testing purpose we create the circuit using the init() method, which take as input the merkle sum tree and the asset sums. let merkle_sum_tree = MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv").unwrap(); @@ -29,10 +50,6 @@ fn main() { let circuit = SolvencyCircuit::::init(merkle_sum_tree, asset_sums); - // generate a universal trusted setup for testing, along with the verification key (vk) and the proving key (pk). - let (params, pk, _) = generate_setup_artifacts(10, None, circuit.clone()).unwrap(); - - let num_instances = circuit.num_instance(); let instances = circuit.instances(); let proof = gen_evm_proof_shplonk(¶ms, &pk, circuit.clone(), instances.clone()); @@ -55,18 +72,6 @@ fn main() { file.write_all(serialized_data.as_bytes()) .expect("Unable to write data to file"); - let yul_output_path = "../contracts/src/SolvencyVerifier.yul"; - let sol_output_path = "../contracts/src/SolvencyVerifier.sol"; - - let deployment_code = gen_evm_verifier_shplonk::>( - ¶ms, - pk.get_vk(), - num_instances, - Some(Path::new(yul_output_path)), - ); - - write_verifier_sol_from_yul(yul_output_path, sol_output_path).unwrap(); - let gas_cost = evm_verify(deployment_code, instances, proof); print!("gas_cost: {:?}", gas_cost); diff --git a/zk_prover/examples/inclusion_proof_solidity_calldata.json b/zk_prover/examples/inclusion_proof_solidity_calldata.json index bd2c835b..9a076c2c 100644 --- a/zk_prover/examples/inclusion_proof_solidity_calldata.json +++ b/zk_prover/examples/inclusion_proof_solidity_calldata.json @@ -1,5 +1,5 @@ { - "proof": "0x1ffa97d3558269dbdef09a34328193c1585509ccf481de844ce4dcc5514dfb5b1554734cb5b71baa7e6ff341f10f3c70f2ee68d005c4409a39c98f7d4c3124991e0060f2c7693b707fe3b52586d31488e6fc3661e4cf756fb257a4a186c22ebe1d8c50a4da16c205b6be41a6d716adb9591d6eb97f24ddaeaef06f6b900dfadd26c4ce3f3476790a2e0b5f12052690f36aff6dcd342773d682bea6cbd41daa8e1c6295e3e2dd930e030ee62fe98f8bef42a493e4aeb42f00bd621fbf3ea201d8134a5679f09d436629c52160cb21e0443c1906606c409409ae66f5daf605969200f04ec0d776d49f2f5eaff2e04c88c9064c908f4a0d266c612a15bd88858f5f0ed50084c72f3c79113e05c3674fa14d26e497cc71b404acdd56cf1eb64037002b180b8bd7b4908ef5098ea7f51c6fe7e38dec6dfa0de1360f4c0674a445f8432a03d84390a1276ee7ee553765bac303dbf374a8cdaab6f2bf2734cb21d556701c5131d20846a4913d8e1c34b79f44da7a7f7b55e8155570ad1e1137f88c31f90ae673653b5f2e987fbfe8206cc21ade378eaf9a8665ffa2e3e490cdeecf70722e10b2d2ad8b9edc26bdd213c1910b558451094cf473c9050e32c516ea7860500d54fccbb5dc98192493e0babd8f85b22553a07a4e8053da749c91ce98225fe724acc06dea4c81da2f89462ffebaa5869aaa29630bbcb0c2d62570dbc004b2bb176cb7116152408720c325fece609150915a7b7a6e436437a2be03ba70d049551c8278ac13cc4c2b65b9bb2c4ee2ba6c6e1d9faf2bc20c92ea8a4218c84e444128b9d75126946d454432e913409ff70360bd49246f42ec35fcf1632c45f6c75a2cbaab894857e72d88b15ab417e34a4fd886ea209cc616a810c237a8fd33e81c1cb173872f471edfb573ef3e61320a37d663d25a470c1f894bf8688d2851b7dc2cd3e5231d2e2ec586dec42b1cbc6a262727ed1266fde554bdbb3ca9987f66391cd56a8ec2bc59176ba6408acafdd05262293040c570e2318978b6297132436f20a5e5437f1720bda4a29c749870a1d9064a2949f232aa7103259976fc9c1e1b0653e91dfbab7372440e915eb17abbd762e9c305b7fafc9cede04c5e7489078c05c7792c7be6c9c48ca93c51abccd586c73889c364cdcae82371f0741e88a703193cc834116a358fbaae3ae932db3c21b7c023f024964a912cf5c15d4cd9a3200cbf794d47eea27f0462c3d817081de0860bc9a04699c86b37f9b1a35d30307b2b7a4374c391c698b71f5d3036f2314911dc23c5b25fb0e283632f5bd64997650c6d9117b3ed92b08da2746033c4b961bb5b1300403e8a8cd78e9396ad97ef09063637c3f1ef26e5086d86f0b28a15643b5e00e96058a9f0205a558d119802fb05df49d1747ec550ff8f9d6ac12ca6b2ecd23a7d13f77b2f5d3c48ffcb88a18709f7b780dbe4677ff2ad54d1b89394368f114f0dd59656a4151f6cc0949d29fa26491b7f793a156032218adb0975fb774d85c4b742c34a5ef5f80ae5b8f2e6a70e3fce3917906d6d0e9d80b77f75c9a30b6a120177b5a5b2a5c757ceac9a07b816e9b7133cb463134cb049bea7a8a6e37e183d2d78e6d9ffdc83b4ade929e8b60438704c61f2abea11f2524cc7cb83ee144dc968c2886cf1b30201a1bd36c02a15a30280bc17bc578bdb667b3685e4d35672e981f7043fd0075d4f36eceb37c51f6c8785d39d8786b2b942de2bc087507ed48ca60389a9a358ce25a56969ee3912f4a3adcf400b18a1a057b3e41de61977116611409e65eabec0a0ff69325021090bba89cca12a2bdceeabe5b2a20a0f1169607e8e7654d71d0caf7b04a5e61014b285a83ae7d785c29f15d8bda0c86feb60e280184780400a42660506698aad1c096d171bf1edddb63069c4f35bd55a3bfa3373b76204eff2b635b5ea264a200f26587f41c5c4792a217737f45f28c9d3aacb5f4fcdeb5628dfc43508c0ee162c0ffef91b53bffa67face99f6e89041f490c2b0aa9a2e33e601ab509326a4750215060e8f17a25c8308a259e4f260d39766f6c696eb9417ea21d2ca1cc35ab52bad68220a24a2e7fbd1e529a3ee1f4e11e5d30f786b802d53b785d4a07ee96c21cc9a18cde3975cb702f4cf764db0e931fe729422273eba3956bfd903e99dc51c782eadf2695de097c94113568edb5a68609d54c23bf84335fd0267a080ac3b22a7be0cbe64173bf833306de904cc5337f4ff9950a62969ea8c753d3727d2771a2ee36cecb28467f0ac8c300e3306d312cc6f89c92febe36064852614400f951d0026004643c1a9828ae72fe4fc6da4884b63ed71fd8b65da79782bab70bc060ca29772907da6c0ba45b4818880a2b633ba18295377c1c672dc7c8e04f9d5b324dc8e38ca0facb87ac9f47a2a24d762c87d283a7cac5a674a7c09155e72aa1804da69c39954e72a505448c997e1c1154efe1906429bcfb6206754daa8112d3c0a48f5a6473e2750ce953c98ca5bf4166c062ae8320d311a1051023f837c23380515ab375fc3dd7e41560ddf448b0dcd1295cd65e7cd5ac3185cddcd37df1b9230617dbc740521116c78a9585c54abd8c421c14168b28220fc26048dc9801f9d1a796db0300f2eaded1209ffad4a0e34e3a0ee3a222c7cdadb100fe912a168e82f69122a8e7cfa2e6b9ecb5253ff32985fc6590d851c8d659fdacfe2acc3c28921bb36afeb8efa1093dbdef1024cb2e76022941d4e7d5f6f7b53253204878d4f0fccc88f476bdad72ccbabf1e0dc43e86ec1e20bf95c45a8f88941e47d5453d0288feb508bcef0367ed40717af927e6b6f061922bc8743e3edf4f088d6c1d24803a2ccafc4218209dc42d22513090587d1d6d71395c2da5818a81707da1452b008c3372627fcd84b05a1067ce2e3d38f3c48427f219b591c7a65809c24b2fde52031baf2142679de17fc9e6197734c65edcaaa48e1521c0fe23fa3ef8c1e2214264622a1ec5baab0b766c31f651fcf0a3d3086d19294284032b5550c5a62452e", + "proof": "0x02ba50f7d51a0c62101c5f31db996d99a723c40de6b09af6041922f602e83dda17a5104cd74c9aa1c9fed8415ba9b8071b4dbfd70e0e2cea9d0b30dcdc4e6b0124547aa01d2c1cc5a663984090b33bcceae104547f9560d4115b98b20c55687e1188ba5f8ed5c5e0c5b6f6c8dd22a8a00c8f4037698f354640c890116fb82e9422858d106cc073dde18841efb7eabc6ca90ab7d5b52897e58ae588f546c761de0bcbefea56817c25c6837f251d6336c46947fcaa8f67f14e28a5bec7ee52cafd11aecd7034d3535843ca1e10ce09ba1c2da636d23f42cca8f3ffcb7b44b048e6159691681b95d5c5ff01d2e793aa5fe72b3ffc88eeb68d084a42c54cf750fd1924d7038d1a685cf18d4c0937a7289b79b1c93cd10e68e852849c92b466b85ee90cbba5a5ce16ccd9811603347c629f6bc259d9aa8e00570b498f2a84c2a6b810206515f5b51b76a7ff7eb2ce4db234af1eab63ecf07c1a7494728d67d74d94bc20a782954bc35368082bee63f6a0f654b62941a77978b1ee410a10c041f8867c1e8dfbe20ba0f49d7438a7fb9836d63f7b86a6b6667b543b5f49d6eaffc967a0009c7eb97db8181b6f89229ba9471714f8e796573786cd16a4da20f6c0719a8d0dfc125966883bc60e84a2739b1e2203097b68eab886faf0acbd1acde65b13532fa1528ff7f425fc14ff559fcd92d9152d7a1edcb280cfbeba4b225b6bfde8320f1d6c70d5b0e6c4cec6c061bb4ad5dd34470394fddb5a85c20df5bbd8bc3d11258973f49c1b7087d5028628f9c824a2e5607a8c77b0cfbc5df6db695495029a2926bf5adc04a416167ed589c14ad9d5b421baf5c3281adffe5cec49ad53f3382c2f712e9104766beb72f0cca4bba91499a1b01b1278f5c96709c644ff92a722113b39ca10fd30be35f88e9732dfd4f8f254d72a3d0f528cf6caaa5650a6559409d4a7de2b4b40c3c9790170ff614aa61dc06bbae9bc1de45251a1ea0468d77807779465ac7db7389fdea939b8ea8d0093f2430ef0cce031ca8b41a5cc18760b0285750e6c190f912a8365bfd33c202d05bb6c08b7e2654a368df6710de6659d2dec906817460fe555c46a2c9810d261a5a4aae62502fd3680371820894863580b6d1380ce561afb89e4e941f932596ef22d0fdfff4f89468ef2a81f3defe0410ec0f775259355408259ce1b718be1b296a0b123d209505a3aec314b0e002ef51a6d2ff383a46311399768ee1299857455de70f23963f2f9bc805b9a502699511aa82c830ed7f9218bdd56a7f8fd014100e3cb42b522b8f018b50e603579df201e72f796e3f64ddb3128d847a3709cb147c284921145079f3b3dced0c57f9b3d25304651f4cd2b5c5376892cd6a6388fa72d3a3fb45a698ac653b192fc5877a3075051050e71244a3c0b4d156ed081de1bdff275e9f042ee6bc4c821917e3271094f7bfc8bf6f5632cc01b2ed24b5922c1b5e728616a133fdc7e18401fa695a82d5344a92359b34bcc4cfa3457cfa57d4ccbe2f6232c8e0ea4e75ec60ae69edb2c0ea012af04d43cfd9a31f5e5e7eb62858d19152246cf03b2d22d2077edfde1071f221f9cbfb9f2d7b7a7ceaf725fb7dc90137cdcea5273bf421e3e8db7aa390fd1a8631b32764cb9be8f96bb71bb1205da5d05ef10c72c1690dd2a4389995a2932ab0a50de825f1559fcffff93e9a3c705c11c8cec9dcb5c485a7f729eb2182b804b08fac527b30ab869c3e76a6ec395036a757bd6f04dbcfee06ae7b6a9f414f3dd036d34d6411b8e0cf0771e1b1ebab2b344ddf22d1cf3e5b0cd4cc2f0ac0f42078f1f3d4d43424780d7699140818e29e2b512c989eaa9d34c5416631dac13ba3f115701c6412420b2b2385c75c8b42a89c8f20fb85b6703eb3d9cb4bd10022dca037a53bc98471039ecebcbe7b61feacc64850104d326bf5f69221395dd110f82bd76cb133b57afe5fe5cf82c4b4cf853e9d8e23b0305c7ec8bbd36d2f118ed209617a1a4c2414c91070a3e6b9ccbbd1f265701ca6407bdef1b52a41ac20f18582f3957c7a67129be7b81c853e3cf77c5c8b4798d78f7e561c425ce35c42eda5ee2e818c3f42f5143d400a64ff563c4d85172e551ed8c260c21ea6791850341df131391b0cf0fee324bb7019cf6643542d35887607a5a2716b3058f2e8c2b031843d211b906a0b7225968409b8dd6b31474f4e1c00b7487fb27277aede30662ae95d2c37b5889cea7ae2653909255b815c5eaac8da7bac5ee4b557dbb7f2cfd5ba6730e38ef34a44993de946e9a48e2fa7ac786fe34a5a96fb66a148bc007da19fe3b3a912bd3f2bd991e5349a8ba12f3f53f352f22b442dc7ddf82b9021b422dd989d86d0271f9f27222b93a90b56c9ccd81a209e470c26c4e41f2c8db1b12c873246b55f810e2c10ba48ddb1299fe444f88ffc47ec11c7e2c96c1a0910678794933e44ba174d3bc8ce2106f9ba9a0f810585ee5a999aa89eb488660e211e73f2634d7c46a53fd457c8d9b79b4c7b81be197054f125fa9c050294ae7a913ae8ae3d4a6b33f687751c951fa2cc0ce0bb8bc45d870f8270fa07965de112719ba66a596885300edcbb2f1bc88e3b719c4deb0e370bfe7b23b0f9829f1b1c32e8cee2013419794ec443125ce4cbf4218b36fe10050482c1e75c3540c489d1a0635ef62097a3262bc5189c2c3e3ac36a1a9d6fb2b072b66da11ed6aa3df05a10fdc564b20b9a08f078727cc759d25c202f182b3566f50f7bd14da69b40805080619b929ee38516f3121f7e6da9e8bc80063c5f28c683e55548486fb7fa54cd00bc43f14c29bffbe40d286026c1976d7c428709931dfb32cab8441c2a6cd080e2a443cc676bd1d1520a43ca3d6e01ae0e77ac315468df8526b8c93c4bbf8c52e1e9ed2c2f23306caa2b1d2414c6460a377bd9dcd45adfaa9d6fb2cb5d8d382a72e4c96b4ed64d75dda706ab6f783b0c9d7d311ba22e69a12ad71eb705676988b17a262213aeb107ed6a1f68409e5a6a703cf81171c58fd0d4cca92478185057f", "public_inputs": [ "0xe113acd03b98f0bab0ef6f577245d5d008cbcc19ef2dab3608aa4f37f72a407", "0x2e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5" diff --git a/zk_prover/examples/solvency_proof_solidity_calldata.json b/zk_prover/examples/solvency_proof_solidity_calldata.json index eae6dc2c..79563efe 100644 --- a/zk_prover/examples/solvency_proof_solidity_calldata.json +++ b/zk_prover/examples/solvency_proof_solidity_calldata.json @@ -1,5 +1,5 @@ { - "proof": "0x1b6a8655e5bc3a50bc872dbb071c5afef85bc583858c2c8609d03453de6ab7951f3cc48b1ed404e1363f7dd2c33dc1f46ca6a4ca14bc0113a2e4a06e99157d2f0c6d66da0f92c6886c5e844b471fb0d66f5fee2baed58e2ce56919c7ece4ed3e12947a1d0509597625d16dcbc259ba80badc180ebc85bd7517afb48f915ed27b26d1da653878855b7b37b93f9ac3291c405513cbe45cf1c45d8b48116e2b534b245e5b6fc2e3aaf1e3d451cbc9e63c3ff9db36ca1cf5f724b993a09df6086cec21e43ab5ebb6c572b96ab68b7ec07663d54273b86e66c141648007812ba906de2d35d058250000e7d56508289447fb18e49da21d9b2bf20f7109b3e9a35b70062cc92dd84697ffcd94e414994a01cd9e429eae25183249de94954335f7cafa831c6534bfe26d3a2e59db30b56e33f1b6993039f1662644f9fcc9b899621b2dcd1c40ef0a0e48020315f3c5b8feaec39c5f885ab3f62fb17546874051a28e22a800e6adc7bf26ab36f62c5b3913f3ac33b062359346e84a2f444c3b27389981fe142f578117c00ddc2015ddb9732ed343a3f5607151546333473106d1ee08ee40046178a3feba67d89dcdd00dfd61f46148bd93f604c9df421a1eb1667cc33fd00098d992a2af99a1eff639ac30f820da66ebc35c6c5e7a01296aa262a43297511922111b218f1f05810ee2c7c39bfa626006250a5c8d516b9240829c27ba2c7d07110d56ad7c2d9751316c9ef983e35b1bebb6e78d63e09420de5e1f15d8d9b308496c7ef2fe7457d8d4acac91087b8eb8b797b6798f70562edd08b3f5a162531fbdbc5c7049edc715e4345bdf28590831ea6c4dcd344f971f61a96202fc4fea1128896f32199f5ed4d9fed39d2d7a9b868d43ae3427da6fed2d2b6425a33074188ff269708d3a3f22aaea8907021110ee79da48f2396868c803a22e098fba1c23b7aa37a3efaa954b8369a51c1df6133c3d3ce406ca3dd70adc9451b3baf57f046b68b67b5c10e0387c1f758ad14d06e5cdbf08bc85f7923e985cdef7018dd715d78ad215a719401a250d7b43871b400b045119510c16648435a8c0a73a3d752477f82858b7cc018ea6abdeba707f590ab95f15ade4cc5bb6cf75e901c79a5e2e47431af1b0d121706e4b826bddf28771841b2fa8184877478330223fdc81c71edad744e52740ff7e6bf997ed0b7407339501655ddbc1410d142e4f4b585f6829bc840bc1af40727f837848eeb7ff1d5c93094e0f5269572fcc0a381817a1bd21e9fc4ceaa3d3e76954840f751593d101dcfd12e7ec70a540b1399de4d7b97100587d6edfb9df484d85af10a55333a50053d391933f1942b6219dfe988e624123663fd480350ebf37b6fe2c1f9fcb63ce7fc23a1cca5a3ce2211482a831c0191100e199f9c36bda60ebd5fbc3e2dd1b38627b516ce6f9cd9da9d196fc75feec0e42dce3ff7e599acce62bf6ea51a2564f3fff2fb984547c1328cd62f67bfc6b2c35b7ee0b38a367ac04c0ff4217e159423110a0ceaf26045e2cb16c660a30ac1ee4272e5d70d250cb2b1dc0baa861d95e3946dca4ac39c213bbb566eb95d7bf1295bd8ef93dee5db6cf990ea9371bba888fb54e0ba2e804378a89a6f881ab540812e096ce4c34c4f7f964f0f2c166e3851e860b250ff8142ef75b3c9483f1b71cfb346b0f98027034478058a9a3fd3f0c4d3d7d1f1b9375c406ac47b08f33fc29b8784b902d2e9d48e2f03d78a3a170396271c20bf6bffd9ad672b46c6b5dcf29a58c238abceca9ade4a413b7e9de713e3095fa41cdb90cb05069a79d3c19f028cda29e92812ca3c30305c49ff77804bf64c1e43a614836f16ae07d63980b4d09178c2387f0a2b6fa7256012ab9123630ca544711d6d855993640f8937b12ad15c36ae77e51f67931a5a1d76fa181046c6b28cd664486d294c2c442ea2199bc0c0b199d495ed7c2716987b3d1a5b74737a15eb163acde8638ce28cfc350e8520e7df610461fac1c4e062e8fd18f364d56b3f58889fa9d5ce83b9cbe82c5a6fa087cdcf2bcc560f55c24681a809887345f0c3586ed6486e03a6d3044e914cb0316ecdaeaa95b5b7e428c6685d105f845dd05a56e54315dfa408dec4b698d47c52adcde4a6653913fb36ae65de978c799d7075be288779c5442e690b086ffc5b2283b4eae2f7d4ed427ef539fe58cfb173b7e381fbffcef29072397cf2fecac1422c8d50dc7d927cb8ddf6ea85dd01840ffff26a5c4448bb28cb04bccac37510a2140f6005fd5cb30a5bb3d725916fafa6a7c1a5bdd5a5770d063c461186fbfaa04c9ed76e5d419c97a8a16db1e19e47a99303192349960992b90c1e74e4a69402e8bbebf40b3dcc4c9456888641bb24ffd32ec117d514ef5d41c19243734b15617dc4d14c63957fb1dd453342c0d4b83c4c3361abc575b10806c48c9cc823f82089c6650d850e44ab9dffefc200042c83674c2b61607bd37533b5adc16d1c5ed00dff29fa29ac2678b436681910bc388f18b71a3064117b7b41717b03a0e0bf205419fd6989afc2fb605ac41a21b6fd93e6256a4524e73392ac50bd58575b4f414454145610182dc1918d3309b0882ed2219da7c7dfb901207f7134641a06780112422400ba3707eb1a0bf420b3ca913d9d1e1dafe672eeb8d1061f6c92c09242e04818baf2b6b59d8e6df77c3ac4d454eb67ad6b5651b7beae0ceb6946d4fcf2454f60e1ad065b348c0522d8efda33a9f812986486c2736500130109d55b4222b486f0921810bf370ef98ba1c1c200994692d460afea14a68ae20147fb8c8960485ee0ccf571e7491437138c27392503b23fec38c99b6dacac67512e52e22f404d0e25011cd19d9f447542890635242c67831011d12d049256370e10ff50dd5184a02c62031560e95338dc0d59ffef803e93ea41563e021d6ebb17b7fef76c9", + "proof": "0x02cc6ce33b224db4620a3d1e9d569b4559dd7c373da89a3b4aa8dc05c9e077561b7b9bad8ea14270f44db7e4a7edc5960accaddd739b504708553a67de9d994030173928a1fff000e918d817734183191877eaf050d1a867416cb4d37e6431792251bb49c5ea59b2ecf865f89dcf073d25b7886c19d5b49583a7b3810c7d58a5180c4fa702018feb20a39483b0a3b13d3c63be516cc2de8ac5374cf1d2bd94940fe30ea351e0de235f5d000f5915044f7e6da810bacf0740645ababdb236103b08b9a869d0bcca15a29a0139428fc2385d79ab44f6259bc401d6751794d08ae41c45d619538a702f96137bb2ee3ee4c1b2d8c9be2127456bc1fffa896e1057fd071bd67c2aa5e7c1122946e489f8ad44658ae603671cbd866ac7259b9f1980d3230f2e5b0612a94ae0b886655089ccc7a2f42920cca7c37b7e21b8da27269fc5271e49b8e295a4a557d70c43155d81a3ed1e4541e93c9c789e3d17f0056af7fa2497d42dc67815ca77c8528fbcb8c76564449e72b2a26375d5aee33efbafd95117e3f8373f240a66db82787eba376db4572fa73c4e16bedbef7275054661895d22a5bfb5c060769aa863905e2ccb91f620257a99ae0d3a33a2adc4c5a6e86d2304e5dcd9bcebcec1654dab3c5c4e47417aabb0dac9a446ffc33db8391dde9a5c27d2acb15644fbc5bb2be251bf2548bd1c169e9c9ace20024fe672074c8f9c920a88e997acc633f47e9fb9de319b1e10a2eca1a380d10e722fa755206b9139ee144a9208d71adbd3eae4e5c91e2e4486d34f73c4b687b34d19ab6b941266053f158b5a2d78861f555bc147be1549fb3a5271b75718b4e89952535a16589de154297d458c0d6f2041947965c04bc786848a02c9cda45eeb13ab3ffb95c044a92b0bcf677b493880203d10b456ebd3f62b3eada978510987df4d26d0ff248d8924074a6f7159b2dac5cb2513cd225e8a22402169f0dc7b21b7348e3b791c5d5eb005ceefbd205847e0c97e8894337c8791b6f473d5f29d76cd42bf5ffbe6acd15b2b30a16a321e6dc2fd04674c9fc246c05d984c01d7131689583760d30c6874452e28b65f738428c559fde12b00b71269bf61b2735f1382732c76fc16b0f318322f752d9eea5a9ad7f819654a87659c31b5eaf56488359341e0a01e8923f756fe185b5bb9b5564a4af495c7a4ff42d367b27f57a6b82108128f5c2c4bf9aab705065c0392a6b8a0b7427c312c9affd4231f3bc5af06f22f810f918b6051a39c6a1e1d209d665ded7ef46404d945b39d0119efc39731623f8b4975c1996fb3fb91034993a31a366294ff66881b326135eb52e81e3cec45d095639de65b2b44a5bb096b8875102acdd6d5f752eca990bce62b802bbff4e5662567ecb47c152262e20f76c89b75ee1e5c651b017b5fa0cfe39e549700aa9c17dc80a02d33b83d5ee51940e56d3cd8d1bfd5b56ef2582f5f19f3dd01398615b617672efc5b14c9e9312a6a2c6426be6f265690babc360e1c125889ac126992dd3372fca1283dd9f68329f511d7916bf4a00c4f6c3c3698188f05b18f9b55ea6a3865f8b8f30267bdcb0203d167ac9a3ba32d39afe9b76631437153b98415482721c4f10ea1fe02b2081bb095ff49a9daa473e5bd42a633b8936677fa74f2dad72a7daa4ccfda4639b52d0ddd5046e4a8899b29c6376ac7438452270fb5760f60f986d7b8bdb1f0a54819c9b786c0503b727eeb78b023f97ffc7b438a5a5c8c044da18eae6ad94c89470a2d1369ad5c244035e3d827fa1c4dbaaa527862747bcea05d160450f5727fa92e8994dd97cb564e3ac57a4a7fe6b83804aaf38ed94d99bf85ddc2285cce40b81c7e5e6e238f49145a263ae4a579638337366f2ee5081e73742b8e624e82bc7f0c97ef10232a0b4c91755e36e12d94c4c01486f9c91fc4328c1c01a8a07fafe32b3e96600cfc3640fdc721a0f9176b8a20f9f989aa957c4c4245cdc5441a23f30902ee8713d3c677217a52cb1aa1f6baecac056de10e1a33c278f7652c4dff901270ed4995a0fdd1b5069f9725f9f7a2e2ee2458017cd924b0400fd464aa6ffc2482b58610cc3fed7ab26f06a333a92bec0223823ca04a2eaef331ea3bb4232116a8080ce42d374d24f75a61aec10d8d11d629209339bdd9714aa03ddc880d45142267fa553a5497e2745955a82bd99ec18bc7e2f2517eb9cfbc16ba9004839c17cae175bde6bc28d6521df18003822190cc8878d740411017f5fb0c0c2b5ccc2ea4b39b907391773711035ea5a5fc52f55fb458bb2077233af50c44f2bcadbd22c69d4face13880cfe08033cfb731f5e340be1ffec46aa64220b39c47d4a5a21e5aede19910fe0c1ea53b1158793d2027788122007ffd718160560f6828e6fd1aaa79d7f247bc869ab803e193f780c383927a80f7f8b572b916477a8f5b599816939033fd786372b72245a722afcc02812fb4e372b5798571e391b30a3c396721b6d1d7c51d1f523b69cc9f606743bc316648d02f52917a04a2248fd1d69d8f11f23ddc23fc9eebed092987b426ad4e2ffb327514e6bb5988ec7c6a7d66f2881c419c58cde670a918248bff77cc084d2b9babc3bb941f2c87303518b7dbe93a0903300cd7998863382e0b59c0e460b77e57e38f32f556d3ac77718c0e9d741815745e6ffa80b7e2e93e512346237c3c974888fb6e84f395aae34c6da9d88c850f91073ccf66957f121f0464be3c40ad0b4b326dbf9a0cd4193f1a5a9f198ab5304b2bfb9674851fa40cc40f1475fd39f41ec16c9adc6d857d4614c9819b4bfc130f61d428f2d3ca31a08a8558182ab672d6ec1f5dab222e846a5e53989f41b72e476f08329e092d91da755bff744927af61b33acdec856c05d7c47a0879822c2f9c5d29ab12f9898aff4570110724162b1ad50e253c1567eabb36281099cdb4", "public_inputs": [ "0x2e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5", "0x87f3f",