From 5d9b063ab260476023365856c4bbfee151029995 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 10 Feb 2023 13:48:55 +0800 Subject: [PATCH] feat(protocol): update Yul PlonkVerifier (#13133) --- .../contracts/libs/yul/PlonkVerifier.yulp | 3041 +++++++++-------- packages/protocol/tasks/deploy_L1.ts | 4 +- packages/protocol/tasks/utils.ts | 12 +- 3 files changed, 1532 insertions(+), 1525 deletions(-) diff --git a/packages/protocol/contracts/libs/yul/PlonkVerifier.yulp b/packages/protocol/contracts/libs/yul/PlonkVerifier.yulp index b1de3cb0ba..bf9b565451 100644 --- a/packages/protocol/contracts/libs/yul/PlonkVerifier.yulp +++ b/packages/protocol/contracts/libs/yul/PlonkVerifier.yulp @@ -45,1580 +45,1583 @@ object "plonk_verifier" { } } mstore(0x20, mod(calldataload(0x0), f_q)) -mstore(0x40, mod(calldataload(0x20), f_q)) -mstore(0x60, mod(calldataload(0x40), f_q)) -mstore(0x80, mod(calldataload(0x60), f_q)) -mstore(0xa0, mod(calldataload(0x80), f_q)) -mstore(0x0, 18234137126033876063412546539638841719105767576395443620139193977094498041964) - - { - let x := calldataload(0xa0) - mstore(0xc0, x) - let y := calldataload(0xc0) - mstore(0xe0, y) - success := and(validate_ec_point(x, y), success) - } + mstore(0x40, mod(calldataload(0x20), f_q)) + mstore(0x60, mod(calldataload(0x40), f_q)) + mstore(0x80, mod(calldataload(0x60), f_q)) + mstore(0xa0, mod(calldataload(0x80), f_q)) + mstore(0x0, 11568943549258518004006755376380433677357566576321358651994428576969508458818) + + { + let x := calldataload(0xa0) + mstore(0xc0, x) + let y := calldataload(0xc0) + mstore(0xe0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0xe0) - mstore(0x100, x) - let y := calldataload(0x100) - mstore(0x120, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0xe0) + mstore(0x100, x) + let y := calldataload(0x100) + mstore(0x120, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x120) - mstore(0x140, x) - let y := calldataload(0x140) - mstore(0x160, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x120) + mstore(0x140, x) + let y := calldataload(0x140) + mstore(0x160, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x160) - mstore(0x180, x) - let y := calldataload(0x180) - mstore(0x1a0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x160) + mstore(0x180, x) + let y := calldataload(0x180) + mstore(0x1a0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x1a0) - mstore(0x1c0, x) - let y := calldataload(0x1c0) - mstore(0x1e0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x1a0) + mstore(0x1c0, x) + let y := calldataload(0x1c0) + mstore(0x1e0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x1e0) - mstore(0x200, x) - let y := calldataload(0x200) - mstore(0x220, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x1e0) + mstore(0x200, x) + let y := calldataload(0x200) + mstore(0x220, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x220) - mstore(0x240, x) - let y := calldataload(0x240) - mstore(0x260, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x220) + mstore(0x240, x) + let y := calldataload(0x240) + mstore(0x260, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x260) - mstore(0x280, x) - let y := calldataload(0x280) - mstore(0x2a0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x260) + mstore(0x280, x) + let y := calldataload(0x280) + mstore(0x2a0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x2a0) - mstore(0x2c0, x) - let y := calldataload(0x2c0) - mstore(0x2e0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x2a0) + mstore(0x2c0, x) + let y := calldataload(0x2c0) + mstore(0x2e0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x2e0) - mstore(0x300, x) - let y := calldataload(0x300) - mstore(0x320, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x2e0) + mstore(0x300, x) + let y := calldataload(0x300) + mstore(0x320, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x320) - mstore(0x340, x) - let y := calldataload(0x340) - mstore(0x360, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x320) + mstore(0x340, x) + let y := calldataload(0x340) + mstore(0x360, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x360) - mstore(0x380, x) - let y := calldataload(0x380) - mstore(0x3a0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x360) + mstore(0x380, x) + let y := calldataload(0x380) + mstore(0x3a0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x3a0) - mstore(0x3c0, x) - let y := calldataload(0x3c0) - mstore(0x3e0, y) - success := and(validate_ec_point(x, y), success) - } -mstore(0x400, keccak256(0x0, 1024)) -{ - let hash := mload(0x400) - mstore(0x420, mod(hash, f_q)) - mstore(0x440, hash) - } -mstore8(1120, 1) -mstore(0x460, keccak256(0x440, 33)) -{ - let hash := mload(0x460) - mstore(0x480, mod(hash, f_q)) - mstore(0x4a0, hash) - } + { + let x := calldataload(0x3a0) + mstore(0x3c0, x) + let y := calldataload(0x3c0) + mstore(0x3e0, y) + success := and(validate_ec_point(x, y), success) + } + mstore(0x400, keccak256(0x0, 1024)) + { + let hash := mload(0x400) + mstore(0x420, mod(hash, f_q)) + mstore(0x440, hash) + } + mstore8(1120, 1) + mstore(0x460, keccak256(0x440, 33)) + { + let hash := mload(0x460) + mstore(0x480, mod(hash, f_q)) + mstore(0x4a0, hash) + } - { - let x := calldataload(0x3e0) - mstore(0x4c0, x) - let y := calldataload(0x400) - mstore(0x4e0, y) - success := and(validate_ec_point(x, y), success) - } -mstore(0x500, keccak256(0x4a0, 96)) -{ - let hash := mload(0x500) - mstore(0x520, mod(hash, f_q)) - mstore(0x540, hash) - } + { + let x := calldataload(0x3e0) + mstore(0x4c0, x) + let y := calldataload(0x400) + mstore(0x4e0, y) + success := and(validate_ec_point(x, y), success) + } + mstore(0x500, keccak256(0x4a0, 96)) + { + let hash := mload(0x500) + mstore(0x520, mod(hash, f_q)) + mstore(0x540, hash) + } - { - let x := calldataload(0x420) - mstore(0x560, x) - let y := calldataload(0x440) - mstore(0x580, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x420) + mstore(0x560, x) + let y := calldataload(0x440) + mstore(0x580, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x460) - mstore(0x5a0, x) - let y := calldataload(0x480) - mstore(0x5c0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x460) + mstore(0x5a0, x) + let y := calldataload(0x480) + mstore(0x5c0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x4a0) - mstore(0x5e0, x) - let y := calldataload(0x4c0) - mstore(0x600, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x4a0) + mstore(0x5e0, x) + let y := calldataload(0x4c0) + mstore(0x600, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x4e0) - mstore(0x620, x) - let y := calldataload(0x500) - mstore(0x640, y) - success := and(validate_ec_point(x, y), success) - } -mstore(0x660, keccak256(0x540, 288)) -{ - let hash := mload(0x660) - mstore(0x680, mod(hash, f_q)) - mstore(0x6a0, hash) - } -mstore8(1728, 1) -mstore(0x6c0, keccak256(0x6a0, 33)) -{ - let hash := mload(0x6c0) - mstore(0x6e0, mod(hash, f_q)) - mstore(0x700, hash) - } + { + let x := calldataload(0x4e0) + mstore(0x620, x) + let y := calldataload(0x500) + mstore(0x640, y) + success := and(validate_ec_point(x, y), success) + } + mstore(0x660, keccak256(0x540, 288)) + { + let hash := mload(0x660) + mstore(0x680, mod(hash, f_q)) + mstore(0x6a0, hash) + } + mstore8(1728, 1) + mstore(0x6c0, keccak256(0x6a0, 33)) + { + let hash := mload(0x6c0) + mstore(0x6e0, mod(hash, f_q)) + mstore(0x700, hash) + } - { - let x := calldataload(0x520) - mstore(0x720, x) - let y := calldataload(0x540) - mstore(0x740, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x520) + mstore(0x720, x) + let y := calldataload(0x540) + mstore(0x740, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x560) - mstore(0x760, x) - let y := calldataload(0x580) - mstore(0x780, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x560) + mstore(0x760, x) + let y := calldataload(0x580) + mstore(0x780, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x5a0) - mstore(0x7a0, x) - let y := calldataload(0x5c0) - mstore(0x7c0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x5a0) + mstore(0x7a0, x) + let y := calldataload(0x5c0) + mstore(0x7c0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x5e0) - mstore(0x7e0, x) - let y := calldataload(0x600) - mstore(0x800, y) - success := and(validate_ec_point(x, y), success) - } -mstore(0x820, keccak256(0x700, 288)) -{ - let hash := mload(0x820) - mstore(0x840, mod(hash, f_q)) - mstore(0x860, hash) - } + { + let x := calldataload(0x5e0) + mstore(0x7e0, x) + let y := calldataload(0x600) + mstore(0x800, y) + success := and(validate_ec_point(x, y), success) + } + mstore(0x820, keccak256(0x700, 288)) + { + let hash := mload(0x820) + mstore(0x840, mod(hash, f_q)) + mstore(0x860, hash) + } - { - let x := calldataload(0x620) - mstore(0x880, x) - let y := calldataload(0x640) - mstore(0x8a0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x620) + mstore(0x880, x) + let y := calldataload(0x640) + mstore(0x8a0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x660) - mstore(0x8c0, x) - let y := calldataload(0x680) - mstore(0x8e0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x660) + mstore(0x8c0, x) + let y := calldataload(0x680) + mstore(0x8e0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x6a0) - mstore(0x900, x) - let y := calldataload(0x6c0) - mstore(0x920, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x6a0) + mstore(0x900, x) + let y := calldataload(0x6c0) + mstore(0x920, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x6e0) - mstore(0x940, x) - let y := calldataload(0x700) - mstore(0x960, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x6e0) + mstore(0x940, x) + let y := calldataload(0x700) + mstore(0x960, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x720) - mstore(0x980, x) - let y := calldataload(0x740) - mstore(0x9a0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x720) + mstore(0x980, x) + let y := calldataload(0x740) + mstore(0x9a0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x760) - mstore(0x9c0, x) - let y := calldataload(0x780) - mstore(0x9e0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x760) + mstore(0x9c0, x) + let y := calldataload(0x780) + mstore(0x9e0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x7a0) - mstore(0xa00, x) - let y := calldataload(0x7c0) - mstore(0xa20, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x7a0) + mstore(0xa00, x) + let y := calldataload(0x7c0) + mstore(0xa20, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x7e0) - mstore(0xa40, x) - let y := calldataload(0x800) - mstore(0xa60, y) - success := and(validate_ec_point(x, y), success) - } -mstore(0xa80, keccak256(0x860, 544)) -{ - let hash := mload(0xa80) - mstore(0xaa0, mod(hash, f_q)) - mstore(0xac0, hash) - } -mstore(0xae0, mod(calldataload(0x820), f_q)) -mstore(0xb00, mod(calldataload(0x840), f_q)) -mstore(0xb20, mod(calldataload(0x860), f_q)) -mstore(0xb40, mod(calldataload(0x880), f_q)) -mstore(0xb60, mod(calldataload(0x8a0), f_q)) -mstore(0xb80, mod(calldataload(0x8c0), f_q)) -mstore(0xba0, mod(calldataload(0x8e0), f_q)) -mstore(0xbc0, mod(calldataload(0x900), f_q)) -mstore(0xbe0, mod(calldataload(0x920), f_q)) -mstore(0xc00, mod(calldataload(0x940), f_q)) -mstore(0xc20, mod(calldataload(0x960), f_q)) -mstore(0xc40, mod(calldataload(0x980), f_q)) -mstore(0xc60, mod(calldataload(0x9a0), f_q)) -mstore(0xc80, mod(calldataload(0x9c0), f_q)) -mstore(0xca0, mod(calldataload(0x9e0), f_q)) -mstore(0xcc0, mod(calldataload(0xa00), f_q)) -mstore(0xce0, mod(calldataload(0xa20), f_q)) -mstore(0xd00, mod(calldataload(0xa40), f_q)) -mstore(0xd20, mod(calldataload(0xa60), f_q)) -mstore(0xd40, mod(calldataload(0xa80), f_q)) -mstore(0xd60, mod(calldataload(0xaa0), f_q)) -mstore(0xd80, mod(calldataload(0xac0), f_q)) -mstore(0xda0, mod(calldataload(0xae0), f_q)) -mstore(0xdc0, mod(calldataload(0xb00), f_q)) -mstore(0xde0, mod(calldataload(0xb20), f_q)) -mstore(0xe00, mod(calldataload(0xb40), f_q)) -mstore(0xe20, mod(calldataload(0xb60), f_q)) -mstore(0xe40, mod(calldataload(0xb80), f_q)) -mstore(0xe60, mod(calldataload(0xba0), f_q)) -mstore(0xe80, mod(calldataload(0xbc0), f_q)) -mstore(0xea0, mod(calldataload(0xbe0), f_q)) -mstore(0xec0, mod(calldataload(0xc00), f_q)) -mstore(0xee0, mod(calldataload(0xc20), f_q)) -mstore(0xf00, mod(calldataload(0xc40), f_q)) -mstore(0xf20, mod(calldataload(0xc60), f_q)) -mstore(0xf40, mod(calldataload(0xc80), f_q)) -mstore(0xf60, mod(calldataload(0xca0), f_q)) -mstore(0xf80, mod(calldataload(0xcc0), f_q)) -mstore(0xfa0, mod(calldataload(0xce0), f_q)) -mstore(0xfc0, mod(calldataload(0xd00), f_q)) -mstore(0xfe0, mod(calldataload(0xd20), f_q)) -mstore(0x1000, mod(calldataload(0xd40), f_q)) -mstore(0x1020, mod(calldataload(0xd60), f_q)) -mstore(0x1040, mod(calldataload(0xd80), f_q)) -mstore(0x1060, mod(calldataload(0xda0), f_q)) -mstore(0x1080, mod(calldataload(0xdc0), f_q)) -mstore(0x10a0, mod(calldataload(0xde0), f_q)) -mstore(0x10c0, keccak256(0xac0, 1536)) -{ - let hash := mload(0x10c0) - mstore(0x10e0, mod(hash, f_q)) - mstore(0x1100, hash) - } + { + let x := calldataload(0x7e0) + mstore(0xa40, x) + let y := calldataload(0x800) + mstore(0xa60, y) + success := and(validate_ec_point(x, y), success) + } + mstore(0xa80, keccak256(0x860, 544)) + { + let hash := mload(0xa80) + mstore(0xaa0, mod(hash, f_q)) + mstore(0xac0, hash) + } + mstore(0xae0, mod(calldataload(0x820), f_q)) + mstore(0xb00, mod(calldataload(0x840), f_q)) + mstore(0xb20, mod(calldataload(0x860), f_q)) + mstore(0xb40, mod(calldataload(0x880), f_q)) + mstore(0xb60, mod(calldataload(0x8a0), f_q)) + mstore(0xb80, mod(calldataload(0x8c0), f_q)) + mstore(0xba0, mod(calldataload(0x8e0), f_q)) + mstore(0xbc0, mod(calldataload(0x900), f_q)) + mstore(0xbe0, mod(calldataload(0x920), f_q)) + mstore(0xc00, mod(calldataload(0x940), f_q)) + mstore(0xc20, mod(calldataload(0x960), f_q)) + mstore(0xc40, mod(calldataload(0x980), f_q)) + mstore(0xc60, mod(calldataload(0x9a0), f_q)) + mstore(0xc80, mod(calldataload(0x9c0), f_q)) + mstore(0xca0, mod(calldataload(0x9e0), f_q)) + mstore(0xcc0, mod(calldataload(0xa00), f_q)) + mstore(0xce0, mod(calldataload(0xa20), f_q)) + mstore(0xd00, mod(calldataload(0xa40), f_q)) + mstore(0xd20, mod(calldataload(0xa60), f_q)) + mstore(0xd40, mod(calldataload(0xa80), f_q)) + mstore(0xd60, mod(calldataload(0xaa0), f_q)) + mstore(0xd80, mod(calldataload(0xac0), f_q)) + mstore(0xda0, mod(calldataload(0xae0), f_q)) + mstore(0xdc0, mod(calldataload(0xb00), f_q)) + mstore(0xde0, mod(calldataload(0xb20), f_q)) + mstore(0xe00, mod(calldataload(0xb40), f_q)) + mstore(0xe20, mod(calldataload(0xb60), f_q)) + mstore(0xe40, mod(calldataload(0xb80), f_q)) + mstore(0xe60, mod(calldataload(0xba0), f_q)) + mstore(0xe80, mod(calldataload(0xbc0), f_q)) + mstore(0xea0, mod(calldataload(0xbe0), f_q)) + mstore(0xec0, mod(calldataload(0xc00), f_q)) + mstore(0xee0, mod(calldataload(0xc20), f_q)) + mstore(0xf00, mod(calldataload(0xc40), f_q)) + mstore(0xf20, mod(calldataload(0xc60), f_q)) + mstore(0xf40, mod(calldataload(0xc80), f_q)) + mstore(0xf60, mod(calldataload(0xca0), f_q)) + mstore(0xf80, mod(calldataload(0xcc0), f_q)) + mstore(0xfa0, mod(calldataload(0xce0), f_q)) + mstore(0xfc0, mod(calldataload(0xd00), f_q)) + mstore(0xfe0, mod(calldataload(0xd20), f_q)) + mstore(0x1000, mod(calldataload(0xd40), f_q)) + mstore(0x1020, mod(calldataload(0xd60), f_q)) + mstore(0x1040, mod(calldataload(0xd80), f_q)) + mstore(0x1060, mod(calldataload(0xda0), f_q)) + mstore(0x1080, mod(calldataload(0xdc0), f_q)) + mstore(0x10a0, mod(calldataload(0xde0), f_q)) + mstore(0x10c0, keccak256(0xac0, 1536)) + { + let hash := mload(0x10c0) + mstore(0x10e0, mod(hash, f_q)) + mstore(0x1100, hash) + } - { - let x := calldataload(0xe00) - mstore(0x1120, x) - let y := calldataload(0xe20) - mstore(0x1140, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0xe00) + mstore(0x1120, x) + let y := calldataload(0xe20) + mstore(0x1140, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0xe40) - mstore(0x1160, x) - let y := calldataload(0xe60) - mstore(0x1180, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0xe40) + mstore(0x1160, x) + let y := calldataload(0xe60) + mstore(0x1180, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0xe80) - mstore(0x11a0, x) - let y := calldataload(0xea0) - mstore(0x11c0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0xe80) + mstore(0x11a0, x) + let y := calldataload(0xea0) + mstore(0x11c0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0xec0) - mstore(0x11e0, x) - let y := calldataload(0xee0) - mstore(0x1200, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0xec0) + mstore(0x11e0, x) + let y := calldataload(0xee0) + mstore(0x1200, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0xf00) - mstore(0x1220, x) - let y := calldataload(0xf20) - mstore(0x1240, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0xf00) + mstore(0x1220, x) + let y := calldataload(0xf20) + mstore(0x1240, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0xf40) - mstore(0x1260, x) - let y := calldataload(0xf60) - mstore(0x1280, y) - success := and(validate_ec_point(x, y), success) - } -mstore(0x12a0, keccak256(0x1100, 416)) -{ - let hash := mload(0x12a0) - mstore(0x12c0, mod(hash, f_q)) - mstore(0x12e0, hash) - } -mstore(0x1300, mulmod(mload(0xaa0), mload(0xaa0), f_q)) -mstore(0x1320, mulmod(mload(0x1300), mload(0x1300), f_q)) -mstore(0x1340, mulmod(mload(0x1320), mload(0x1320), f_q)) -mstore(0x1360, mulmod(mload(0x1340), mload(0x1340), f_q)) -mstore(0x1380, mulmod(mload(0x1360), mload(0x1360), f_q)) -mstore(0x13a0, mulmod(mload(0x1380), mload(0x1380), f_q)) -mstore(0x13c0, mulmod(mload(0x13a0), mload(0x13a0), f_q)) -mstore(0x13e0, mulmod(mload(0x13c0), mload(0x13c0), f_q)) -mstore(0x1400, mulmod(mload(0x13e0), mload(0x13e0), f_q)) -mstore(0x1420, mulmod(mload(0x1400), mload(0x1400), f_q)) -mstore(0x1440, mulmod(mload(0x1420), mload(0x1420), f_q)) -mstore(0x1460, mulmod(mload(0x1440), mload(0x1440), f_q)) -mstore(0x1480, mulmod(mload(0x1460), mload(0x1460), f_q)) -mstore(0x14a0, mulmod(mload(0x1480), mload(0x1480), f_q)) -mstore(0x14c0, mulmod(mload(0x14a0), mload(0x14a0), f_q)) -mstore(0x14e0, mulmod(mload(0x14c0), mload(0x14c0), f_q)) -mstore(0x1500, mulmod(mload(0x14e0), mload(0x14e0), f_q)) -mstore(0x1520, mulmod(mload(0x1500), mload(0x1500), f_q)) -mstore(0x1540, addmod(mload(0x1520), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) -mstore(0x1560, mulmod(mload(0x1540), 21888159374819042681065900960079108671330771976540605510559380874944847741953, f_q)) -mstore(0x1580, mulmod(mload(0x1560), 7310587191487482613389628690976703164033126240759264491908912333706168173225, f_q)) -mstore(0x15a0, addmod(mload(0xaa0), 14577655680351792608856777054280571924515238159656769851789291852869640322392, f_q)) -mstore(0x15c0, mulmod(mload(0x1560), 9798514389911400568976296423560720718971335345616984532185711118739339214189, f_q)) -mstore(0x15e0, addmod(mload(0xaa0), 12089728481927874653270109321696554369577029054799049811512493067836469281428, f_q)) -mstore(0x1600, mulmod(mload(0x1560), 21597602092741825212172446666303273253818825148250162481134447417972994544804, f_q)) -mstore(0x1620, addmod(mload(0xaa0), 290640779097450010073959078954001834729539252165871862563756768602813950813, f_q)) -mstore(0x1640, mulmod(mload(0x1560), 5857228514216831962358810454360739186987616060007133076514874820078026801648, f_q)) -mstore(0x1660, addmod(mload(0xaa0), 16031014357622443259887595290896535901560748340408901267183329366497781693969, f_q)) -mstore(0x1680, mulmod(mload(0x1560), 15837174511167031493871940795515473313759957271874477857633393696392913897559, f_q)) -mstore(0x16a0, addmod(mload(0xaa0), 6051068360672243728374464949741801774788407128541556486064810490182894598058, f_q)) -mstore(0x16c0, mulmod(mload(0x1560), 11402394834529375719535454173347509224290498423785625657829583372803806900475, f_q)) -mstore(0x16e0, addmod(mload(0xaa0), 10485848037309899502710951571909765864257865976630408685868620813772001595142, f_q)) -mstore(0x1700, mulmod(mload(0x1560), 6363119021782681274480715230122258277189830284152385293217720612674619714422, f_q)) -mstore(0x1720, addmod(mload(0xaa0), 15525123850056593947765690515135016811358534116263649050480483573901188781195, f_q)) -mstore(0x1740, mulmod(mload(0x1560), 1, f_q)) -mstore(0x1760, addmod(mload(0xaa0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) -mstore(0x1780, mulmod(mload(0x1560), 6955697244493336113861667751840378876927906302623587437721024018233754910398, f_q)) -mstore(0x17a0, addmod(mload(0xaa0), 14932545627345939108384737993416896211620458097792446905977180168342053585219, f_q)) -mstore(0x17c0, mulmod(mload(0x1560), 21846745818185811051373434299876022191132089169516983080959277716660228899818, f_q)) -mstore(0x17e0, addmod(mload(0xaa0), 41497053653464170872971445381252897416275230899051262738926469915579595799, f_q)) -mstore(0x1800, mulmod(mload(0x1560), 13526759757306252939732186602630155490343117803221487512984160143178057306805, f_q)) -mstore(0x1820, addmod(mload(0xaa0), 8361483114533022282514219142627119598205246597194546830714044043397751188812, f_q)) -mstore(0x1840, mulmod(mload(0x1560), 4443263508319656594054352481848447997537391617204595126809744742387004492585, f_q)) -mstore(0x1860, addmod(mload(0xaa0), 17444979363519618628192053263408827091010972783211439216888459444188804003032, f_q)) -{ - let prod := mload(0x15a0) - - prod := mulmod(mload(0x15e0), prod, f_q) - mstore(0x1880, prod) - - prod := mulmod(mload(0x1620), prod, f_q) - mstore(0x18a0, prod) - - prod := mulmod(mload(0x1660), prod, f_q) - mstore(0x18c0, prod) - - prod := mulmod(mload(0x16a0), prod, f_q) + { + let x := calldataload(0xf40) + mstore(0x1260, x) + let y := calldataload(0xf60) + mstore(0x1280, y) + success := and(validate_ec_point(x, y), success) + } + mstore(0x12a0, keccak256(0x1100, 416)) + { + let hash := mload(0x12a0) + mstore(0x12c0, mod(hash, f_q)) + mstore(0x12e0, hash) + } + mstore(0x1300, mulmod(mload(0xaa0), mload(0xaa0), f_q)) + mstore(0x1320, mulmod(mload(0x1300), mload(0x1300), f_q)) + mstore(0x1340, mulmod(mload(0x1320), mload(0x1320), f_q)) + mstore(0x1360, mulmod(mload(0x1340), mload(0x1340), f_q)) + mstore(0x1380, mulmod(mload(0x1360), mload(0x1360), f_q)) + mstore(0x13a0, mulmod(mload(0x1380), mload(0x1380), f_q)) + mstore(0x13c0, mulmod(mload(0x13a0), mload(0x13a0), f_q)) + mstore(0x13e0, mulmod(mload(0x13c0), mload(0x13c0), f_q)) + mstore(0x1400, mulmod(mload(0x13e0), mload(0x13e0), f_q)) + mstore(0x1420, mulmod(mload(0x1400), mload(0x1400), f_q)) + mstore(0x1440, mulmod(mload(0x1420), mload(0x1420), f_q)) + mstore(0x1460, mulmod(mload(0x1440), mload(0x1440), f_q)) + mstore(0x1480, mulmod(mload(0x1460), mload(0x1460), f_q)) + mstore(0x14a0, mulmod(mload(0x1480), mload(0x1480), f_q)) + mstore(0x14c0, mulmod(mload(0x14a0), mload(0x14a0), f_q)) + mstore(0x14e0, mulmod(mload(0x14c0), mload(0x14c0), f_q)) + mstore(0x1500, mulmod(mload(0x14e0), mload(0x14e0), f_q)) + mstore(0x1520, mulmod(mload(0x1500), mload(0x1500), f_q)) + mstore(0x1540, mulmod(mload(0x1520), mload(0x1520), f_q)) + mstore(0x1560, mulmod(mload(0x1540), mload(0x1540), f_q)) + mstore(0x1580, mulmod(mload(0x1560), mload(0x1560), f_q)) + mstore(0x15a0, addmod(mload(0x1580), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) + mstore(0x15c0, mulmod(mload(0x15a0), 21888232434711746154598842647110004286396165347431605739555851272621938401409, f_q)) + mstore(0x15e0, mulmod(mload(0x15c0), 20975929243409798062839949658616274858986091382510192949221301676705706354487, f_q)) + mstore(0x1600, addmod(mload(0xaa0), 912313628429477159406456086641000229562273017905841394476902509870102141130, f_q)) + mstore(0x1620, mulmod(mload(0x15c0), 495188420091111145957709789221178673495499187437761988132837836548330853701, f_q)) + mstore(0x1640, addmod(mload(0xaa0), 21393054451748164076288695956036096415052865212978272355565366350027477641916, f_q)) + mstore(0x1660, mulmod(mload(0x15c0), 16064522944768515290584536219762686197737451920702130080538975732575755569557, f_q)) + mstore(0x1680, addmod(mload(0xaa0), 5823719927070759931661869525494588890810912479713904263159228454000052926060, f_q)) + mstore(0x16a0, mulmod(mload(0x15c0), 14686510910986211321976396297238126901237973400949744736326777596334651355305, f_q)) + mstore(0x16c0, addmod(mload(0xaa0), 7201731960853063900270009448019148187310390999466289607371426590241157140312, f_q)) + mstore(0x16e0, mulmod(mload(0x15c0), 10939663269433627367777756708678102241564365262857670666700619874077960926249, f_q)) + mstore(0x1700, addmod(mload(0xaa0), 10948579602405647854468649036579172846983999137558363676997584312497847569368, f_q)) + mstore(0x1720, mulmod(mload(0x15c0), 15402826414547299628414612080036060696555554914079673875872749760617770134879, f_q)) + mstore(0x1740, addmod(mload(0xaa0), 6485416457291975593831793665221214391992809486336360467825454425958038360738, f_q)) + mstore(0x1760, mulmod(mload(0x15c0), 2785514556381676080176937710880804108647911392478702105860685610379369825016, f_q)) + mstore(0x1780, addmod(mload(0xaa0), 19102728315457599142069468034376470979900453007937332237837518576196438670601, f_q)) + mstore(0x17a0, mulmod(mload(0x15c0), 1, f_q)) + mstore(0x17c0, addmod(mload(0xaa0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) + mstore(0x17e0, mulmod(mload(0x15c0), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q)) + mstore(0x1800, addmod(mload(0xaa0), 20461838439117790833741043996939313553025008529160428886800406442142042007110, f_q)) + mstore(0x1820, mulmod(mload(0x15c0), 19032961837237948602743626455740240236231119053033140765040043513661803148152, f_q)) + mstore(0x1840, addmod(mload(0xaa0), 2855281034601326619502779289517034852317245347382893578658160672914005347465, f_q)) + mstore(0x1860, mulmod(mload(0x15c0), 3766081621734395783232337525162072736827576297943013392955872170138036189193, f_q)) + mstore(0x1880, addmod(mload(0xaa0), 18122161250104879439014068220095202351720788102473020950742332016437772306424, f_q)) + mstore(0x18a0, mulmod(mload(0x15c0), 5854133144571823792863860130267644613802765696134002830362054821530146160770, f_q)) + mstore(0x18c0, addmod(mload(0xaa0), 16034109727267451429382545614989630474745598704282031513336149365045662334847, f_q)) + { + let prod := mload(0x1600) + + prod := mulmod(mload(0x1640), prod, f_q) mstore(0x18e0, prod) - prod := mulmod(mload(0x16e0), prod, f_q) + prod := mulmod(mload(0x1680), prod, f_q) mstore(0x1900, prod) - prod := mulmod(mload(0x1720), prod, f_q) + prod := mulmod(mload(0x16c0), prod, f_q) mstore(0x1920, prod) - prod := mulmod(mload(0x1760), prod, f_q) + prod := mulmod(mload(0x1700), prod, f_q) mstore(0x1940, prod) - prod := mulmod(mload(0x17a0), prod, f_q) + prod := mulmod(mload(0x1740), prod, f_q) mstore(0x1960, prod) - prod := mulmod(mload(0x17e0), prod, f_q) + prod := mulmod(mload(0x1780), prod, f_q) mstore(0x1980, prod) - prod := mulmod(mload(0x1820), prod, f_q) + prod := mulmod(mload(0x17c0), prod, f_q) mstore(0x19a0, prod) - prod := mulmod(mload(0x1860), prod, f_q) + prod := mulmod(mload(0x1800), prod, f_q) mstore(0x19c0, prod) - prod := mulmod(mload(0x1540), prod, f_q) + prod := mulmod(mload(0x1840), prod, f_q) mstore(0x19e0, prod) - } -mstore(0x1a20, 32) -mstore(0x1a40, 32) -mstore(0x1a60, 32) -mstore(0x1a80, mload(0x19e0)) -mstore(0x1aa0, 21888242871839275222246405745257275088548364400416034343698204186575808495615) -mstore(0x1ac0, 21888242871839275222246405745257275088548364400416034343698204186575808495617) -success := and(eq(staticcall(gas(), 0x5, 0x1a20, 0xc0, 0x1a00, 0x20), 1), success) -{ - - let inv := mload(0x1a00) - let v - - v := mload(0x1540) - mstore(5440, mulmod(mload(0x19c0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1860) - mstore(6240, mulmod(mload(0x19a0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1820) - mstore(6176, mulmod(mload(0x1980), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x17e0) - mstore(6112, mulmod(mload(0x1960), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x17a0) - mstore(6048, mulmod(mload(0x1940), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1760) - mstore(5984, mulmod(mload(0x1920), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1720) - mstore(5920, mulmod(mload(0x1900), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x16e0) - mstore(5856, mulmod(mload(0x18e0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x16a0) - mstore(5792, mulmod(mload(0x18c0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1660) - mstore(5728, mulmod(mload(0x18a0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1620) - mstore(5664, mulmod(mload(0x1880), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x15e0) - mstore(5600, mulmod(mload(0x15a0), inv, f_q)) - inv := mulmod(v, inv, f_q) - mstore(0x15a0, inv) + prod := mulmod(mload(0x1880), prod, f_q) + mstore(0x1a00, prod) - } -mstore(0x1ae0, mulmod(mload(0x1580), mload(0x15a0), f_q)) -mstore(0x1b00, mulmod(mload(0x15c0), mload(0x15e0), f_q)) -mstore(0x1b20, mulmod(mload(0x1600), mload(0x1620), f_q)) -mstore(0x1b40, mulmod(mload(0x1640), mload(0x1660), f_q)) -mstore(0x1b60, mulmod(mload(0x1680), mload(0x16a0), f_q)) -mstore(0x1b80, mulmod(mload(0x16c0), mload(0x16e0), f_q)) -mstore(0x1ba0, mulmod(mload(0x1700), mload(0x1720), f_q)) -mstore(0x1bc0, mulmod(mload(0x1740), mload(0x1760), f_q)) -mstore(0x1be0, mulmod(mload(0x1780), mload(0x17a0), f_q)) -mstore(0x1c00, mulmod(mload(0x17c0), mload(0x17e0), f_q)) -mstore(0x1c20, mulmod(mload(0x1800), mload(0x1820), f_q)) -mstore(0x1c40, mulmod(mload(0x1840), mload(0x1860), f_q)) -{ - let result := mulmod(mload(0x1bc0), mload(0x20), f_q) -result := addmod(mulmod(mload(0x1be0), mload(0x40), f_q), result, f_q) -result := addmod(mulmod(mload(0x1c00), mload(0x60), f_q), result, f_q) -result := addmod(mulmod(mload(0x1c20), mload(0x80), f_q), result, f_q) -result := addmod(mulmod(mload(0x1c40), mload(0xa0), f_q), result, f_q) -mstore(7264, result) - } -mstore(0x1c80, mulmod(mload(0xb20), mload(0xb40), f_q)) -mstore(0x1ca0, addmod(mload(0x1c80), mload(0xae0), f_q)) -mstore(0x1cc0, addmod(mload(0x1ca0), sub(f_q, mload(0xb00)), f_q)) -mstore(0x1ce0, mulmod(mload(0x1cc0), mload(0xe80), f_q)) -mstore(0x1d00, mulmod(mload(0x840), mload(0x1ce0), f_q)) -mstore(0x1d20, addmod(1, sub(f_q, mload(0xe60)), f_q)) -mstore(0x1d40, mulmod(mload(0x1d20), mload(0xe60), f_q)) -mstore(0x1d60, addmod(mload(0xae0), sub(f_q, mload(0xb00)), f_q)) -mstore(0x1d80, mulmod(mload(0x1d60), mload(0x1d40), f_q)) -mstore(0x1da0, addmod(mload(0x1d00), mload(0x1d80), f_q)) -mstore(0x1dc0, mulmod(mload(0x840), mload(0x1da0), f_q)) -mstore(0x1de0, addmod(mload(0xb20), sub(f_q, mload(0xb60)), f_q)) -mstore(0x1e00, mulmod(mload(0x1de0), mload(0xe80), f_q)) -mstore(0x1e20, addmod(mload(0x1dc0), mload(0x1e00), f_q)) -mstore(0x1e40, mulmod(mload(0x840), mload(0x1e20), f_q)) -mstore(0x1e60, addmod(2, sub(f_q, mload(0xe60)), f_q)) -mstore(0x1e80, mulmod(mload(0x1e60), mload(0xe60), f_q)) -mstore(0x1ea0, addmod(mload(0xb80), sub(f_q, mload(0xae0)), f_q)) -mstore(0x1ec0, mulmod(mload(0x1ea0), mload(0x1e80), f_q)) -mstore(0x1ee0, addmod(mload(0x1e40), mload(0x1ec0), f_q)) -mstore(0x1f00, mulmod(mload(0x840), mload(0x1ee0), f_q)) -mstore(0x1f20, addmod(mload(0xba0), sub(f_q, mload(0xbc0)), f_q)) -mstore(0x1f40, mulmod(mload(0x1f20), mload(0xe00), f_q)) -mstore(0x1f60, addmod(mload(0x1f00), mload(0x1f40), f_q)) -mstore(0x1f80, mulmod(mload(0x840), mload(0x1f60), f_q)) -mstore(0x1fa0, addmod(mload(0xbe0), sub(f_q, mload(0xc00)), f_q)) -mstore(0x1fc0, mulmod(mload(0x1fa0), mload(0xe00), f_q)) -mstore(0x1fe0, addmod(mload(0x1f80), mload(0x1fc0), f_q)) -mstore(0x2000, mulmod(mload(0x840), mload(0x1fe0), f_q)) -mstore(0x2020, addmod(1, sub(f_q, mload(0xe00)), f_q)) -mstore(0x2040, mulmod(mload(0x2020), 1, f_q)) -mstore(0x2060, addmod(1, sub(f_q, mload(0xe20)), f_q)) -mstore(0x2080, mulmod(mload(0x2060), mload(0x2040), f_q)) -mstore(0x20a0, addmod(1, sub(f_q, mload(0x2080)), f_q)) -mstore(0x20c0, addmod(mload(0xc20), sub(f_q, mload(0xc40)), f_q)) -mstore(0x20e0, mulmod(mload(0x20c0), mload(0x20a0), f_q)) -mstore(0x2100, addmod(mload(0x2000), mload(0x20e0), f_q)) -mstore(0x2120, mulmod(mload(0x840), mload(0x2100), f_q)) -mstore(0x2140, mulmod(mload(0xba0), mload(0xe20), f_q)) -mstore(0x2160, mulmod(mload(0xc60), mload(0xba0), f_q)) -mstore(0x2180, addmod(1, sub(f_q, mload(0x2160)), f_q)) -mstore(0x21a0, mulmod(mload(0x2180), mload(0x2140), f_q)) -mstore(0x21c0, addmod(mload(0x2120), mload(0x21a0), f_q)) -mstore(0x21e0, mulmod(mload(0x840), mload(0x21c0), f_q)) -mstore(0x2200, mulmod(mload(0xc20), mload(0x20a0), f_q)) -mstore(0x2220, mulmod(mload(0xc80), mload(0xc20), f_q)) -mstore(0x2240, addmod(1, sub(f_q, mload(0x2220)), f_q)) -mstore(0x2260, mulmod(mload(0x2240), mload(0x2200), f_q)) -mstore(0x2280, addmod(mload(0x21e0), mload(0x2260), f_q)) -mstore(0x22a0, mulmod(mload(0x840), mload(0x2280), f_q)) -mstore(0x22c0, addmod(mload(0xcc0), sub(f_q, mload(0xba0)), f_q)) -mstore(0x22e0, mulmod(mload(0x22c0), mload(0xe20), f_q)) -mstore(0x2300, mulmod(mload(0xca0), mload(0x22c0), f_q)) -mstore(0x2320, addmod(1, sub(f_q, mload(0x2300)), f_q)) -mstore(0x2340, mulmod(mload(0x2320), mload(0x22e0), f_q)) -mstore(0x2360, addmod(mload(0x22a0), mload(0x2340), f_q)) -mstore(0x2380, mulmod(mload(0x840), mload(0x2360), f_q)) -mstore(0x23a0, mulmod(mload(0xbe0), mload(0x2180), f_q)) -mstore(0x23c0, mulmod(mload(0x23a0), mload(0xe20), f_q)) -mstore(0x23e0, addmod(mload(0x2380), mload(0x23c0), f_q)) -mstore(0x2400, mulmod(mload(0x840), mload(0x23e0), f_q)) -mstore(0x2420, mulmod(mload(0xcc0), mload(0x2180), f_q)) -mstore(0x2440, mulmod(mload(0x2420), mload(0xe20), f_q)) -mstore(0x2460, addmod(mload(0x2400), mload(0x2440), f_q)) -mstore(0x2480, mulmod(mload(0x840), mload(0x2460), f_q)) -mstore(0x24a0, mulmod(mload(0xda0), mload(0x2180), f_q)) -mstore(0x24c0, mulmod(mload(0x24a0), mload(0xe20), f_q)) -mstore(0x24e0, addmod(mload(0x2480), mload(0x24c0), f_q)) -mstore(0x2500, mulmod(mload(0x840), mload(0x24e0), f_q)) -mstore(0x2520, mulmod(mload(0xd60), mload(0x2180), f_q)) -mstore(0x2540, mulmod(mload(0x2520), mload(0xe20), f_q)) -mstore(0x2560, addmod(mload(0x2500), mload(0x2540), f_q)) -mstore(0x2580, mulmod(mload(0x840), mload(0x2560), f_q)) -mstore(0x25a0, addmod(1, sub(f_q, mload(0x2180)), f_q)) -mstore(0x25c0, mulmod(mload(0x25a0), mload(0xe20), f_q)) -mstore(0x25e0, addmod(mload(0xd00), sub(f_q, mload(0xbe0)), f_q)) -mstore(0x2600, addmod(mload(0x25e0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) -mstore(0x2620, mulmod(mload(0x2600), mload(0x2320), f_q)) -mstore(0x2640, mulmod(mload(0x2620), mload(0x25c0), f_q)) -mstore(0x2660, addmod(mload(0x2580), mload(0x2640), f_q)) -mstore(0x2680, mulmod(mload(0x840), mload(0x2660), f_q)) -mstore(0x26a0, mulmod(mload(0xd00), mload(0x22c0), f_q)) -mstore(0x26c0, mulmod(mload(0x26a0), mload(0x25c0), f_q)) -mstore(0x26e0, addmod(mload(0x2680), mload(0x26c0), f_q)) -mstore(0x2700, mulmod(mload(0x840), mload(0x26e0), f_q)) -mstore(0x2720, addmod(mload(0xd80), sub(f_q, mload(0xd60)), f_q)) -mstore(0x2740, mulmod(mload(0xd40), mload(0xd20), f_q)) -mstore(0x2760, addmod(1, sub(f_q, mload(0x2740)), f_q)) -mstore(0x2780, mulmod(mload(0x2760), 4, f_q)) -mstore(0x27a0, mulmod(mload(0x2740), 16, f_q)) -mstore(0x27c0, addmod(mload(0x2780), mload(0x27a0), f_q)) -mstore(0x27e0, addmod(mload(0x2720), sub(f_q, mload(0x27c0)), f_q)) -mstore(0x2800, mulmod(mload(0x27e0), mload(0x2320), f_q)) -mstore(0x2820, mulmod(mload(0x2800), mload(0x25c0), f_q)) -mstore(0x2840, addmod(mload(0x2700), mload(0x2820), f_q)) -mstore(0x2860, mulmod(mload(0x840), mload(0x2840), f_q)) -mstore(0x2880, mulmod(mload(0xce0), mload(0xcc0), f_q)) -mstore(0x28a0, mulmod(mload(0x22c0), mload(0x2880), f_q)) -mstore(0x28c0, addmod(mload(0xd80), sub(f_q, mload(0x27c0)), f_q)) -mstore(0x28e0, mulmod(mload(0x28c0), mload(0x28a0), f_q)) -mstore(0x2900, mulmod(mload(0x28e0), mload(0x25c0), f_q)) -mstore(0x2920, addmod(mload(0x2860), mload(0x2900), f_q)) -mstore(0x2940, mulmod(mload(0x840), mload(0x2920), f_q)) -mstore(0x2960, mulmod(mload(0xda0), mload(0x2320), f_q)) -mstore(0x2980, mulmod(mload(0x2960), mload(0x25c0), f_q)) -mstore(0x29a0, addmod(mload(0x2940), mload(0x2980), f_q)) -mstore(0x29c0, mulmod(mload(0x840), mload(0x29a0), f_q)) -mstore(0x29e0, addmod(mload(0xda0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) -mstore(0x2a00, mulmod(mload(0x29e0), mload(0x22c0), f_q)) -mstore(0x2a20, mulmod(mload(0x2a00), mload(0x25c0), f_q)) -mstore(0x2a40, addmod(mload(0x29c0), mload(0x2a20), f_q)) -mstore(0x2a60, mulmod(mload(0x840), mload(0x2a40), f_q)) -mstore(0x2a80, mulmod(mload(0x25a0), mload(0xe40), f_q)) -mstore(0x2aa0, addmod(mload(0xbe0), 21888242871839275222246405745257275088548364400416034343698204186575808495617, f_q)) -mstore(0x2ac0, mulmod(mload(0x2aa0), mload(0x2a80), f_q)) -mstore(0x2ae0, addmod(mload(0x2a60), mload(0x2ac0), f_q)) -mstore(0x2b00, mulmod(mload(0x840), mload(0x2ae0), f_q)) -mstore(0x2b20, mulmod(mload(0x2240), 4, f_q)) -mstore(0x2b40, addmod(1, sub(f_q, mload(0x2240)), f_q)) -mstore(0x2b60, mulmod(mload(0x2b40), 16, f_q)) -mstore(0x2b80, addmod(mload(0x2b20), mload(0x2b60), f_q)) -mstore(0x2ba0, addmod(mload(0xd60), sub(f_q, mload(0x2b80)), f_q)) -mstore(0x2bc0, mulmod(mload(0x2ba0), mload(0x2a80), f_q)) -mstore(0x2be0, addmod(mload(0x2b00), mload(0x2bc0), f_q)) -mstore(0x2c00, mulmod(mload(0x840), mload(0x2be0), f_q)) -mstore(0x2c20, addmod(mload(0xde0), 21888242871839275222246405745257275088548364400416034343698204186575808495609, f_q)) -mstore(0x2c40, mulmod(mload(0x2c20), mload(0xe00), f_q)) -mstore(0x2c60, mulmod(mload(0xc60), mload(0x2c20), f_q)) -mstore(0x2c80, addmod(1, sub(f_q, mload(0x2c60)), f_q)) -mstore(0x2ca0, mulmod(mload(0x2c80), mload(0x2c40), f_q)) -mstore(0x2cc0, addmod(mload(0x2c00), mload(0x2ca0), f_q)) -mstore(0x2ce0, mulmod(mload(0x840), mload(0x2cc0), f_q)) -mstore(0x2d00, mulmod(mload(0x2c80), mload(0xe00), f_q)) -mstore(0x2d20, mulmod(mload(0x2240), mload(0x2d00), f_q)) -mstore(0x2d40, mulmod(mload(0xd20), mload(0x2d20), f_q)) -mstore(0x2d60, addmod(mload(0x2ce0), mload(0x2d40), f_q)) -mstore(0x2d80, mulmod(mload(0x840), mload(0x2d60), f_q)) -mstore(0x2da0, addmod(1, sub(f_q, mload(0xf40)), f_q)) -mstore(0x2dc0, mulmod(mload(0x2da0), mload(0x1bc0), f_q)) -mstore(0x2de0, addmod(mload(0x2d80), mload(0x2dc0), f_q)) -mstore(0x2e00, mulmod(mload(0x840), mload(0x2de0), f_q)) -mstore(0x2e20, mulmod(mload(0xf40), mload(0xf40), f_q)) -mstore(0x2e40, addmod(mload(0x2e20), sub(f_q, mload(0xf40)), f_q)) -mstore(0x2e60, mulmod(mload(0x2e40), mload(0x1ae0), f_q)) -mstore(0x2e80, addmod(mload(0x2e00), mload(0x2e60), f_q)) -mstore(0x2ea0, mulmod(mload(0x840), mload(0x2e80), f_q)) -mstore(0x2ec0, addmod(1, sub(f_q, mload(0x1ae0)), f_q)) -mstore(0x2ee0, addmod(mload(0x1b00), mload(0x1b20), f_q)) -mstore(0x2f00, addmod(mload(0x2ee0), mload(0x1b40), f_q)) -mstore(0x2f20, addmod(mload(0x2f00), mload(0x1b60), f_q)) -mstore(0x2f40, addmod(mload(0x2f20), mload(0x1b80), f_q)) -mstore(0x2f60, addmod(mload(0x2f40), mload(0x1ba0), f_q)) -mstore(0x2f80, addmod(mload(0x2ec0), sub(f_q, mload(0x2f60)), f_q)) -mstore(0x2fa0, mulmod(mload(0xec0), mload(0x680), f_q)) -mstore(0x2fc0, addmod(mload(0xae0), mload(0x2fa0), f_q)) -mstore(0x2fe0, addmod(mload(0x2fc0), mload(0x6e0), f_q)) -mstore(0x3000, mulmod(mload(0xee0), mload(0x680), f_q)) -mstore(0x3020, addmod(mload(0xb00), mload(0x3000), f_q)) -mstore(0x3040, addmod(mload(0x3020), mload(0x6e0), f_q)) -mstore(0x3060, mulmod(mload(0x3040), mload(0x2fe0), f_q)) -mstore(0x3080, mulmod(mload(0xf00), mload(0x680), f_q)) -mstore(0x30a0, addmod(mload(0xb20), mload(0x3080), f_q)) -mstore(0x30c0, addmod(mload(0x30a0), mload(0x6e0), f_q)) -mstore(0x30e0, mulmod(mload(0x30c0), mload(0x3060), f_q)) -mstore(0x3100, mulmod(mload(0xf20), mload(0x680), f_q)) -mstore(0x3120, addmod(mload(0x1c60), mload(0x3100), f_q)) -mstore(0x3140, addmod(mload(0x3120), mload(0x6e0), f_q)) -mstore(0x3160, mulmod(mload(0x3140), mload(0x30e0), f_q)) -mstore(0x3180, mulmod(mload(0x3160), mload(0xf60), f_q)) -mstore(0x31a0, mulmod(1, mload(0x680), f_q)) -mstore(0x31c0, mulmod(mload(0xaa0), mload(0x31a0), f_q)) -mstore(0x31e0, addmod(mload(0xae0), mload(0x31c0), f_q)) -mstore(0x3200, addmod(mload(0x31e0), mload(0x6e0), f_q)) -mstore(0x3220, mulmod(4131629893567559867359510883348571134090853742863529169391034518566172092834, mload(0x680), f_q)) -mstore(0x3240, mulmod(mload(0xaa0), mload(0x3220), f_q)) -mstore(0x3260, addmod(mload(0xb00), mload(0x3240), f_q)) -mstore(0x3280, addmod(mload(0x3260), mload(0x6e0), f_q)) -mstore(0x32a0, mulmod(mload(0x3280), mload(0x3200), f_q)) -mstore(0x32c0, mulmod(8910878055287538404433155982483128285667088683464058436815641868457422632747, mload(0x680), f_q)) -mstore(0x32e0, mulmod(mload(0xaa0), mload(0x32c0), f_q)) -mstore(0x3300, addmod(mload(0xb20), mload(0x32e0), f_q)) -mstore(0x3320, addmod(mload(0x3300), mload(0x6e0), f_q)) -mstore(0x3340, mulmod(mload(0x3320), mload(0x32a0), f_q)) -mstore(0x3360, mulmod(11166246659983828508719468090013646171463329086121580628794302409516816350802, mload(0x680), f_q)) -mstore(0x3380, mulmod(mload(0xaa0), mload(0x3360), f_q)) -mstore(0x33a0, addmod(mload(0x1c60), mload(0x3380), f_q)) -mstore(0x33c0, addmod(mload(0x33a0), mload(0x6e0), f_q)) -mstore(0x33e0, mulmod(mload(0x33c0), mload(0x3340), f_q)) -mstore(0x3400, mulmod(mload(0x33e0), mload(0xf40), f_q)) -mstore(0x3420, addmod(mload(0x3180), sub(f_q, mload(0x3400)), f_q)) -mstore(0x3440, mulmod(mload(0x3420), mload(0x2f80), f_q)) -mstore(0x3460, addmod(mload(0x2ea0), mload(0x3440), f_q)) -mstore(0x3480, mulmod(mload(0x840), mload(0x3460), f_q)) -mstore(0x34a0, addmod(1, sub(f_q, mload(0xf80)), f_q)) -mstore(0x34c0, mulmod(mload(0x34a0), mload(0x1bc0), f_q)) -mstore(0x34e0, addmod(mload(0x3480), mload(0x34c0), f_q)) -mstore(0x3500, mulmod(mload(0x840), mload(0x34e0), f_q)) -mstore(0x3520, mulmod(mload(0xf80), mload(0xf80), f_q)) -mstore(0x3540, addmod(mload(0x3520), sub(f_q, mload(0xf80)), f_q)) -mstore(0x3560, mulmod(mload(0x3540), mload(0x1ae0), f_q)) -mstore(0x3580, addmod(mload(0x3500), mload(0x3560), f_q)) -mstore(0x35a0, mulmod(mload(0x840), mload(0x3580), f_q)) -mstore(0x35c0, addmod(mload(0xfc0), mload(0x680), f_q)) -mstore(0x35e0, mulmod(mload(0x35c0), mload(0xfa0), f_q)) -mstore(0x3600, addmod(mload(0x1000), mload(0x6e0), f_q)) -mstore(0x3620, mulmod(mload(0x3600), mload(0x35e0), f_q)) -mstore(0x3640, addmod(mload(0x22c0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) -mstore(0x3660, mulmod(mload(0x2880), mload(0x3640), f_q)) -mstore(0x3680, mulmod(mload(0x2300), mload(0x3660), f_q)) -mstore(0x36a0, addmod(mload(0x3680), mload(0x680), f_q)) -mstore(0x36c0, mulmod(mload(0x36a0), mload(0xf80), f_q)) -mstore(0x36e0, addmod(mload(0xdc0), mload(0x6e0), f_q)) -mstore(0x3700, mulmod(mload(0x36e0), mload(0x36c0), f_q)) -mstore(0x3720, addmod(mload(0x3620), sub(f_q, mload(0x3700)), f_q)) -mstore(0x3740, mulmod(mload(0x3720), mload(0x2f80), f_q)) -mstore(0x3760, addmod(mload(0x35a0), mload(0x3740), f_q)) -mstore(0x3780, mulmod(mload(0x840), mload(0x3760), f_q)) -mstore(0x37a0, addmod(mload(0xfc0), sub(f_q, mload(0x1000)), f_q)) -mstore(0x37c0, mulmod(mload(0x37a0), mload(0x1bc0), f_q)) -mstore(0x37e0, addmod(mload(0x3780), mload(0x37c0), f_q)) -mstore(0x3800, mulmod(mload(0x840), mload(0x37e0), f_q)) -mstore(0x3820, mulmod(mload(0x37a0), mload(0x2f80), f_q)) -mstore(0x3840, addmod(mload(0xfc0), sub(f_q, mload(0xfe0)), f_q)) -mstore(0x3860, mulmod(mload(0x3840), mload(0x3820), f_q)) -mstore(0x3880, addmod(mload(0x3800), mload(0x3860), f_q)) -mstore(0x38a0, mulmod(mload(0x840), mload(0x3880), f_q)) -mstore(0x38c0, addmod(1, sub(f_q, mload(0x1020)), f_q)) -mstore(0x38e0, mulmod(mload(0x38c0), mload(0x1bc0), f_q)) -mstore(0x3900, addmod(mload(0x38a0), mload(0x38e0), f_q)) -mstore(0x3920, mulmod(mload(0x840), mload(0x3900), f_q)) -mstore(0x3940, mulmod(mload(0x1020), mload(0x1020), f_q)) -mstore(0x3960, addmod(mload(0x3940), sub(f_q, mload(0x1020)), f_q)) -mstore(0x3980, mulmod(mload(0x3960), mload(0x1ae0), f_q)) -mstore(0x39a0, addmod(mload(0x3920), mload(0x3980), f_q)) -mstore(0x39c0, mulmod(mload(0x840), mload(0x39a0), f_q)) -mstore(0x39e0, addmod(mload(0x1060), mload(0x680), f_q)) -mstore(0x3a00, mulmod(mload(0x39e0), mload(0x1040), f_q)) -mstore(0x3a20, addmod(mload(0x10a0), mload(0x6e0), f_q)) -mstore(0x3a40, mulmod(mload(0x3a20), mload(0x3a00), f_q)) -mstore(0x3a60, mulmod(mload(0x2b40), mload(0xe00), f_q)) -mstore(0x3a80, mulmod(mload(0x2c80), mload(0x3a60), f_q)) -mstore(0x3aa0, mulmod(mload(0xba0), mload(0x3a80), f_q)) -mstore(0x3ac0, mulmod(mload(0x520), mload(0x3aa0), f_q)) -mstore(0x3ae0, mulmod(1, mload(0x3a80), f_q)) -mstore(0x3b00, addmod(mload(0x3ac0), mload(0x3ae0), f_q)) -mstore(0x3b20, mulmod(mload(0x520), mload(0x3b00), f_q)) -mstore(0x3b40, mulmod(mload(0xd20), mload(0x3a80), f_q)) -mstore(0x3b60, addmod(mload(0x3b20), mload(0x3b40), f_q)) -mstore(0x3b80, addmod(mload(0x3b60), mload(0x680), f_q)) -mstore(0x3ba0, mulmod(mload(0x3b80), mload(0x1020), f_q)) -mstore(0x3bc0, mulmod(mload(0x520), mload(0xba0), f_q)) -mstore(0x3be0, addmod(mload(0x3bc0), mload(0xda0), f_q)) -mstore(0x3c00, mulmod(mload(0x520), mload(0x3be0), f_q)) -mstore(0x3c20, addmod(mload(0x3c00), mload(0xd60), f_q)) -mstore(0x3c40, addmod(mload(0x3c20), mload(0x6e0), f_q)) -mstore(0x3c60, mulmod(mload(0x3c40), mload(0x3ba0), f_q)) -mstore(0x3c80, addmod(mload(0x3a40), sub(f_q, mload(0x3c60)), f_q)) -mstore(0x3ca0, mulmod(mload(0x3c80), mload(0x2f80), f_q)) -mstore(0x3cc0, addmod(mload(0x39c0), mload(0x3ca0), f_q)) -mstore(0x3ce0, mulmod(mload(0x840), mload(0x3cc0), f_q)) -mstore(0x3d00, addmod(mload(0x1060), sub(f_q, mload(0x10a0)), f_q)) -mstore(0x3d20, mulmod(mload(0x3d00), mload(0x1bc0), f_q)) -mstore(0x3d40, addmod(mload(0x3ce0), mload(0x3d20), f_q)) -mstore(0x3d60, mulmod(mload(0x840), mload(0x3d40), f_q)) -mstore(0x3d80, mulmod(mload(0x3d00), mload(0x2f80), f_q)) -mstore(0x3da0, addmod(mload(0x1060), sub(f_q, mload(0x1080)), f_q)) -mstore(0x3dc0, mulmod(mload(0x3da0), mload(0x3d80), f_q)) -mstore(0x3de0, addmod(mload(0x3d60), mload(0x3dc0), f_q)) -mstore(0x3e00, mulmod(mload(0x1520), mload(0x1520), f_q)) -mstore(0x3e20, mulmod(mload(0x3e00), mload(0x1520), f_q)) -mstore(0x3e40, mulmod(mload(0x3e20), mload(0x1520), f_q)) -mstore(0x3e60, mulmod(mload(0x3e40), mload(0x1520), f_q)) -mstore(0x3e80, mulmod(mload(0x3e60), mload(0x1520), f_q)) -mstore(0x3ea0, mulmod(mload(0x3e80), mload(0x1520), f_q)) -mstore(0x3ec0, mulmod(mload(0x3ea0), mload(0x1520), f_q)) -mstore(0x3ee0, mulmod(1, mload(0x1520), f_q)) -mstore(0x3f00, mulmod(1, mload(0x3e00), f_q)) -mstore(0x3f20, mulmod(1, mload(0x3e20), f_q)) -mstore(0x3f40, mulmod(1, mload(0x3e40), f_q)) -mstore(0x3f60, mulmod(1, mload(0x3e60), f_q)) -mstore(0x3f80, mulmod(1, mload(0x3e80), f_q)) -mstore(0x3fa0, mulmod(1, mload(0x3ea0), f_q)) -mstore(0x3fc0, mulmod(mload(0x3de0), mload(0x1540), f_q)) -mstore(0x3fe0, mulmod(mload(0x12c0), mload(0x12c0), f_q)) -mstore(0x4000, mulmod(mload(0x3fe0), mload(0x12c0), f_q)) -mstore(0x4020, mulmod(mload(0x4000), mload(0x12c0), f_q)) -mstore(0x4040, mulmod(mload(0x4020), mload(0x12c0), f_q)) -mstore(0x4060, mulmod(mload(0x4040), mload(0x12c0), f_q)) -mstore(0x4080, mulmod(mload(0x10e0), mload(0x10e0), f_q)) -mstore(0x40a0, mulmod(mload(0x4080), mload(0x10e0), f_q)) -mstore(0x40c0, mulmod(mload(0x40a0), mload(0x10e0), f_q)) -mstore(0x40e0, mulmod(mload(0x40c0), mload(0x10e0), f_q)) -mstore(0x4100, mulmod(mload(0x40e0), mload(0x10e0), f_q)) -mstore(0x4120, mulmod(mload(0x4100), mload(0x10e0), f_q)) -mstore(0x4140, mulmod(mload(0x4120), mload(0x10e0), f_q)) -mstore(0x4160, mulmod(mload(0x4140), mload(0x10e0), f_q)) -mstore(0x4180, mulmod(mload(0x4160), mload(0x10e0), f_q)) -mstore(0x41a0, mulmod(mload(0x4180), mload(0x10e0), f_q)) -mstore(0x41c0, mulmod(mload(0x41a0), mload(0x10e0), f_q)) -mstore(0x41e0, mulmod(mload(0x41c0), mload(0x10e0), f_q)) -mstore(0x4200, mulmod(mload(0x41e0), mload(0x10e0), f_q)) -mstore(0x4220, mulmod(mload(0x4200), mload(0x10e0), f_q)) -mstore(0x4240, mulmod(mload(0x4220), mload(0x10e0), f_q)) -mstore(0x4260, mulmod(mload(0x4240), mload(0x10e0), f_q)) -mstore(0x4280, mulmod(mload(0x4260), mload(0x10e0), f_q)) -mstore(0x42a0, mulmod(mload(0x4280), mload(0x10e0), f_q)) -mstore(0x42c0, mulmod(mload(0x42a0), mload(0x10e0), f_q)) -mstore(0x42e0, mulmod(mload(0x42c0), mload(0x10e0), f_q)) -mstore(0x4300, mulmod(mload(0x42e0), mload(0x10e0), f_q)) -mstore(0x4320, mulmod(mload(0x4300), mload(0x10e0), f_q)) -mstore(0x4340, mulmod(mload(0x4320), mload(0x10e0), f_q)) -mstore(0x4360, mulmod(mload(0x4340), mload(0x10e0), f_q)) -mstore(0x4380, mulmod(mload(0x4360), mload(0x10e0), f_q)) -mstore(0x43a0, mulmod(mload(0x4380), mload(0x10e0), f_q)) -mstore(0x43c0, mulmod(mload(0x43a0), mload(0x10e0), f_q)) -mstore(0x43e0, mulmod(mload(0x43c0), mload(0x10e0), f_q)) -mstore(0x4400, mulmod(mload(0x43e0), mload(0x10e0), f_q)) -mstore(0x4420, mulmod(mload(0x4400), mload(0x10e0), f_q)) -mstore(0x4440, mulmod(mload(0x4420), mload(0x10e0), f_q)) -mstore(0x4460, mulmod(sub(f_q, mload(0xae0)), 1, f_q)) -mstore(0x4480, mulmod(sub(f_q, mload(0xb00)), mload(0x10e0), f_q)) -mstore(0x44a0, mulmod(1, mload(0x10e0), f_q)) -mstore(0x44c0, addmod(mload(0x4460), mload(0x4480), f_q)) -mstore(0x44e0, mulmod(sub(f_q, mload(0xb20)), mload(0x4080), f_q)) -mstore(0x4500, mulmod(1, mload(0x4080), f_q)) -mstore(0x4520, addmod(mload(0x44c0), mload(0x44e0), f_q)) -mstore(0x4540, mulmod(sub(f_q, mload(0xb80)), mload(0x40a0), f_q)) -mstore(0x4560, mulmod(1, mload(0x40a0), f_q)) -mstore(0x4580, addmod(mload(0x4520), mload(0x4540), f_q)) -mstore(0x45a0, mulmod(sub(f_q, mload(0xba0)), mload(0x40c0), f_q)) -mstore(0x45c0, mulmod(1, mload(0x40c0), f_q)) -mstore(0x45e0, addmod(mload(0x4580), mload(0x45a0), f_q)) -mstore(0x4600, mulmod(sub(f_q, mload(0xbe0)), mload(0x40e0), f_q)) -mstore(0x4620, mulmod(1, mload(0x40e0), f_q)) -mstore(0x4640, addmod(mload(0x45e0), mload(0x4600), f_q)) -mstore(0x4660, mulmod(sub(f_q, mload(0xc20)), mload(0x4100), f_q)) -mstore(0x4680, mulmod(1, mload(0x4100), f_q)) -mstore(0x46a0, addmod(mload(0x4640), mload(0x4660), f_q)) -mstore(0x46c0, mulmod(sub(f_q, mload(0xc60)), mload(0x4120), f_q)) -mstore(0x46e0, mulmod(1, mload(0x4120), f_q)) -mstore(0x4700, addmod(mload(0x46a0), mload(0x46c0), f_q)) -mstore(0x4720, mulmod(sub(f_q, mload(0xc80)), mload(0x4140), f_q)) -mstore(0x4740, mulmod(1, mload(0x4140), f_q)) -mstore(0x4760, addmod(mload(0x4700), mload(0x4720), f_q)) -mstore(0x4780, mulmod(sub(f_q, mload(0xca0)), mload(0x4160), f_q)) -mstore(0x47a0, mulmod(1, mload(0x4160), f_q)) -mstore(0x47c0, addmod(mload(0x4760), mload(0x4780), f_q)) -mstore(0x47e0, mulmod(sub(f_q, mload(0xd60)), mload(0x4180), f_q)) -mstore(0x4800, mulmod(1, mload(0x4180), f_q)) -mstore(0x4820, addmod(mload(0x47c0), mload(0x47e0), f_q)) -mstore(0x4840, mulmod(sub(f_q, mload(0xda0)), mload(0x41a0), f_q)) -mstore(0x4860, mulmod(1, mload(0x41a0), f_q)) -mstore(0x4880, addmod(mload(0x4820), mload(0x4840), f_q)) -mstore(0x48a0, mulmod(sub(f_q, mload(0xf40)), mload(0x41c0), f_q)) -mstore(0x48c0, mulmod(1, mload(0x41c0), f_q)) -mstore(0x48e0, addmod(mload(0x4880), mload(0x48a0), f_q)) -mstore(0x4900, mulmod(sub(f_q, mload(0xf80)), mload(0x41e0), f_q)) -mstore(0x4920, mulmod(1, mload(0x41e0), f_q)) -mstore(0x4940, addmod(mload(0x48e0), mload(0x4900), f_q)) -mstore(0x4960, mulmod(sub(f_q, mload(0xfc0)), mload(0x4200), f_q)) -mstore(0x4980, mulmod(1, mload(0x4200), f_q)) -mstore(0x49a0, addmod(mload(0x4940), mload(0x4960), f_q)) -mstore(0x49c0, mulmod(sub(f_q, mload(0x1000)), mload(0x4220), f_q)) -mstore(0x49e0, mulmod(1, mload(0x4220), f_q)) -mstore(0x4a00, addmod(mload(0x49a0), mload(0x49c0), f_q)) -mstore(0x4a20, mulmod(sub(f_q, mload(0x1020)), mload(0x4240), f_q)) -mstore(0x4a40, mulmod(1, mload(0x4240), f_q)) -mstore(0x4a60, addmod(mload(0x4a00), mload(0x4a20), f_q)) -mstore(0x4a80, mulmod(sub(f_q, mload(0x1060)), mload(0x4260), f_q)) -mstore(0x4aa0, mulmod(1, mload(0x4260), f_q)) -mstore(0x4ac0, addmod(mload(0x4a60), mload(0x4a80), f_q)) -mstore(0x4ae0, mulmod(sub(f_q, mload(0x10a0)), mload(0x4280), f_q)) -mstore(0x4b00, mulmod(1, mload(0x4280), f_q)) -mstore(0x4b20, addmod(mload(0x4ac0), mload(0x4ae0), f_q)) -mstore(0x4b40, mulmod(sub(f_q, mload(0xdc0)), mload(0x42a0), f_q)) -mstore(0x4b60, mulmod(1, mload(0x42a0), f_q)) -mstore(0x4b80, addmod(mload(0x4b20), mload(0x4b40), f_q)) -mstore(0x4ba0, mulmod(sub(f_q, mload(0xde0)), mload(0x42c0), f_q)) -mstore(0x4bc0, mulmod(1, mload(0x42c0), f_q)) -mstore(0x4be0, addmod(mload(0x4b80), mload(0x4ba0), f_q)) -mstore(0x4c00, mulmod(sub(f_q, mload(0xe00)), mload(0x42e0), f_q)) -mstore(0x4c20, mulmod(1, mload(0x42e0), f_q)) -mstore(0x4c40, addmod(mload(0x4be0), mload(0x4c00), f_q)) -mstore(0x4c60, mulmod(sub(f_q, mload(0xe20)), mload(0x4300), f_q)) -mstore(0x4c80, mulmod(1, mload(0x4300), f_q)) -mstore(0x4ca0, addmod(mload(0x4c40), mload(0x4c60), f_q)) -mstore(0x4cc0, mulmod(sub(f_q, mload(0xe40)), mload(0x4320), f_q)) -mstore(0x4ce0, mulmod(1, mload(0x4320), f_q)) -mstore(0x4d00, addmod(mload(0x4ca0), mload(0x4cc0), f_q)) -mstore(0x4d20, mulmod(sub(f_q, mload(0xe60)), mload(0x4340), f_q)) -mstore(0x4d40, mulmod(1, mload(0x4340), f_q)) -mstore(0x4d60, addmod(mload(0x4d00), mload(0x4d20), f_q)) -mstore(0x4d80, mulmod(sub(f_q, mload(0xe80)), mload(0x4360), f_q)) -mstore(0x4da0, mulmod(1, mload(0x4360), f_q)) -mstore(0x4dc0, addmod(mload(0x4d60), mload(0x4d80), f_q)) -mstore(0x4de0, mulmod(sub(f_q, mload(0xec0)), mload(0x4380), f_q)) -mstore(0x4e00, mulmod(1, mload(0x4380), f_q)) -mstore(0x4e20, addmod(mload(0x4dc0), mload(0x4de0), f_q)) -mstore(0x4e40, mulmod(sub(f_q, mload(0xee0)), mload(0x43a0), f_q)) -mstore(0x4e60, mulmod(1, mload(0x43a0), f_q)) -mstore(0x4e80, addmod(mload(0x4e20), mload(0x4e40), f_q)) -mstore(0x4ea0, mulmod(sub(f_q, mload(0xf00)), mload(0x43c0), f_q)) -mstore(0x4ec0, mulmod(1, mload(0x43c0), f_q)) -mstore(0x4ee0, addmod(mload(0x4e80), mload(0x4ea0), f_q)) -mstore(0x4f00, mulmod(sub(f_q, mload(0xf20)), mload(0x43e0), f_q)) -mstore(0x4f20, mulmod(1, mload(0x43e0), f_q)) -mstore(0x4f40, addmod(mload(0x4ee0), mload(0x4f00), f_q)) -mstore(0x4f60, mulmod(sub(f_q, mload(0x3fc0)), mload(0x4400), f_q)) -mstore(0x4f80, mulmod(1, mload(0x4400), f_q)) -mstore(0x4fa0, mulmod(mload(0x3ee0), mload(0x4400), f_q)) -mstore(0x4fc0, mulmod(mload(0x3f00), mload(0x4400), f_q)) -mstore(0x4fe0, mulmod(mload(0x3f20), mload(0x4400), f_q)) -mstore(0x5000, mulmod(mload(0x3f40), mload(0x4400), f_q)) -mstore(0x5020, mulmod(mload(0x3f60), mload(0x4400), f_q)) -mstore(0x5040, mulmod(mload(0x3f80), mload(0x4400), f_q)) -mstore(0x5060, mulmod(mload(0x3fa0), mload(0x4400), f_q)) -mstore(0x5080, addmod(mload(0x4f40), mload(0x4f60), f_q)) -mstore(0x50a0, mulmod(sub(f_q, mload(0xea0)), mload(0x4420), f_q)) -mstore(0x50c0, mulmod(1, mload(0x4420), f_q)) -mstore(0x50e0, addmod(mload(0x5080), mload(0x50a0), f_q)) -mstore(0x5100, mulmod(mload(0x50e0), 1, f_q)) -mstore(0x5120, mulmod(mload(0x44a0), 1, f_q)) -mstore(0x5140, mulmod(mload(0x4500), 1, f_q)) -mstore(0x5160, mulmod(mload(0x4560), 1, f_q)) -mstore(0x5180, mulmod(mload(0x45c0), 1, f_q)) -mstore(0x51a0, mulmod(mload(0x4620), 1, f_q)) -mstore(0x51c0, mulmod(mload(0x4680), 1, f_q)) -mstore(0x51e0, mulmod(mload(0x46e0), 1, f_q)) -mstore(0x5200, mulmod(mload(0x4740), 1, f_q)) -mstore(0x5220, mulmod(mload(0x47a0), 1, f_q)) -mstore(0x5240, mulmod(mload(0x4800), 1, f_q)) -mstore(0x5260, mulmod(mload(0x4860), 1, f_q)) -mstore(0x5280, mulmod(mload(0x48c0), 1, f_q)) -mstore(0x52a0, mulmod(mload(0x4920), 1, f_q)) -mstore(0x52c0, mulmod(mload(0x4980), 1, f_q)) -mstore(0x52e0, mulmod(mload(0x49e0), 1, f_q)) -mstore(0x5300, mulmod(mload(0x4a40), 1, f_q)) -mstore(0x5320, mulmod(mload(0x4aa0), 1, f_q)) -mstore(0x5340, mulmod(mload(0x4b00), 1, f_q)) -mstore(0x5360, mulmod(mload(0x4b60), 1, f_q)) -mstore(0x5380, mulmod(mload(0x4bc0), 1, f_q)) -mstore(0x53a0, mulmod(mload(0x4c20), 1, f_q)) -mstore(0x53c0, mulmod(mload(0x4c80), 1, f_q)) -mstore(0x53e0, mulmod(mload(0x4ce0), 1, f_q)) -mstore(0x5400, mulmod(mload(0x4d40), 1, f_q)) -mstore(0x5420, mulmod(mload(0x4da0), 1, f_q)) -mstore(0x5440, mulmod(mload(0x4e00), 1, f_q)) -mstore(0x5460, mulmod(mload(0x4e60), 1, f_q)) -mstore(0x5480, mulmod(mload(0x4ec0), 1, f_q)) -mstore(0x54a0, mulmod(mload(0x4f20), 1, f_q)) -mstore(0x54c0, mulmod(mload(0x4f80), 1, f_q)) -mstore(0x54e0, mulmod(mload(0x4fa0), 1, f_q)) -mstore(0x5500, mulmod(mload(0x4fc0), 1, f_q)) -mstore(0x5520, mulmod(mload(0x4fe0), 1, f_q)) -mstore(0x5540, mulmod(mload(0x5000), 1, f_q)) -mstore(0x5560, mulmod(mload(0x5020), 1, f_q)) -mstore(0x5580, mulmod(mload(0x5040), 1, f_q)) -mstore(0x55a0, mulmod(mload(0x5060), 1, f_q)) -mstore(0x55c0, mulmod(mload(0x50c0), 1, f_q)) -mstore(0x55e0, mulmod(sub(f_q, mload(0xb40)), 1, f_q)) -mstore(0x5600, mulmod(sub(f_q, mload(0xb60)), mload(0x10e0), f_q)) -mstore(0x5620, addmod(mload(0x55e0), mload(0x5600), f_q)) -mstore(0x5640, mulmod(sub(f_q, mload(0xcc0)), mload(0x4080), f_q)) -mstore(0x5660, addmod(mload(0x5620), mload(0x5640), f_q)) -mstore(0x5680, mulmod(sub(f_q, mload(0xce0)), mload(0x40a0), f_q)) -mstore(0x56a0, addmod(mload(0x5660), mload(0x5680), f_q)) -mstore(0x56c0, mulmod(sub(f_q, mload(0xd00)), mload(0x40c0), f_q)) -mstore(0x56e0, addmod(mload(0x56a0), mload(0x56c0), f_q)) -mstore(0x5700, mulmod(sub(f_q, mload(0xd20)), mload(0x40e0), f_q)) -mstore(0x5720, addmod(mload(0x56e0), mload(0x5700), f_q)) -mstore(0x5740, mulmod(sub(f_q, mload(0xd40)), mload(0x4100), f_q)) -mstore(0x5760, addmod(mload(0x5720), mload(0x5740), f_q)) -mstore(0x5780, mulmod(sub(f_q, mload(0xd80)), mload(0x4120), f_q)) -mstore(0x57a0, addmod(mload(0x5760), mload(0x5780), f_q)) -mstore(0x57c0, mulmod(sub(f_q, mload(0xf60)), mload(0x4140), f_q)) -mstore(0x57e0, addmod(mload(0x57a0), mload(0x57c0), f_q)) -mstore(0x5800, mulmod(sub(f_q, mload(0xfa0)), mload(0x4160), f_q)) -mstore(0x5820, addmod(mload(0x57e0), mload(0x5800), f_q)) -mstore(0x5840, mulmod(sub(f_q, mload(0x1040)), mload(0x4180), f_q)) -mstore(0x5860, addmod(mload(0x5820), mload(0x5840), f_q)) -mstore(0x5880, mulmod(mload(0x5860), mload(0x12c0), f_q)) -mstore(0x58a0, mulmod(1, mload(0x12c0), f_q)) -mstore(0x58c0, mulmod(mload(0x44a0), mload(0x12c0), f_q)) -mstore(0x58e0, mulmod(mload(0x4500), mload(0x12c0), f_q)) -mstore(0x5900, mulmod(mload(0x4560), mload(0x12c0), f_q)) -mstore(0x5920, mulmod(mload(0x45c0), mload(0x12c0), f_q)) -mstore(0x5940, mulmod(mload(0x4620), mload(0x12c0), f_q)) -mstore(0x5960, mulmod(mload(0x4680), mload(0x12c0), f_q)) -mstore(0x5980, mulmod(mload(0x46e0), mload(0x12c0), f_q)) -mstore(0x59a0, mulmod(mload(0x4740), mload(0x12c0), f_q)) -mstore(0x59c0, mulmod(mload(0x47a0), mload(0x12c0), f_q)) -mstore(0x59e0, mulmod(mload(0x4800), mload(0x12c0), f_q)) -mstore(0x5a00, addmod(mload(0x5100), mload(0x5880), f_q)) -mstore(0x5a20, addmod(mload(0x5120), mload(0x58a0), f_q)) -mstore(0x5a40, addmod(mload(0x5140), mload(0x58c0), f_q)) -mstore(0x5a60, addmod(mload(0x5180), mload(0x58e0), f_q)) -mstore(0x5a80, addmod(mload(0x51e0), mload(0x5900), f_q)) -mstore(0x5aa0, addmod(mload(0x51a0), mload(0x5920), f_q)) -mstore(0x5ac0, addmod(mload(0x51c0), mload(0x5940), f_q)) -mstore(0x5ae0, addmod(mload(0x5200), mload(0x5960), f_q)) -mstore(0x5b00, addmod(mload(0x5240), mload(0x5980), f_q)) -mstore(0x5b20, addmod(mload(0x5280), mload(0x59a0), f_q)) -mstore(0x5b40, addmod(mload(0x52a0), mload(0x59c0), f_q)) -mstore(0x5b60, addmod(mload(0x5300), mload(0x59e0), f_q)) -mstore(0x5b80, mulmod(sub(f_q, mload(0xbc0)), 1, f_q)) -mstore(0x5ba0, mulmod(mload(0x5b80), mload(0x3fe0), f_q)) -mstore(0x5bc0, mulmod(1, mload(0x3fe0), f_q)) -mstore(0x5be0, addmod(mload(0x5a00), mload(0x5ba0), f_q)) -mstore(0x5c00, addmod(1, mload(0x5bc0), f_q)) -mstore(0x5c20, mulmod(sub(f_q, mload(0xc00)), 1, f_q)) -mstore(0x5c40, mulmod(mload(0x5c20), mload(0x4000), f_q)) -mstore(0x5c60, mulmod(1, mload(0x4000), f_q)) -mstore(0x5c80, addmod(mload(0x5be0), mload(0x5c40), f_q)) -mstore(0x5ca0, addmod(mload(0x5c00), mload(0x5c60), f_q)) -mstore(0x5cc0, mulmod(sub(f_q, mload(0xc40)), 1, f_q)) -mstore(0x5ce0, mulmod(mload(0x5cc0), mload(0x4020), f_q)) -mstore(0x5d00, mulmod(1, mload(0x4020), f_q)) -mstore(0x5d20, addmod(mload(0x5c80), mload(0x5ce0), f_q)) -mstore(0x5d40, addmod(mload(0x5ca0), mload(0x5d00), f_q)) -mstore(0x5d60, mulmod(sub(f_q, mload(0xfe0)), 1, f_q)) -mstore(0x5d80, mulmod(sub(f_q, mload(0x1080)), mload(0x10e0), f_q)) -mstore(0x5da0, addmod(mload(0x5d60), mload(0x5d80), f_q)) -mstore(0x5dc0, mulmod(mload(0x5da0), mload(0x4040), f_q)) -mstore(0x5de0, mulmod(1, mload(0x4040), f_q)) -mstore(0x5e00, mulmod(mload(0x44a0), mload(0x4040), f_q)) -mstore(0x5e20, addmod(mload(0x5d20), mload(0x5dc0), f_q)) -mstore(0x5e40, addmod(mload(0x52c0), mload(0x5de0), f_q)) -mstore(0x5e60, addmod(mload(0x5320), mload(0x5e00), f_q)) -mstore(0x5e80, mulmod(1, mload(0xaa0), f_q)) -mstore(0x5ea0, mulmod(1, mload(0x5e80), f_q)) -mstore(0x5ec0, mulmod(6955697244493336113861667751840378876927906302623587437721024018233754910398, mload(0xaa0), f_q)) -mstore(0x5ee0, mulmod(mload(0x58a0), mload(0x5ec0), f_q)) -mstore(0x5f00, mulmod(14301109305233875879800880185425345339138649975525900728211315483473936015336, mload(0xaa0), f_q)) -mstore(0x5f20, mulmod(mload(0x5bc0), mload(0x5f00), f_q)) -mstore(0x5f40, mulmod(18692705892880282321496735629591795720478967493699042848104039933759957773311, mload(0xaa0), f_q)) -mstore(0x5f60, mulmod(mload(0x5c60), mload(0x5f40), f_q)) -mstore(0x5f80, mulmod(21870189975119436114252110485335790532642623321946906002882013852447303224967, mload(0xaa0), f_q)) -mstore(0x5fa0, mulmod(mload(0x5d00), mload(0x5f80), f_q)) -mstore(0x5fc0, mulmod(6363119021782681274480715230122258277189830284152385293217720612674619714422, mload(0xaa0), f_q)) -mstore(0x5fe0, mulmod(mload(0x5de0), mload(0x5fc0), f_q)) -mstore(0x6000, 0x0000000000000000000000000000000000000000000000000000000000000001) - mstore(0x6020, 0x0000000000000000000000000000000000000000000000000000000000000002) -mstore(0x6040, mload(0x5e20)) -success := and(eq(staticcall(gas(), 0x7, 0x6000, 0x60, 0x6000, 0x40), 1), success) -mstore(0x6060, mload(0x340)) - mstore(0x6080, mload(0x360)) -mstore(0x60a0, mload(0x5d40)) -success := and(eq(staticcall(gas(), 0x7, 0x6060, 0x60, 0x6060, 0x40), 1), success) -mstore(0x60c0, mload(0x6000)) - mstore(0x60e0, mload(0x6020)) -mstore(0x6100, mload(0x6060)) - mstore(0x6120, mload(0x6080)) -success := and(eq(staticcall(gas(), 0x6, 0x60c0, 0x80, 0x60c0, 0x40), 1), success) -mstore(0x6140, mload(0x380)) - mstore(0x6160, mload(0x3a0)) -mstore(0x6180, mload(0x5a20)) -success := and(eq(staticcall(gas(), 0x7, 0x6140, 0x60, 0x6140, 0x40), 1), success) -mstore(0x61a0, mload(0x60c0)) - mstore(0x61c0, mload(0x60e0)) -mstore(0x61e0, mload(0x6140)) - mstore(0x6200, mload(0x6160)) -success := and(eq(staticcall(gas(), 0x6, 0x61a0, 0x80, 0x61a0, 0x40), 1), success) -mstore(0x6220, mload(0x3c0)) - mstore(0x6240, mload(0x3e0)) -mstore(0x6260, mload(0x5a40)) -success := and(eq(staticcall(gas(), 0x7, 0x6220, 0x60, 0x6220, 0x40), 1), success) -mstore(0x6280, mload(0x61a0)) - mstore(0x62a0, mload(0x61c0)) -mstore(0x62c0, mload(0x6220)) - mstore(0x62e0, mload(0x6240)) -success := and(eq(staticcall(gas(), 0x6, 0x6280, 0x80, 0x6280, 0x40), 1), success) -mstore(0x6300, mload(0x140)) - mstore(0x6320, mload(0x160)) -mstore(0x6340, mload(0x5160)) -success := and(eq(staticcall(gas(), 0x7, 0x6300, 0x60, 0x6300, 0x40), 1), success) -mstore(0x6360, mload(0x6280)) - mstore(0x6380, mload(0x62a0)) -mstore(0x63a0, mload(0x6300)) - mstore(0x63c0, mload(0x6320)) -success := and(eq(staticcall(gas(), 0x6, 0x6360, 0x80, 0x6360, 0x40), 1), success) -mstore(0x63e0, mload(0x180)) - mstore(0x6400, mload(0x1a0)) -mstore(0x6420, mload(0x5a60)) -success := and(eq(staticcall(gas(), 0x7, 0x63e0, 0x60, 0x63e0, 0x40), 1), success) -mstore(0x6440, mload(0x6360)) - mstore(0x6460, mload(0x6380)) -mstore(0x6480, mload(0x63e0)) - mstore(0x64a0, mload(0x6400)) -success := and(eq(staticcall(gas(), 0x6, 0x6440, 0x80, 0x6440, 0x40), 1), success) -mstore(0x64c0, mload(0x1c0)) - mstore(0x64e0, mload(0x1e0)) -mstore(0x6500, mload(0x5aa0)) -success := and(eq(staticcall(gas(), 0x7, 0x64c0, 0x60, 0x64c0, 0x40), 1), success) -mstore(0x6520, mload(0x6440)) - mstore(0x6540, mload(0x6460)) -mstore(0x6560, mload(0x64c0)) - mstore(0x6580, mload(0x64e0)) -success := and(eq(staticcall(gas(), 0x6, 0x6520, 0x80, 0x6520, 0x40), 1), success) -mstore(0x65a0, mload(0x4c0)) - mstore(0x65c0, mload(0x4e0)) -mstore(0x65e0, mload(0x5ac0)) -success := and(eq(staticcall(gas(), 0x7, 0x65a0, 0x60, 0x65a0, 0x40), 1), success) -mstore(0x6600, mload(0x6520)) - mstore(0x6620, mload(0x6540)) -mstore(0x6640, mload(0x65a0)) - mstore(0x6660, mload(0x65c0)) -success := and(eq(staticcall(gas(), 0x6, 0x6600, 0x80, 0x6600, 0x40), 1), success) -mstore(0x6680, mload(0x200)) - mstore(0x66a0, mload(0x220)) -mstore(0x66c0, mload(0x5a80)) -success := and(eq(staticcall(gas(), 0x7, 0x6680, 0x60, 0x6680, 0x40), 1), success) -mstore(0x66e0, mload(0x6600)) - mstore(0x6700, mload(0x6620)) -mstore(0x6720, mload(0x6680)) - mstore(0x6740, mload(0x66a0)) -success := and(eq(staticcall(gas(), 0x6, 0x66e0, 0x80, 0x66e0, 0x40), 1), success) -mstore(0x6760, mload(0x240)) - mstore(0x6780, mload(0x260)) -mstore(0x67a0, mload(0x5ae0)) -success := and(eq(staticcall(gas(), 0x7, 0x6760, 0x60, 0x6760, 0x40), 1), success) -mstore(0x67c0, mload(0x66e0)) - mstore(0x67e0, mload(0x6700)) -mstore(0x6800, mload(0x6760)) - mstore(0x6820, mload(0x6780)) -success := and(eq(staticcall(gas(), 0x6, 0x67c0, 0x80, 0x67c0, 0x40), 1), success) -mstore(0x6840, mload(0x280)) - mstore(0x6860, mload(0x2a0)) -mstore(0x6880, mload(0x5220)) -success := and(eq(staticcall(gas(), 0x7, 0x6840, 0x60, 0x6840, 0x40), 1), success) -mstore(0x68a0, mload(0x67c0)) - mstore(0x68c0, mload(0x67e0)) -mstore(0x68e0, mload(0x6840)) - mstore(0x6900, mload(0x6860)) -success := and(eq(staticcall(gas(), 0x6, 0x68a0, 0x80, 0x68a0, 0x40), 1), success) -mstore(0x6920, mload(0x2c0)) - mstore(0x6940, mload(0x2e0)) -mstore(0x6960, mload(0x5b00)) -success := and(eq(staticcall(gas(), 0x7, 0x6920, 0x60, 0x6920, 0x40), 1), success) -mstore(0x6980, mload(0x68a0)) - mstore(0x69a0, mload(0x68c0)) -mstore(0x69c0, mload(0x6920)) - mstore(0x69e0, mload(0x6940)) -success := and(eq(staticcall(gas(), 0x6, 0x6980, 0x80, 0x6980, 0x40), 1), success) -mstore(0x6a00, mload(0x300)) - mstore(0x6a20, mload(0x320)) -mstore(0x6a40, mload(0x5260)) -success := and(eq(staticcall(gas(), 0x7, 0x6a00, 0x60, 0x6a00, 0x40), 1), success) -mstore(0x6a60, mload(0x6980)) - mstore(0x6a80, mload(0x69a0)) -mstore(0x6aa0, mload(0x6a00)) - mstore(0x6ac0, mload(0x6a20)) -success := and(eq(staticcall(gas(), 0x6, 0x6a60, 0x80, 0x6a60, 0x40), 1), success) -mstore(0x6ae0, mload(0x720)) - mstore(0x6b00, mload(0x740)) -mstore(0x6b20, mload(0x5b20)) -success := and(eq(staticcall(gas(), 0x7, 0x6ae0, 0x60, 0x6ae0, 0x40), 1), success) -mstore(0x6b40, mload(0x6a60)) - mstore(0x6b60, mload(0x6a80)) -mstore(0x6b80, mload(0x6ae0)) - mstore(0x6ba0, mload(0x6b00)) -success := and(eq(staticcall(gas(), 0x6, 0x6b40, 0x80, 0x6b40, 0x40), 1), success) -mstore(0x6bc0, mload(0x760)) - mstore(0x6be0, mload(0x780)) -mstore(0x6c00, mload(0x5b40)) -success := and(eq(staticcall(gas(), 0x7, 0x6bc0, 0x60, 0x6bc0, 0x40), 1), success) -mstore(0x6c20, mload(0x6b40)) - mstore(0x6c40, mload(0x6b60)) -mstore(0x6c60, mload(0x6bc0)) - mstore(0x6c80, mload(0x6be0)) -success := and(eq(staticcall(gas(), 0x6, 0x6c20, 0x80, 0x6c20, 0x40), 1), success) -mstore(0x6ca0, mload(0x560)) - mstore(0x6cc0, mload(0x580)) -mstore(0x6ce0, mload(0x5e40)) -success := and(eq(staticcall(gas(), 0x7, 0x6ca0, 0x60, 0x6ca0, 0x40), 1), success) -mstore(0x6d00, mload(0x6c20)) - mstore(0x6d20, mload(0x6c40)) -mstore(0x6d40, mload(0x6ca0)) - mstore(0x6d60, mload(0x6cc0)) -success := and(eq(staticcall(gas(), 0x6, 0x6d00, 0x80, 0x6d00, 0x40), 1), success) -mstore(0x6d80, mload(0x5a0)) - mstore(0x6da0, mload(0x5c0)) -mstore(0x6dc0, mload(0x52e0)) -success := and(eq(staticcall(gas(), 0x7, 0x6d80, 0x60, 0x6d80, 0x40), 1), success) -mstore(0x6de0, mload(0x6d00)) - mstore(0x6e00, mload(0x6d20)) -mstore(0x6e20, mload(0x6d80)) - mstore(0x6e40, mload(0x6da0)) -success := and(eq(staticcall(gas(), 0x6, 0x6de0, 0x80, 0x6de0, 0x40), 1), success) -mstore(0x6e60, mload(0x7a0)) - mstore(0x6e80, mload(0x7c0)) -mstore(0x6ea0, mload(0x5b60)) -success := and(eq(staticcall(gas(), 0x7, 0x6e60, 0x60, 0x6e60, 0x40), 1), success) -mstore(0x6ec0, mload(0x6de0)) - mstore(0x6ee0, mload(0x6e00)) -mstore(0x6f00, mload(0x6e60)) - mstore(0x6f20, mload(0x6e80)) -success := and(eq(staticcall(gas(), 0x6, 0x6ec0, 0x80, 0x6ec0, 0x40), 1), success) -mstore(0x6f40, mload(0x5e0)) - mstore(0x6f60, mload(0x600)) -mstore(0x6f80, mload(0x5e60)) -success := and(eq(staticcall(gas(), 0x7, 0x6f40, 0x60, 0x6f40, 0x40), 1), success) -mstore(0x6fa0, mload(0x6ec0)) - mstore(0x6fc0, mload(0x6ee0)) -mstore(0x6fe0, mload(0x6f40)) - mstore(0x7000, mload(0x6f60)) -success := and(eq(staticcall(gas(), 0x6, 0x6fa0, 0x80, 0x6fa0, 0x40), 1), success) -mstore(0x7020, mload(0x620)) - mstore(0x7040, mload(0x640)) -mstore(0x7060, mload(0x5340)) -success := and(eq(staticcall(gas(), 0x7, 0x7020, 0x60, 0x7020, 0x40), 1), success) -mstore(0x7080, mload(0x6fa0)) - mstore(0x70a0, mload(0x6fc0)) -mstore(0x70c0, mload(0x7020)) - mstore(0x70e0, mload(0x7040)) -success := and(eq(staticcall(gas(), 0x6, 0x7080, 0x80, 0x7080, 0x40), 1), success) -mstore(0x7100, 0x244b27074fffede37a65e6ec14bd01014f5353c2d4897431dd4e7806e3a11ec6) - mstore(0x7120, 0x030bf32ba59b19236ebd8c886db4bc4fcd3bf8442e9879c8c44d2ca50775eb48) -mstore(0x7140, mload(0x5360)) -success := and(eq(staticcall(gas(), 0x7, 0x7100, 0x60, 0x7100, 0x40), 1), success) -mstore(0x7160, mload(0x7080)) - mstore(0x7180, mload(0x70a0)) -mstore(0x71a0, mload(0x7100)) - mstore(0x71c0, mload(0x7120)) -success := and(eq(staticcall(gas(), 0x6, 0x7160, 0x80, 0x7160, 0x40), 1), success) -mstore(0x71e0, 0x2627124da508b1628ffc3431168e4aad3ab0b7f2239c174d3e1d29a8edc465f9) - mstore(0x7200, 0x0049dc25c5d0c913911e717198561e494a2c495301d63cb3d8a9623c61e4c257) -mstore(0x7220, mload(0x5380)) -success := and(eq(staticcall(gas(), 0x7, 0x71e0, 0x60, 0x71e0, 0x40), 1), success) -mstore(0x7240, mload(0x7160)) - mstore(0x7260, mload(0x7180)) -mstore(0x7280, mload(0x71e0)) - mstore(0x72a0, mload(0x7200)) -success := and(eq(staticcall(gas(), 0x6, 0x7240, 0x80, 0x7240, 0x40), 1), success) -mstore(0x72c0, 0x13f3288ef1fd4ebffeb03fcfae47a32a149c94ee9167eb8fb99dc2bd4a9312a8) - mstore(0x72e0, 0x2439ead2cacb828a9c0ea0e3bf7a693ee04ace562a84dbd60bea48f633d5ba5a) -mstore(0x7300, mload(0x53a0)) -success := and(eq(staticcall(gas(), 0x7, 0x72c0, 0x60, 0x72c0, 0x40), 1), success) -mstore(0x7320, mload(0x7240)) - mstore(0x7340, mload(0x7260)) -mstore(0x7360, mload(0x72c0)) - mstore(0x7380, mload(0x72e0)) -success := and(eq(staticcall(gas(), 0x6, 0x7320, 0x80, 0x7320, 0x40), 1), success) -mstore(0x73a0, 0x09aa4e3e02f32390410c2336415f53ef5f8ed8c3e35a9541347fc2e4e14714a9) - mstore(0x73c0, 0x26dc2ca88f821bee66bb45da14e6c1136b643831ac23bc61e815c5e193540b5a) -mstore(0x73e0, mload(0x53c0)) -success := and(eq(staticcall(gas(), 0x7, 0x73a0, 0x60, 0x73a0, 0x40), 1), success) -mstore(0x7400, mload(0x7320)) - mstore(0x7420, mload(0x7340)) -mstore(0x7440, mload(0x73a0)) - mstore(0x7460, mload(0x73c0)) -success := and(eq(staticcall(gas(), 0x6, 0x7400, 0x80, 0x7400, 0x40), 1), success) -mstore(0x7480, 0x2119fec8729037f3f697e6b06e4568b0d39e8810ae4ca76362098191c3153533) - mstore(0x74a0, 0x2ad6704915e32b51865f55bb8f6b1f4b4670cd552f17bda1b6871081d6d9acac) -mstore(0x74c0, mload(0x53e0)) -success := and(eq(staticcall(gas(), 0x7, 0x7480, 0x60, 0x7480, 0x40), 1), success) -mstore(0x74e0, mload(0x7400)) - mstore(0x7500, mload(0x7420)) -mstore(0x7520, mload(0x7480)) - mstore(0x7540, mload(0x74a0)) -success := and(eq(staticcall(gas(), 0x6, 0x74e0, 0x80, 0x74e0, 0x40), 1), success) -mstore(0x7560, 0x2c6113fa65e8ceace0bed99ee38ee142ce5921d4d679eb477099b29e3bf5a62f) - mstore(0x7580, 0x15456d6081bc272e17c4cfe07c04ea3b462b19a9227a7f6f1084263523b62487) -mstore(0x75a0, mload(0x5400)) -success := and(eq(staticcall(gas(), 0x7, 0x7560, 0x60, 0x7560, 0x40), 1), success) -mstore(0x75c0, mload(0x74e0)) - mstore(0x75e0, mload(0x7500)) -mstore(0x7600, mload(0x7560)) - mstore(0x7620, mload(0x7580)) -success := and(eq(staticcall(gas(), 0x6, 0x75c0, 0x80, 0x75c0, 0x40), 1), success) -mstore(0x7640, 0x24e88e2cbcf2020ebcec1946e87361e4b9b4463bda370f32b2cb653a4deac5d7) - mstore(0x7660, 0x059f1feb7198d197ff9c7bd680a49a1d1850027a0f565affdd1246d8071d59c1) -mstore(0x7680, mload(0x5420)) -success := and(eq(staticcall(gas(), 0x7, 0x7640, 0x60, 0x7640, 0x40), 1), success) -mstore(0x76a0, mload(0x75c0)) - mstore(0x76c0, mload(0x75e0)) -mstore(0x76e0, mload(0x7640)) - mstore(0x7700, mload(0x7660)) -success := and(eq(staticcall(gas(), 0x6, 0x76a0, 0x80, 0x76a0, 0x40), 1), success) -mstore(0x7720, 0x09281c3911bbaf7de0f1ad1225c4eaa415939b71dc75a63d6aeb0046fef3b0c2) - mstore(0x7740, 0x293301a161eb89a88cf29daed0d4206c9b139352af72231dd1d7b58b785a366e) -mstore(0x7760, mload(0x5440)) -success := and(eq(staticcall(gas(), 0x7, 0x7720, 0x60, 0x7720, 0x40), 1), success) -mstore(0x7780, mload(0x76a0)) - mstore(0x77a0, mload(0x76c0)) -mstore(0x77c0, mload(0x7720)) - mstore(0x77e0, mload(0x7740)) -success := and(eq(staticcall(gas(), 0x6, 0x7780, 0x80, 0x7780, 0x40), 1), success) -mstore(0x7800, 0x0bcd89437d13dca18999f2086352d216d57766a28e858c020f8caec517c65f23) - mstore(0x7820, 0x2db48af8e8abaecbe78ab899bfd646f740254b2905d944e15c0e9155f999e0eb) -mstore(0x7840, mload(0x5460)) -success := and(eq(staticcall(gas(), 0x7, 0x7800, 0x60, 0x7800, 0x40), 1), success) -mstore(0x7860, mload(0x7780)) - mstore(0x7880, mload(0x77a0)) -mstore(0x78a0, mload(0x7800)) - mstore(0x78c0, mload(0x7820)) -success := and(eq(staticcall(gas(), 0x6, 0x7860, 0x80, 0x7860, 0x40), 1), success) -mstore(0x78e0, 0x2055eb206acacc04ad55900481deac80c613415eec7d72ed119e7e19559389af) - mstore(0x7900, 0x26c44b72875cf74e6d5425b7b3fed786449c28cb83a6cb5e8cfff120d770d90e) -mstore(0x7920, mload(0x5480)) -success := and(eq(staticcall(gas(), 0x7, 0x78e0, 0x60, 0x78e0, 0x40), 1), success) -mstore(0x7940, mload(0x7860)) - mstore(0x7960, mload(0x7880)) -mstore(0x7980, mload(0x78e0)) - mstore(0x79a0, mload(0x7900)) -success := and(eq(staticcall(gas(), 0x6, 0x7940, 0x80, 0x7940, 0x40), 1), success) -mstore(0x79c0, 0x2e1acca63e88fe568d8b841020fd158d6273ddaf6cfbf96a73f74dc82fc7b59a) - mstore(0x79e0, 0x04404ce23c959637a08304342c3ea1fdfcc95fcabe150e535131b353a5d9c519) -mstore(0x7a00, mload(0x54a0)) -success := and(eq(staticcall(gas(), 0x7, 0x79c0, 0x60, 0x79c0, 0x40), 1), success) -mstore(0x7a20, mload(0x7940)) - mstore(0x7a40, mload(0x7960)) -mstore(0x7a60, mload(0x79c0)) - mstore(0x7a80, mload(0x79e0)) -success := and(eq(staticcall(gas(), 0x6, 0x7a20, 0x80, 0x7a20, 0x40), 1), success) -mstore(0x7aa0, mload(0x880)) - mstore(0x7ac0, mload(0x8a0)) -mstore(0x7ae0, mload(0x54c0)) -success := and(eq(staticcall(gas(), 0x7, 0x7aa0, 0x60, 0x7aa0, 0x40), 1), success) -mstore(0x7b00, mload(0x7a20)) - mstore(0x7b20, mload(0x7a40)) -mstore(0x7b40, mload(0x7aa0)) - mstore(0x7b60, mload(0x7ac0)) -success := and(eq(staticcall(gas(), 0x6, 0x7b00, 0x80, 0x7b00, 0x40), 1), success) -mstore(0x7b80, mload(0x8c0)) - mstore(0x7ba0, mload(0x8e0)) -mstore(0x7bc0, mload(0x54e0)) -success := and(eq(staticcall(gas(), 0x7, 0x7b80, 0x60, 0x7b80, 0x40), 1), success) -mstore(0x7be0, mload(0x7b00)) - mstore(0x7c00, mload(0x7b20)) -mstore(0x7c20, mload(0x7b80)) - mstore(0x7c40, mload(0x7ba0)) -success := and(eq(staticcall(gas(), 0x6, 0x7be0, 0x80, 0x7be0, 0x40), 1), success) -mstore(0x7c60, mload(0x900)) - mstore(0x7c80, mload(0x920)) -mstore(0x7ca0, mload(0x5500)) -success := and(eq(staticcall(gas(), 0x7, 0x7c60, 0x60, 0x7c60, 0x40), 1), success) -mstore(0x7cc0, mload(0x7be0)) - mstore(0x7ce0, mload(0x7c00)) -mstore(0x7d00, mload(0x7c60)) - mstore(0x7d20, mload(0x7c80)) -success := and(eq(staticcall(gas(), 0x6, 0x7cc0, 0x80, 0x7cc0, 0x40), 1), success) -mstore(0x7d40, mload(0x940)) - mstore(0x7d60, mload(0x960)) -mstore(0x7d80, mload(0x5520)) -success := and(eq(staticcall(gas(), 0x7, 0x7d40, 0x60, 0x7d40, 0x40), 1), success) -mstore(0x7da0, mload(0x7cc0)) - mstore(0x7dc0, mload(0x7ce0)) -mstore(0x7de0, mload(0x7d40)) - mstore(0x7e00, mload(0x7d60)) -success := and(eq(staticcall(gas(), 0x6, 0x7da0, 0x80, 0x7da0, 0x40), 1), success) -mstore(0x7e20, mload(0x980)) - mstore(0x7e40, mload(0x9a0)) -mstore(0x7e60, mload(0x5540)) -success := and(eq(staticcall(gas(), 0x7, 0x7e20, 0x60, 0x7e20, 0x40), 1), success) -mstore(0x7e80, mload(0x7da0)) - mstore(0x7ea0, mload(0x7dc0)) -mstore(0x7ec0, mload(0x7e20)) - mstore(0x7ee0, mload(0x7e40)) -success := and(eq(staticcall(gas(), 0x6, 0x7e80, 0x80, 0x7e80, 0x40), 1), success) -mstore(0x7f00, mload(0x9c0)) - mstore(0x7f20, mload(0x9e0)) -mstore(0x7f40, mload(0x5560)) -success := and(eq(staticcall(gas(), 0x7, 0x7f00, 0x60, 0x7f00, 0x40), 1), success) -mstore(0x7f60, mload(0x7e80)) - mstore(0x7f80, mload(0x7ea0)) -mstore(0x7fa0, mload(0x7f00)) - mstore(0x7fc0, mload(0x7f20)) -success := and(eq(staticcall(gas(), 0x6, 0x7f60, 0x80, 0x7f60, 0x40), 1), success) -mstore(0x7fe0, mload(0xa00)) - mstore(0x8000, mload(0xa20)) -mstore(0x8020, mload(0x5580)) -success := and(eq(staticcall(gas(), 0x7, 0x7fe0, 0x60, 0x7fe0, 0x40), 1), success) -mstore(0x8040, mload(0x7f60)) - mstore(0x8060, mload(0x7f80)) -mstore(0x8080, mload(0x7fe0)) - mstore(0x80a0, mload(0x8000)) -success := and(eq(staticcall(gas(), 0x6, 0x8040, 0x80, 0x8040, 0x40), 1), success) -mstore(0x80c0, mload(0xa40)) - mstore(0x80e0, mload(0xa60)) -mstore(0x8100, mload(0x55a0)) -success := and(eq(staticcall(gas(), 0x7, 0x80c0, 0x60, 0x80c0, 0x40), 1), success) -mstore(0x8120, mload(0x8040)) - mstore(0x8140, mload(0x8060)) -mstore(0x8160, mload(0x80c0)) - mstore(0x8180, mload(0x80e0)) -success := and(eq(staticcall(gas(), 0x6, 0x8120, 0x80, 0x8120, 0x40), 1), success) -mstore(0x81a0, mload(0x7e0)) - mstore(0x81c0, mload(0x800)) -mstore(0x81e0, mload(0x55c0)) -success := and(eq(staticcall(gas(), 0x7, 0x81a0, 0x60, 0x81a0, 0x40), 1), success) -mstore(0x8200, mload(0x8120)) - mstore(0x8220, mload(0x8140)) -mstore(0x8240, mload(0x81a0)) - mstore(0x8260, mload(0x81c0)) -success := and(eq(staticcall(gas(), 0x6, 0x8200, 0x80, 0x8200, 0x40), 1), success) -mstore(0x8280, mload(0x1120)) - mstore(0x82a0, mload(0x1140)) -mstore(0x82c0, mload(0x5ea0)) -success := and(eq(staticcall(gas(), 0x7, 0x8280, 0x60, 0x8280, 0x40), 1), success) -mstore(0x82e0, mload(0x8200)) - mstore(0x8300, mload(0x8220)) -mstore(0x8320, mload(0x8280)) - mstore(0x8340, mload(0x82a0)) -success := and(eq(staticcall(gas(), 0x6, 0x82e0, 0x80, 0x82e0, 0x40), 1), success) -mstore(0x8360, mload(0x1160)) - mstore(0x8380, mload(0x1180)) -mstore(0x83a0, mload(0x5ee0)) -success := and(eq(staticcall(gas(), 0x7, 0x8360, 0x60, 0x8360, 0x40), 1), success) -mstore(0x83c0, mload(0x82e0)) - mstore(0x83e0, mload(0x8300)) -mstore(0x8400, mload(0x8360)) - mstore(0x8420, mload(0x8380)) -success := and(eq(staticcall(gas(), 0x6, 0x83c0, 0x80, 0x83c0, 0x40), 1), success) -mstore(0x8440, mload(0x11a0)) - mstore(0x8460, mload(0x11c0)) -mstore(0x8480, mload(0x5f20)) -success := and(eq(staticcall(gas(), 0x7, 0x8440, 0x60, 0x8440, 0x40), 1), success) -mstore(0x84a0, mload(0x83c0)) - mstore(0x84c0, mload(0x83e0)) -mstore(0x84e0, mload(0x8440)) - mstore(0x8500, mload(0x8460)) -success := and(eq(staticcall(gas(), 0x6, 0x84a0, 0x80, 0x84a0, 0x40), 1), success) -mstore(0x8520, mload(0x11e0)) - mstore(0x8540, mload(0x1200)) -mstore(0x8560, mload(0x5f60)) -success := and(eq(staticcall(gas(), 0x7, 0x8520, 0x60, 0x8520, 0x40), 1), success) -mstore(0x8580, mload(0x84a0)) - mstore(0x85a0, mload(0x84c0)) -mstore(0x85c0, mload(0x8520)) - mstore(0x85e0, mload(0x8540)) -success := and(eq(staticcall(gas(), 0x6, 0x8580, 0x80, 0x8580, 0x40), 1), success) -mstore(0x8600, mload(0x1220)) - mstore(0x8620, mload(0x1240)) -mstore(0x8640, mload(0x5fa0)) -success := and(eq(staticcall(gas(), 0x7, 0x8600, 0x60, 0x8600, 0x40), 1), success) -mstore(0x8660, mload(0x8580)) - mstore(0x8680, mload(0x85a0)) -mstore(0x86a0, mload(0x8600)) - mstore(0x86c0, mload(0x8620)) -success := and(eq(staticcall(gas(), 0x6, 0x8660, 0x80, 0x8660, 0x40), 1), success) -mstore(0x86e0, mload(0x1260)) - mstore(0x8700, mload(0x1280)) -mstore(0x8720, mload(0x5fe0)) -success := and(eq(staticcall(gas(), 0x7, 0x86e0, 0x60, 0x86e0, 0x40), 1), success) -mstore(0x8740, mload(0x8660)) - mstore(0x8760, mload(0x8680)) -mstore(0x8780, mload(0x86e0)) - mstore(0x87a0, mload(0x8700)) -success := and(eq(staticcall(gas(), 0x6, 0x8740, 0x80, 0x8740, 0x40), 1), success) -mstore(0x87c0, mload(0x1160)) - mstore(0x87e0, mload(0x1180)) -mstore(0x8800, mload(0x58a0)) -success := and(eq(staticcall(gas(), 0x7, 0x87c0, 0x60, 0x87c0, 0x40), 1), success) -mstore(0x8820, mload(0x1120)) - mstore(0x8840, mload(0x1140)) -mstore(0x8860, mload(0x87c0)) - mstore(0x8880, mload(0x87e0)) -success := and(eq(staticcall(gas(), 0x6, 0x8820, 0x80, 0x8820, 0x40), 1), success) -mstore(0x88a0, mload(0x11a0)) - mstore(0x88c0, mload(0x11c0)) -mstore(0x88e0, mload(0x5bc0)) -success := and(eq(staticcall(gas(), 0x7, 0x88a0, 0x60, 0x88a0, 0x40), 1), success) -mstore(0x8900, mload(0x8820)) - mstore(0x8920, mload(0x8840)) -mstore(0x8940, mload(0x88a0)) - mstore(0x8960, mload(0x88c0)) -success := and(eq(staticcall(gas(), 0x6, 0x8900, 0x80, 0x8900, 0x40), 1), success) -mstore(0x8980, mload(0x11e0)) - mstore(0x89a0, mload(0x1200)) -mstore(0x89c0, mload(0x5c60)) -success := and(eq(staticcall(gas(), 0x7, 0x8980, 0x60, 0x8980, 0x40), 1), success) -mstore(0x89e0, mload(0x8900)) - mstore(0x8a00, mload(0x8920)) -mstore(0x8a20, mload(0x8980)) - mstore(0x8a40, mload(0x89a0)) -success := and(eq(staticcall(gas(), 0x6, 0x89e0, 0x80, 0x89e0, 0x40), 1), success) -mstore(0x8a60, mload(0x1220)) - mstore(0x8a80, mload(0x1240)) -mstore(0x8aa0, mload(0x5d00)) -success := and(eq(staticcall(gas(), 0x7, 0x8a60, 0x60, 0x8a60, 0x40), 1), success) -mstore(0x8ac0, mload(0x89e0)) - mstore(0x8ae0, mload(0x8a00)) -mstore(0x8b00, mload(0x8a60)) - mstore(0x8b20, mload(0x8a80)) -success := and(eq(staticcall(gas(), 0x6, 0x8ac0, 0x80, 0x8ac0, 0x40), 1), success) -mstore(0x8b40, mload(0x1260)) - mstore(0x8b60, mload(0x1280)) -mstore(0x8b80, mload(0x5de0)) -success := and(eq(staticcall(gas(), 0x7, 0x8b40, 0x60, 0x8b40, 0x40), 1), success) -mstore(0x8ba0, mload(0x8ac0)) - mstore(0x8bc0, mload(0x8ae0)) -mstore(0x8be0, mload(0x8b40)) - mstore(0x8c00, mload(0x8b60)) -success := and(eq(staticcall(gas(), 0x6, 0x8ba0, 0x80, 0x8ba0, 0x40), 1), success) -mstore(0x8c20, mload(0x8740)) - mstore(0x8c40, mload(0x8760)) -mstore(0x8c60, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) - mstore(0x8c80, 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) - mstore(0x8ca0, 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) - mstore(0x8cc0, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa) -mstore(0x8ce0, mload(0x8ba0)) - mstore(0x8d00, mload(0x8bc0)) -mstore(0x8d20, 0x0bf2116ef9608ee9a63fbb4fa17f24b944b30ef31a00b8b55c079507fa373a9f) - mstore(0x8d40, 0x178875d7267f25b53a15c243accfebea97c81b763d2e5beb44dbc4a5b59ace7c) - mstore(0x8d60, 0x0750bb061b40181208c9fcc6524c7bcc60b07f70c579d5b722a43c9d14d0427f) - mstore(0x8d80, 0x17e60f8bd1dae2e5a555271dd1ad6144d48e0f051e0b16c704e52939f490969e) -success := and(eq(staticcall(gas(), 0x8, 0x8c20, 0x180, 0x8c20, 0x20), 1), success) -success := and(eq(mload(0x8c20), 1), success) + prod := mulmod(mload(0x18c0), prod, f_q) + mstore(0x1a20, prod) + + prod := mulmod(mload(0x15a0), prod, f_q) + mstore(0x1a40, prod) + + } + mstore(0x1a80, 32) + mstore(0x1aa0, 32) + mstore(0x1ac0, 32) + mstore(0x1ae0, mload(0x1a40)) + mstore(0x1b00, 21888242871839275222246405745257275088548364400416034343698204186575808495615) + mstore(0x1b20, 21888242871839275222246405745257275088548364400416034343698204186575808495617) + success := and(eq(staticcall(gas(), 0x5, 0x1a80, 0xc0, 0x1a60, 0x20), 1), success) + { + + let inv := mload(0x1a60) + let v + + v := mload(0x15a0) + mstore(5536, mulmod(mload(0x1a20), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x18c0) + mstore(6336, mulmod(mload(0x1a00), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1880) + mstore(6272, mulmod(mload(0x19e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1840) + mstore(6208, mulmod(mload(0x19c0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1800) + mstore(6144, mulmod(mload(0x19a0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x17c0) + mstore(6080, mulmod(mload(0x1980), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1780) + mstore(6016, mulmod(mload(0x1960), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1740) + mstore(5952, mulmod(mload(0x1940), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1700) + mstore(5888, mulmod(mload(0x1920), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x16c0) + mstore(5824, mulmod(mload(0x1900), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1680) + mstore(5760, mulmod(mload(0x18e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1640) + mstore(5696, mulmod(mload(0x1600), inv, f_q)) + inv := mulmod(v, inv, f_q) + mstore(0x1600, inv) + + } + mstore(0x1b40, mulmod(mload(0x15e0), mload(0x1600), f_q)) + mstore(0x1b60, mulmod(mload(0x1620), mload(0x1640), f_q)) + mstore(0x1b80, mulmod(mload(0x1660), mload(0x1680), f_q)) + mstore(0x1ba0, mulmod(mload(0x16a0), mload(0x16c0), f_q)) + mstore(0x1bc0, mulmod(mload(0x16e0), mload(0x1700), f_q)) + mstore(0x1be0, mulmod(mload(0x1720), mload(0x1740), f_q)) + mstore(0x1c00, mulmod(mload(0x1760), mload(0x1780), f_q)) + mstore(0x1c20, mulmod(mload(0x17a0), mload(0x17c0), f_q)) + mstore(0x1c40, mulmod(mload(0x17e0), mload(0x1800), f_q)) + mstore(0x1c60, mulmod(mload(0x1820), mload(0x1840), f_q)) + mstore(0x1c80, mulmod(mload(0x1860), mload(0x1880), f_q)) + mstore(0x1ca0, mulmod(mload(0x18a0), mload(0x18c0), f_q)) + { + let result := mulmod(mload(0x1c20), mload(0x20), f_q) + result := addmod(mulmod(mload(0x1c40), mload(0x40), f_q), result, f_q) + result := addmod(mulmod(mload(0x1c60), mload(0x60), f_q), result, f_q) + result := addmod(mulmod(mload(0x1c80), mload(0x80), f_q), result, f_q) + result := addmod(mulmod(mload(0x1ca0), mload(0xa0), f_q), result, f_q) + mstore(7360, result) + } + mstore(0x1ce0, mulmod(mload(0xb20), mload(0xb40), f_q)) + mstore(0x1d00, addmod(mload(0x1ce0), mload(0xae0), f_q)) + mstore(0x1d20, addmod(mload(0x1d00), sub(f_q, mload(0xb00)), f_q)) + mstore(0x1d40, mulmod(mload(0x1d20), mload(0xe80), f_q)) + mstore(0x1d60, mulmod(mload(0x840), mload(0x1d40), f_q)) + mstore(0x1d80, addmod(1, sub(f_q, mload(0xe60)), f_q)) + mstore(0x1da0, mulmod(mload(0x1d80), mload(0xe60), f_q)) + mstore(0x1dc0, addmod(mload(0xae0), sub(f_q, mload(0xb00)), f_q)) + mstore(0x1de0, mulmod(mload(0x1dc0), mload(0x1da0), f_q)) + mstore(0x1e00, addmod(mload(0x1d60), mload(0x1de0), f_q)) + mstore(0x1e20, mulmod(mload(0x840), mload(0x1e00), f_q)) + mstore(0x1e40, addmod(mload(0xb20), sub(f_q, mload(0xb60)), f_q)) + mstore(0x1e60, mulmod(mload(0x1e40), mload(0xe80), f_q)) + mstore(0x1e80, addmod(mload(0x1e20), mload(0x1e60), f_q)) + mstore(0x1ea0, mulmod(mload(0x840), mload(0x1e80), f_q)) + mstore(0x1ec0, addmod(2, sub(f_q, mload(0xe60)), f_q)) + mstore(0x1ee0, mulmod(mload(0x1ec0), mload(0xe60), f_q)) + mstore(0x1f00, addmod(mload(0xb80), sub(f_q, mload(0xae0)), f_q)) + mstore(0x1f20, mulmod(mload(0x1f00), mload(0x1ee0), f_q)) + mstore(0x1f40, addmod(mload(0x1ea0), mload(0x1f20), f_q)) + mstore(0x1f60, mulmod(mload(0x840), mload(0x1f40), f_q)) + mstore(0x1f80, addmod(mload(0xba0), sub(f_q, mload(0xbc0)), f_q)) + mstore(0x1fa0, mulmod(mload(0x1f80), mload(0xe00), f_q)) + mstore(0x1fc0, addmod(mload(0x1f60), mload(0x1fa0), f_q)) + mstore(0x1fe0, mulmod(mload(0x840), mload(0x1fc0), f_q)) + mstore(0x2000, addmod(mload(0xbe0), sub(f_q, mload(0xc00)), f_q)) + mstore(0x2020, mulmod(mload(0x2000), mload(0xe00), f_q)) + mstore(0x2040, addmod(mload(0x1fe0), mload(0x2020), f_q)) + mstore(0x2060, mulmod(mload(0x840), mload(0x2040), f_q)) + mstore(0x2080, addmod(1, sub(f_q, mload(0xe00)), f_q)) + mstore(0x20a0, mulmod(mload(0x2080), 1, f_q)) + mstore(0x20c0, addmod(1, sub(f_q, mload(0xe20)), f_q)) + mstore(0x20e0, mulmod(mload(0x20c0), mload(0x20a0), f_q)) + mstore(0x2100, addmod(1, sub(f_q, mload(0x20e0)), f_q)) + mstore(0x2120, addmod(mload(0xc20), sub(f_q, mload(0xc40)), f_q)) + mstore(0x2140, mulmod(mload(0x2120), mload(0x2100), f_q)) + mstore(0x2160, addmod(mload(0x2060), mload(0x2140), f_q)) + mstore(0x2180, mulmod(mload(0x840), mload(0x2160), f_q)) + mstore(0x21a0, mulmod(mload(0xba0), mload(0xe20), f_q)) + mstore(0x21c0, mulmod(mload(0xc60), mload(0xba0), f_q)) + mstore(0x21e0, addmod(1, sub(f_q, mload(0x21c0)), f_q)) + mstore(0x2200, mulmod(mload(0x21e0), mload(0x21a0), f_q)) + mstore(0x2220, addmod(mload(0x2180), mload(0x2200), f_q)) + mstore(0x2240, mulmod(mload(0x840), mload(0x2220), f_q)) + mstore(0x2260, mulmod(mload(0xc20), mload(0x2100), f_q)) + mstore(0x2280, mulmod(mload(0xc80), mload(0xc20), f_q)) + mstore(0x22a0, addmod(1, sub(f_q, mload(0x2280)), f_q)) + mstore(0x22c0, mulmod(mload(0x22a0), mload(0x2260), f_q)) + mstore(0x22e0, addmod(mload(0x2240), mload(0x22c0), f_q)) + mstore(0x2300, mulmod(mload(0x840), mload(0x22e0), f_q)) + mstore(0x2320, addmod(mload(0xcc0), sub(f_q, mload(0xba0)), f_q)) + mstore(0x2340, mulmod(mload(0x2320), mload(0xe20), f_q)) + mstore(0x2360, mulmod(mload(0xca0), mload(0x2320), f_q)) + mstore(0x2380, addmod(1, sub(f_q, mload(0x2360)), f_q)) + mstore(0x23a0, mulmod(mload(0x2380), mload(0x2340), f_q)) + mstore(0x23c0, addmod(mload(0x2300), mload(0x23a0), f_q)) + mstore(0x23e0, mulmod(mload(0x840), mload(0x23c0), f_q)) + mstore(0x2400, mulmod(mload(0xbe0), mload(0x21e0), f_q)) + mstore(0x2420, mulmod(mload(0x2400), mload(0xe20), f_q)) + mstore(0x2440, addmod(mload(0x23e0), mload(0x2420), f_q)) + mstore(0x2460, mulmod(mload(0x840), mload(0x2440), f_q)) + mstore(0x2480, mulmod(mload(0xcc0), mload(0x21e0), f_q)) + mstore(0x24a0, mulmod(mload(0x2480), mload(0xe20), f_q)) + mstore(0x24c0, addmod(mload(0x2460), mload(0x24a0), f_q)) + mstore(0x24e0, mulmod(mload(0x840), mload(0x24c0), f_q)) + mstore(0x2500, mulmod(mload(0xda0), mload(0x21e0), f_q)) + mstore(0x2520, mulmod(mload(0x2500), mload(0xe20), f_q)) + mstore(0x2540, addmod(mload(0x24e0), mload(0x2520), f_q)) + mstore(0x2560, mulmod(mload(0x840), mload(0x2540), f_q)) + mstore(0x2580, mulmod(mload(0xd60), mload(0x21e0), f_q)) + mstore(0x25a0, mulmod(mload(0x2580), mload(0xe20), f_q)) + mstore(0x25c0, addmod(mload(0x2560), mload(0x25a0), f_q)) + mstore(0x25e0, mulmod(mload(0x840), mload(0x25c0), f_q)) + mstore(0x2600, addmod(1, sub(f_q, mload(0x21e0)), f_q)) + mstore(0x2620, mulmod(mload(0x2600), mload(0xe20), f_q)) + mstore(0x2640, addmod(mload(0xd00), sub(f_q, mload(0xbe0)), f_q)) + mstore(0x2660, addmod(mload(0x2640), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) + mstore(0x2680, mulmod(mload(0x2660), mload(0x2380), f_q)) + mstore(0x26a0, mulmod(mload(0x2680), mload(0x2620), f_q)) + mstore(0x26c0, addmod(mload(0x25e0), mload(0x26a0), f_q)) + mstore(0x26e0, mulmod(mload(0x840), mload(0x26c0), f_q)) + mstore(0x2700, mulmod(mload(0xd00), mload(0x2320), f_q)) + mstore(0x2720, mulmod(mload(0x2700), mload(0x2620), f_q)) + mstore(0x2740, addmod(mload(0x26e0), mload(0x2720), f_q)) + mstore(0x2760, mulmod(mload(0x840), mload(0x2740), f_q)) + mstore(0x2780, addmod(mload(0xd80), sub(f_q, mload(0xd60)), f_q)) + mstore(0x27a0, mulmod(mload(0xd40), mload(0xd20), f_q)) + mstore(0x27c0, addmod(1, sub(f_q, mload(0x27a0)), f_q)) + mstore(0x27e0, mulmod(mload(0x27c0), 4, f_q)) + mstore(0x2800, mulmod(mload(0x27a0), 16, f_q)) + mstore(0x2820, addmod(mload(0x27e0), mload(0x2800), f_q)) + mstore(0x2840, addmod(mload(0x2780), sub(f_q, mload(0x2820)), f_q)) + mstore(0x2860, mulmod(mload(0x2840), mload(0x2380), f_q)) + mstore(0x2880, mulmod(mload(0x2860), mload(0x2620), f_q)) + mstore(0x28a0, addmod(mload(0x2760), mload(0x2880), f_q)) + mstore(0x28c0, mulmod(mload(0x840), mload(0x28a0), f_q)) + mstore(0x28e0, mulmod(mload(0xce0), mload(0xcc0), f_q)) + mstore(0x2900, mulmod(mload(0x2320), mload(0x28e0), f_q)) + mstore(0x2920, addmod(mload(0xd80), sub(f_q, mload(0x2820)), f_q)) + mstore(0x2940, mulmod(mload(0x2920), mload(0x2900), f_q)) + mstore(0x2960, mulmod(mload(0x2940), mload(0x2620), f_q)) + mstore(0x2980, addmod(mload(0x28c0), mload(0x2960), f_q)) + mstore(0x29a0, mulmod(mload(0x840), mload(0x2980), f_q)) + mstore(0x29c0, mulmod(mload(0xda0), mload(0x2380), f_q)) + mstore(0x29e0, mulmod(mload(0x29c0), mload(0x2620), f_q)) + mstore(0x2a00, addmod(mload(0x29a0), mload(0x29e0), f_q)) + mstore(0x2a20, mulmod(mload(0x840), mload(0x2a00), f_q)) + mstore(0x2a40, addmod(mload(0xda0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) + mstore(0x2a60, mulmod(mload(0x2a40), mload(0x2320), f_q)) + mstore(0x2a80, mulmod(mload(0x2a60), mload(0x2620), f_q)) + mstore(0x2aa0, addmod(mload(0x2a20), mload(0x2a80), f_q)) + mstore(0x2ac0, mulmod(mload(0x840), mload(0x2aa0), f_q)) + mstore(0x2ae0, mulmod(mload(0x2600), mload(0xe40), f_q)) + mstore(0x2b00, addmod(mload(0xbe0), 21888242871839275222246405745257275088548364400416034343698204186575808495617, f_q)) + mstore(0x2b20, mulmod(mload(0x2b00), mload(0x2ae0), f_q)) + mstore(0x2b40, addmod(mload(0x2ac0), mload(0x2b20), f_q)) + mstore(0x2b60, mulmod(mload(0x840), mload(0x2b40), f_q)) + mstore(0x2b80, mulmod(mload(0x22a0), 4, f_q)) + mstore(0x2ba0, addmod(1, sub(f_q, mload(0x22a0)), f_q)) + mstore(0x2bc0, mulmod(mload(0x2ba0), 16, f_q)) + mstore(0x2be0, addmod(mload(0x2b80), mload(0x2bc0), f_q)) + mstore(0x2c00, addmod(mload(0xd60), sub(f_q, mload(0x2be0)), f_q)) + mstore(0x2c20, mulmod(mload(0x2c00), mload(0x2ae0), f_q)) + mstore(0x2c40, addmod(mload(0x2b60), mload(0x2c20), f_q)) + mstore(0x2c60, mulmod(mload(0x840), mload(0x2c40), f_q)) + mstore(0x2c80, addmod(mload(0xde0), 21888242871839275222246405745257275088548364400416034343698204186575808495609, f_q)) + mstore(0x2ca0, mulmod(mload(0x2c80), mload(0xe00), f_q)) + mstore(0x2cc0, mulmod(mload(0xc60), mload(0x2c80), f_q)) + mstore(0x2ce0, addmod(1, sub(f_q, mload(0x2cc0)), f_q)) + mstore(0x2d00, mulmod(mload(0x2ce0), mload(0x2ca0), f_q)) + mstore(0x2d20, addmod(mload(0x2c60), mload(0x2d00), f_q)) + mstore(0x2d40, mulmod(mload(0x840), mload(0x2d20), f_q)) + mstore(0x2d60, mulmod(mload(0x2ce0), mload(0xe00), f_q)) + mstore(0x2d80, mulmod(mload(0x22a0), mload(0x2d60), f_q)) + mstore(0x2da0, mulmod(mload(0xd20), mload(0x2d80), f_q)) + mstore(0x2dc0, addmod(mload(0x2d40), mload(0x2da0), f_q)) + mstore(0x2de0, mulmod(mload(0x840), mload(0x2dc0), f_q)) + mstore(0x2e00, addmod(1, sub(f_q, mload(0xf40)), f_q)) + mstore(0x2e20, mulmod(mload(0x2e00), mload(0x1c20), f_q)) + mstore(0x2e40, addmod(mload(0x2de0), mload(0x2e20), f_q)) + mstore(0x2e60, mulmod(mload(0x840), mload(0x2e40), f_q)) + mstore(0x2e80, mulmod(mload(0xf40), mload(0xf40), f_q)) + mstore(0x2ea0, addmod(mload(0x2e80), sub(f_q, mload(0xf40)), f_q)) + mstore(0x2ec0, mulmod(mload(0x2ea0), mload(0x1b40), f_q)) + mstore(0x2ee0, addmod(mload(0x2e60), mload(0x2ec0), f_q)) + mstore(0x2f00, mulmod(mload(0x840), mload(0x2ee0), f_q)) + mstore(0x2f20, addmod(1, sub(f_q, mload(0x1b40)), f_q)) + mstore(0x2f40, addmod(mload(0x1b60), mload(0x1b80), f_q)) + mstore(0x2f60, addmod(mload(0x2f40), mload(0x1ba0), f_q)) + mstore(0x2f80, addmod(mload(0x2f60), mload(0x1bc0), f_q)) + mstore(0x2fa0, addmod(mload(0x2f80), mload(0x1be0), f_q)) + mstore(0x2fc0, addmod(mload(0x2fa0), mload(0x1c00), f_q)) + mstore(0x2fe0, addmod(mload(0x2f20), sub(f_q, mload(0x2fc0)), f_q)) + mstore(0x3000, mulmod(mload(0xec0), mload(0x680), f_q)) + mstore(0x3020, addmod(mload(0xae0), mload(0x3000), f_q)) + mstore(0x3040, addmod(mload(0x3020), mload(0x6e0), f_q)) + mstore(0x3060, mulmod(mload(0xee0), mload(0x680), f_q)) + mstore(0x3080, addmod(mload(0xb00), mload(0x3060), f_q)) + mstore(0x30a0, addmod(mload(0x3080), mload(0x6e0), f_q)) + mstore(0x30c0, mulmod(mload(0x30a0), mload(0x3040), f_q)) + mstore(0x30e0, mulmod(mload(0xf00), mload(0x680), f_q)) + mstore(0x3100, addmod(mload(0xb20), mload(0x30e0), f_q)) + mstore(0x3120, addmod(mload(0x3100), mload(0x6e0), f_q)) + mstore(0x3140, mulmod(mload(0x3120), mload(0x30c0), f_q)) + mstore(0x3160, mulmod(mload(0xf20), mload(0x680), f_q)) + mstore(0x3180, addmod(mload(0x1cc0), mload(0x3160), f_q)) + mstore(0x31a0, addmod(mload(0x3180), mload(0x6e0), f_q)) + mstore(0x31c0, mulmod(mload(0x31a0), mload(0x3140), f_q)) + mstore(0x31e0, mulmod(mload(0x31c0), mload(0xf60), f_q)) + mstore(0x3200, mulmod(1, mload(0x680), f_q)) + mstore(0x3220, mulmod(mload(0xaa0), mload(0x3200), f_q)) + mstore(0x3240, addmod(mload(0xae0), mload(0x3220), f_q)) + mstore(0x3260, addmod(mload(0x3240), mload(0x6e0), f_q)) + mstore(0x3280, mulmod(4131629893567559867359510883348571134090853742863529169391034518566172092834, mload(0x680), f_q)) + mstore(0x32a0, mulmod(mload(0xaa0), mload(0x3280), f_q)) + mstore(0x32c0, addmod(mload(0xb00), mload(0x32a0), f_q)) + mstore(0x32e0, addmod(mload(0x32c0), mload(0x6e0), f_q)) + mstore(0x3300, mulmod(mload(0x32e0), mload(0x3260), f_q)) + mstore(0x3320, mulmod(8910878055287538404433155982483128285667088683464058436815641868457422632747, mload(0x680), f_q)) + mstore(0x3340, mulmod(mload(0xaa0), mload(0x3320), f_q)) + mstore(0x3360, addmod(mload(0xb20), mload(0x3340), f_q)) + mstore(0x3380, addmod(mload(0x3360), mload(0x6e0), f_q)) + mstore(0x33a0, mulmod(mload(0x3380), mload(0x3300), f_q)) + mstore(0x33c0, mulmod(11166246659983828508719468090013646171463329086121580628794302409516816350802, mload(0x680), f_q)) + mstore(0x33e0, mulmod(mload(0xaa0), mload(0x33c0), f_q)) + mstore(0x3400, addmod(mload(0x1cc0), mload(0x33e0), f_q)) + mstore(0x3420, addmod(mload(0x3400), mload(0x6e0), f_q)) + mstore(0x3440, mulmod(mload(0x3420), mload(0x33a0), f_q)) + mstore(0x3460, mulmod(mload(0x3440), mload(0xf40), f_q)) + mstore(0x3480, addmod(mload(0x31e0), sub(f_q, mload(0x3460)), f_q)) + mstore(0x34a0, mulmod(mload(0x3480), mload(0x2fe0), f_q)) + mstore(0x34c0, addmod(mload(0x2f00), mload(0x34a0), f_q)) + mstore(0x34e0, mulmod(mload(0x840), mload(0x34c0), f_q)) + mstore(0x3500, addmod(1, sub(f_q, mload(0xf80)), f_q)) + mstore(0x3520, mulmod(mload(0x3500), mload(0x1c20), f_q)) + mstore(0x3540, addmod(mload(0x34e0), mload(0x3520), f_q)) + mstore(0x3560, mulmod(mload(0x840), mload(0x3540), f_q)) + mstore(0x3580, mulmod(mload(0xf80), mload(0xf80), f_q)) + mstore(0x35a0, addmod(mload(0x3580), sub(f_q, mload(0xf80)), f_q)) + mstore(0x35c0, mulmod(mload(0x35a0), mload(0x1b40), f_q)) + mstore(0x35e0, addmod(mload(0x3560), mload(0x35c0), f_q)) + mstore(0x3600, mulmod(mload(0x840), mload(0x35e0), f_q)) + mstore(0x3620, addmod(mload(0xfc0), mload(0x680), f_q)) + mstore(0x3640, mulmod(mload(0x3620), mload(0xfa0), f_q)) + mstore(0x3660, addmod(mload(0x1000), mload(0x6e0), f_q)) + mstore(0x3680, mulmod(mload(0x3660), mload(0x3640), f_q)) + mstore(0x36a0, addmod(mload(0x2320), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) + mstore(0x36c0, mulmod(mload(0x28e0), mload(0x36a0), f_q)) + mstore(0x36e0, mulmod(mload(0x2360), mload(0x36c0), f_q)) + mstore(0x3700, addmod(mload(0x36e0), mload(0x680), f_q)) + mstore(0x3720, mulmod(mload(0x3700), mload(0xf80), f_q)) + mstore(0x3740, addmod(mload(0xdc0), mload(0x6e0), f_q)) + mstore(0x3760, mulmod(mload(0x3740), mload(0x3720), f_q)) + mstore(0x3780, addmod(mload(0x3680), sub(f_q, mload(0x3760)), f_q)) + mstore(0x37a0, mulmod(mload(0x3780), mload(0x2fe0), f_q)) + mstore(0x37c0, addmod(mload(0x3600), mload(0x37a0), f_q)) + mstore(0x37e0, mulmod(mload(0x840), mload(0x37c0), f_q)) + mstore(0x3800, addmod(mload(0xfc0), sub(f_q, mload(0x1000)), f_q)) + mstore(0x3820, mulmod(mload(0x3800), mload(0x1c20), f_q)) + mstore(0x3840, addmod(mload(0x37e0), mload(0x3820), f_q)) + mstore(0x3860, mulmod(mload(0x840), mload(0x3840), f_q)) + mstore(0x3880, mulmod(mload(0x3800), mload(0x2fe0), f_q)) + mstore(0x38a0, addmod(mload(0xfc0), sub(f_q, mload(0xfe0)), f_q)) + mstore(0x38c0, mulmod(mload(0x38a0), mload(0x3880), f_q)) + mstore(0x38e0, addmod(mload(0x3860), mload(0x38c0), f_q)) + mstore(0x3900, mulmod(mload(0x840), mload(0x38e0), f_q)) + mstore(0x3920, addmod(1, sub(f_q, mload(0x1020)), f_q)) + mstore(0x3940, mulmod(mload(0x3920), mload(0x1c20), f_q)) + mstore(0x3960, addmod(mload(0x3900), mload(0x3940), f_q)) + mstore(0x3980, mulmod(mload(0x840), mload(0x3960), f_q)) + mstore(0x39a0, mulmod(mload(0x1020), mload(0x1020), f_q)) + mstore(0x39c0, addmod(mload(0x39a0), sub(f_q, mload(0x1020)), f_q)) + mstore(0x39e0, mulmod(mload(0x39c0), mload(0x1b40), f_q)) + mstore(0x3a00, addmod(mload(0x3980), mload(0x39e0), f_q)) + mstore(0x3a20, mulmod(mload(0x840), mload(0x3a00), f_q)) + mstore(0x3a40, addmod(mload(0x1060), mload(0x680), f_q)) + mstore(0x3a60, mulmod(mload(0x3a40), mload(0x1040), f_q)) + mstore(0x3a80, addmod(mload(0x10a0), mload(0x6e0), f_q)) + mstore(0x3aa0, mulmod(mload(0x3a80), mload(0x3a60), f_q)) + mstore(0x3ac0, mulmod(mload(0x2ba0), mload(0xe00), f_q)) + mstore(0x3ae0, mulmod(mload(0x2ce0), mload(0x3ac0), f_q)) + mstore(0x3b00, mulmod(mload(0xba0), mload(0x3ae0), f_q)) + mstore(0x3b20, mulmod(mload(0x520), mload(0x3b00), f_q)) + mstore(0x3b40, mulmod(1, mload(0x3ae0), f_q)) + mstore(0x3b60, addmod(mload(0x3b20), mload(0x3b40), f_q)) + mstore(0x3b80, mulmod(mload(0x520), mload(0x3b60), f_q)) + mstore(0x3ba0, mulmod(mload(0xd20), mload(0x3ae0), f_q)) + mstore(0x3bc0, addmod(mload(0x3b80), mload(0x3ba0), f_q)) + mstore(0x3be0, addmod(mload(0x3bc0), mload(0x680), f_q)) + mstore(0x3c00, mulmod(mload(0x3be0), mload(0x1020), f_q)) + mstore(0x3c20, mulmod(mload(0x520), mload(0xba0), f_q)) + mstore(0x3c40, addmod(mload(0x3c20), mload(0xda0), f_q)) + mstore(0x3c60, mulmod(mload(0x520), mload(0x3c40), f_q)) + mstore(0x3c80, addmod(mload(0x3c60), mload(0xd60), f_q)) + mstore(0x3ca0, addmod(mload(0x3c80), mload(0x6e0), f_q)) + mstore(0x3cc0, mulmod(mload(0x3ca0), mload(0x3c00), f_q)) + mstore(0x3ce0, addmod(mload(0x3aa0), sub(f_q, mload(0x3cc0)), f_q)) + mstore(0x3d00, mulmod(mload(0x3ce0), mload(0x2fe0), f_q)) + mstore(0x3d20, addmod(mload(0x3a20), mload(0x3d00), f_q)) + mstore(0x3d40, mulmod(mload(0x840), mload(0x3d20), f_q)) + mstore(0x3d60, addmod(mload(0x1060), sub(f_q, mload(0x10a0)), f_q)) + mstore(0x3d80, mulmod(mload(0x3d60), mload(0x1c20), f_q)) + mstore(0x3da0, addmod(mload(0x3d40), mload(0x3d80), f_q)) + mstore(0x3dc0, mulmod(mload(0x840), mload(0x3da0), f_q)) + mstore(0x3de0, mulmod(mload(0x3d60), mload(0x2fe0), f_q)) + mstore(0x3e00, addmod(mload(0x1060), sub(f_q, mload(0x1080)), f_q)) + mstore(0x3e20, mulmod(mload(0x3e00), mload(0x3de0), f_q)) + mstore(0x3e40, addmod(mload(0x3dc0), mload(0x3e20), f_q)) + mstore(0x3e60, mulmod(mload(0x1580), mload(0x1580), f_q)) + mstore(0x3e80, mulmod(mload(0x3e60), mload(0x1580), f_q)) + mstore(0x3ea0, mulmod(mload(0x3e80), mload(0x1580), f_q)) + mstore(0x3ec0, mulmod(mload(0x3ea0), mload(0x1580), f_q)) + mstore(0x3ee0, mulmod(mload(0x3ec0), mload(0x1580), f_q)) + mstore(0x3f00, mulmod(mload(0x3ee0), mload(0x1580), f_q)) + mstore(0x3f20, mulmod(mload(0x3f00), mload(0x1580), f_q)) + mstore(0x3f40, mulmod(1, mload(0x1580), f_q)) + mstore(0x3f60, mulmod(1, mload(0x3e60), f_q)) + mstore(0x3f80, mulmod(1, mload(0x3e80), f_q)) + mstore(0x3fa0, mulmod(1, mload(0x3ea0), f_q)) + mstore(0x3fc0, mulmod(1, mload(0x3ec0), f_q)) + mstore(0x3fe0, mulmod(1, mload(0x3ee0), f_q)) + mstore(0x4000, mulmod(1, mload(0x3f00), f_q)) + mstore(0x4020, mulmod(mload(0x3e40), mload(0x15a0), f_q)) + mstore(0x4040, mulmod(mload(0x12c0), mload(0x12c0), f_q)) + mstore(0x4060, mulmod(mload(0x4040), mload(0x12c0), f_q)) + mstore(0x4080, mulmod(mload(0x4060), mload(0x12c0), f_q)) + mstore(0x40a0, mulmod(mload(0x4080), mload(0x12c0), f_q)) + mstore(0x40c0, mulmod(mload(0x40a0), mload(0x12c0), f_q)) + mstore(0x40e0, mulmod(mload(0x10e0), mload(0x10e0), f_q)) + mstore(0x4100, mulmod(mload(0x40e0), mload(0x10e0), f_q)) + mstore(0x4120, mulmod(mload(0x4100), mload(0x10e0), f_q)) + mstore(0x4140, mulmod(mload(0x4120), mload(0x10e0), f_q)) + mstore(0x4160, mulmod(mload(0x4140), mload(0x10e0), f_q)) + mstore(0x4180, mulmod(mload(0x4160), mload(0x10e0), f_q)) + mstore(0x41a0, mulmod(mload(0x4180), mload(0x10e0), f_q)) + mstore(0x41c0, mulmod(mload(0x41a0), mload(0x10e0), f_q)) + mstore(0x41e0, mulmod(mload(0x41c0), mload(0x10e0), f_q)) + mstore(0x4200, mulmod(mload(0x41e0), mload(0x10e0), f_q)) + mstore(0x4220, mulmod(mload(0x4200), mload(0x10e0), f_q)) + mstore(0x4240, mulmod(mload(0x4220), mload(0x10e0), f_q)) + mstore(0x4260, mulmod(mload(0x4240), mload(0x10e0), f_q)) + mstore(0x4280, mulmod(mload(0x4260), mload(0x10e0), f_q)) + mstore(0x42a0, mulmod(mload(0x4280), mload(0x10e0), f_q)) + mstore(0x42c0, mulmod(mload(0x42a0), mload(0x10e0), f_q)) + mstore(0x42e0, mulmod(mload(0x42c0), mload(0x10e0), f_q)) + mstore(0x4300, mulmod(mload(0x42e0), mload(0x10e0), f_q)) + mstore(0x4320, mulmod(mload(0x4300), mload(0x10e0), f_q)) + mstore(0x4340, mulmod(mload(0x4320), mload(0x10e0), f_q)) + mstore(0x4360, mulmod(mload(0x4340), mload(0x10e0), f_q)) + mstore(0x4380, mulmod(mload(0x4360), mload(0x10e0), f_q)) + mstore(0x43a0, mulmod(mload(0x4380), mload(0x10e0), f_q)) + mstore(0x43c0, mulmod(mload(0x43a0), mload(0x10e0), f_q)) + mstore(0x43e0, mulmod(mload(0x43c0), mload(0x10e0), f_q)) + mstore(0x4400, mulmod(mload(0x43e0), mload(0x10e0), f_q)) + mstore(0x4420, mulmod(mload(0x4400), mload(0x10e0), f_q)) + mstore(0x4440, mulmod(mload(0x4420), mload(0x10e0), f_q)) + mstore(0x4460, mulmod(mload(0x4440), mload(0x10e0), f_q)) + mstore(0x4480, mulmod(mload(0x4460), mload(0x10e0), f_q)) + mstore(0x44a0, mulmod(mload(0x4480), mload(0x10e0), f_q)) + mstore(0x44c0, mulmod(sub(f_q, mload(0xae0)), 1, f_q)) + mstore(0x44e0, mulmod(sub(f_q, mload(0xb00)), mload(0x10e0), f_q)) + mstore(0x4500, mulmod(1, mload(0x10e0), f_q)) + mstore(0x4520, addmod(mload(0x44c0), mload(0x44e0), f_q)) + mstore(0x4540, mulmod(sub(f_q, mload(0xb20)), mload(0x40e0), f_q)) + mstore(0x4560, mulmod(1, mload(0x40e0), f_q)) + mstore(0x4580, addmod(mload(0x4520), mload(0x4540), f_q)) + mstore(0x45a0, mulmod(sub(f_q, mload(0xb80)), mload(0x4100), f_q)) + mstore(0x45c0, mulmod(1, mload(0x4100), f_q)) + mstore(0x45e0, addmod(mload(0x4580), mload(0x45a0), f_q)) + mstore(0x4600, mulmod(sub(f_q, mload(0xba0)), mload(0x4120), f_q)) + mstore(0x4620, mulmod(1, mload(0x4120), f_q)) + mstore(0x4640, addmod(mload(0x45e0), mload(0x4600), f_q)) + mstore(0x4660, mulmod(sub(f_q, mload(0xbe0)), mload(0x4140), f_q)) + mstore(0x4680, mulmod(1, mload(0x4140), f_q)) + mstore(0x46a0, addmod(mload(0x4640), mload(0x4660), f_q)) + mstore(0x46c0, mulmod(sub(f_q, mload(0xc20)), mload(0x4160), f_q)) + mstore(0x46e0, mulmod(1, mload(0x4160), f_q)) + mstore(0x4700, addmod(mload(0x46a0), mload(0x46c0), f_q)) + mstore(0x4720, mulmod(sub(f_q, mload(0xc60)), mload(0x4180), f_q)) + mstore(0x4740, mulmod(1, mload(0x4180), f_q)) + mstore(0x4760, addmod(mload(0x4700), mload(0x4720), f_q)) + mstore(0x4780, mulmod(sub(f_q, mload(0xc80)), mload(0x41a0), f_q)) + mstore(0x47a0, mulmod(1, mload(0x41a0), f_q)) + mstore(0x47c0, addmod(mload(0x4760), mload(0x4780), f_q)) + mstore(0x47e0, mulmod(sub(f_q, mload(0xca0)), mload(0x41c0), f_q)) + mstore(0x4800, mulmod(1, mload(0x41c0), f_q)) + mstore(0x4820, addmod(mload(0x47c0), mload(0x47e0), f_q)) + mstore(0x4840, mulmod(sub(f_q, mload(0xd60)), mload(0x41e0), f_q)) + mstore(0x4860, mulmod(1, mload(0x41e0), f_q)) + mstore(0x4880, addmod(mload(0x4820), mload(0x4840), f_q)) + mstore(0x48a0, mulmod(sub(f_q, mload(0xda0)), mload(0x4200), f_q)) + mstore(0x48c0, mulmod(1, mload(0x4200), f_q)) + mstore(0x48e0, addmod(mload(0x4880), mload(0x48a0), f_q)) + mstore(0x4900, mulmod(sub(f_q, mload(0xf40)), mload(0x4220), f_q)) + mstore(0x4920, mulmod(1, mload(0x4220), f_q)) + mstore(0x4940, addmod(mload(0x48e0), mload(0x4900), f_q)) + mstore(0x4960, mulmod(sub(f_q, mload(0xf80)), mload(0x4240), f_q)) + mstore(0x4980, mulmod(1, mload(0x4240), f_q)) + mstore(0x49a0, addmod(mload(0x4940), mload(0x4960), f_q)) + mstore(0x49c0, mulmod(sub(f_q, mload(0xfc0)), mload(0x4260), f_q)) + mstore(0x49e0, mulmod(1, mload(0x4260), f_q)) + mstore(0x4a00, addmod(mload(0x49a0), mload(0x49c0), f_q)) + mstore(0x4a20, mulmod(sub(f_q, mload(0x1000)), mload(0x4280), f_q)) + mstore(0x4a40, mulmod(1, mload(0x4280), f_q)) + mstore(0x4a60, addmod(mload(0x4a00), mload(0x4a20), f_q)) + mstore(0x4a80, mulmod(sub(f_q, mload(0x1020)), mload(0x42a0), f_q)) + mstore(0x4aa0, mulmod(1, mload(0x42a0), f_q)) + mstore(0x4ac0, addmod(mload(0x4a60), mload(0x4a80), f_q)) + mstore(0x4ae0, mulmod(sub(f_q, mload(0x1060)), mload(0x42c0), f_q)) + mstore(0x4b00, mulmod(1, mload(0x42c0), f_q)) + mstore(0x4b20, addmod(mload(0x4ac0), mload(0x4ae0), f_q)) + mstore(0x4b40, mulmod(sub(f_q, mload(0x10a0)), mload(0x42e0), f_q)) + mstore(0x4b60, mulmod(1, mload(0x42e0), f_q)) + mstore(0x4b80, addmod(mload(0x4b20), mload(0x4b40), f_q)) + mstore(0x4ba0, mulmod(sub(f_q, mload(0xdc0)), mload(0x4300), f_q)) + mstore(0x4bc0, mulmod(1, mload(0x4300), f_q)) + mstore(0x4be0, addmod(mload(0x4b80), mload(0x4ba0), f_q)) + mstore(0x4c00, mulmod(sub(f_q, mload(0xde0)), mload(0x4320), f_q)) + mstore(0x4c20, mulmod(1, mload(0x4320), f_q)) + mstore(0x4c40, addmod(mload(0x4be0), mload(0x4c00), f_q)) + mstore(0x4c60, mulmod(sub(f_q, mload(0xe00)), mload(0x4340), f_q)) + mstore(0x4c80, mulmod(1, mload(0x4340), f_q)) + mstore(0x4ca0, addmod(mload(0x4c40), mload(0x4c60), f_q)) + mstore(0x4cc0, mulmod(sub(f_q, mload(0xe20)), mload(0x4360), f_q)) + mstore(0x4ce0, mulmod(1, mload(0x4360), f_q)) + mstore(0x4d00, addmod(mload(0x4ca0), mload(0x4cc0), f_q)) + mstore(0x4d20, mulmod(sub(f_q, mload(0xe40)), mload(0x4380), f_q)) + mstore(0x4d40, mulmod(1, mload(0x4380), f_q)) + mstore(0x4d60, addmod(mload(0x4d00), mload(0x4d20), f_q)) + mstore(0x4d80, mulmod(sub(f_q, mload(0xe60)), mload(0x43a0), f_q)) + mstore(0x4da0, mulmod(1, mload(0x43a0), f_q)) + mstore(0x4dc0, addmod(mload(0x4d60), mload(0x4d80), f_q)) + mstore(0x4de0, mulmod(sub(f_q, mload(0xe80)), mload(0x43c0), f_q)) + mstore(0x4e00, mulmod(1, mload(0x43c0), f_q)) + mstore(0x4e20, addmod(mload(0x4dc0), mload(0x4de0), f_q)) + mstore(0x4e40, mulmod(sub(f_q, mload(0xec0)), mload(0x43e0), f_q)) + mstore(0x4e60, mulmod(1, mload(0x43e0), f_q)) + mstore(0x4e80, addmod(mload(0x4e20), mload(0x4e40), f_q)) + mstore(0x4ea0, mulmod(sub(f_q, mload(0xee0)), mload(0x4400), f_q)) + mstore(0x4ec0, mulmod(1, mload(0x4400), f_q)) + mstore(0x4ee0, addmod(mload(0x4e80), mload(0x4ea0), f_q)) + mstore(0x4f00, mulmod(sub(f_q, mload(0xf00)), mload(0x4420), f_q)) + mstore(0x4f20, mulmod(1, mload(0x4420), f_q)) + mstore(0x4f40, addmod(mload(0x4ee0), mload(0x4f00), f_q)) + mstore(0x4f60, mulmod(sub(f_q, mload(0xf20)), mload(0x4440), f_q)) + mstore(0x4f80, mulmod(1, mload(0x4440), f_q)) + mstore(0x4fa0, addmod(mload(0x4f40), mload(0x4f60), f_q)) + mstore(0x4fc0, mulmod(sub(f_q, mload(0x4020)), mload(0x4460), f_q)) + mstore(0x4fe0, mulmod(1, mload(0x4460), f_q)) + mstore(0x5000, mulmod(mload(0x3f40), mload(0x4460), f_q)) + mstore(0x5020, mulmod(mload(0x3f60), mload(0x4460), f_q)) + mstore(0x5040, mulmod(mload(0x3f80), mload(0x4460), f_q)) + mstore(0x5060, mulmod(mload(0x3fa0), mload(0x4460), f_q)) + mstore(0x5080, mulmod(mload(0x3fc0), mload(0x4460), f_q)) + mstore(0x50a0, mulmod(mload(0x3fe0), mload(0x4460), f_q)) + mstore(0x50c0, mulmod(mload(0x4000), mload(0x4460), f_q)) + mstore(0x50e0, addmod(mload(0x4fa0), mload(0x4fc0), f_q)) + mstore(0x5100, mulmod(sub(f_q, mload(0xea0)), mload(0x4480), f_q)) + mstore(0x5120, mulmod(1, mload(0x4480), f_q)) + mstore(0x5140, addmod(mload(0x50e0), mload(0x5100), f_q)) + mstore(0x5160, mulmod(mload(0x5140), 1, f_q)) + mstore(0x5180, mulmod(mload(0x4500), 1, f_q)) + mstore(0x51a0, mulmod(mload(0x4560), 1, f_q)) + mstore(0x51c0, mulmod(mload(0x45c0), 1, f_q)) + mstore(0x51e0, mulmod(mload(0x4620), 1, f_q)) + mstore(0x5200, mulmod(mload(0x4680), 1, f_q)) + mstore(0x5220, mulmod(mload(0x46e0), 1, f_q)) + mstore(0x5240, mulmod(mload(0x4740), 1, f_q)) + mstore(0x5260, mulmod(mload(0x47a0), 1, f_q)) + mstore(0x5280, mulmod(mload(0x4800), 1, f_q)) + mstore(0x52a0, mulmod(mload(0x4860), 1, f_q)) + mstore(0x52c0, mulmod(mload(0x48c0), 1, f_q)) + mstore(0x52e0, mulmod(mload(0x4920), 1, f_q)) + mstore(0x5300, mulmod(mload(0x4980), 1, f_q)) + mstore(0x5320, mulmod(mload(0x49e0), 1, f_q)) + mstore(0x5340, mulmod(mload(0x4a40), 1, f_q)) + mstore(0x5360, mulmod(mload(0x4aa0), 1, f_q)) + mstore(0x5380, mulmod(mload(0x4b00), 1, f_q)) + mstore(0x53a0, mulmod(mload(0x4b60), 1, f_q)) + mstore(0x53c0, mulmod(mload(0x4bc0), 1, f_q)) + mstore(0x53e0, mulmod(mload(0x4c20), 1, f_q)) + mstore(0x5400, mulmod(mload(0x4c80), 1, f_q)) + mstore(0x5420, mulmod(mload(0x4ce0), 1, f_q)) + mstore(0x5440, mulmod(mload(0x4d40), 1, f_q)) + mstore(0x5460, mulmod(mload(0x4da0), 1, f_q)) + mstore(0x5480, mulmod(mload(0x4e00), 1, f_q)) + mstore(0x54a0, mulmod(mload(0x4e60), 1, f_q)) + mstore(0x54c0, mulmod(mload(0x4ec0), 1, f_q)) + mstore(0x54e0, mulmod(mload(0x4f20), 1, f_q)) + mstore(0x5500, mulmod(mload(0x4f80), 1, f_q)) + mstore(0x5520, mulmod(mload(0x4fe0), 1, f_q)) + mstore(0x5540, mulmod(mload(0x5000), 1, f_q)) + mstore(0x5560, mulmod(mload(0x5020), 1, f_q)) + mstore(0x5580, mulmod(mload(0x5040), 1, f_q)) + mstore(0x55a0, mulmod(mload(0x5060), 1, f_q)) + mstore(0x55c0, mulmod(mload(0x5080), 1, f_q)) + mstore(0x55e0, mulmod(mload(0x50a0), 1, f_q)) + mstore(0x5600, mulmod(mload(0x50c0), 1, f_q)) + mstore(0x5620, mulmod(mload(0x5120), 1, f_q)) + mstore(0x5640, mulmod(sub(f_q, mload(0xb40)), 1, f_q)) + mstore(0x5660, mulmod(sub(f_q, mload(0xb60)), mload(0x10e0), f_q)) + mstore(0x5680, addmod(mload(0x5640), mload(0x5660), f_q)) + mstore(0x56a0, mulmod(sub(f_q, mload(0xcc0)), mload(0x40e0), f_q)) + mstore(0x56c0, addmod(mload(0x5680), mload(0x56a0), f_q)) + mstore(0x56e0, mulmod(sub(f_q, mload(0xce0)), mload(0x4100), f_q)) + mstore(0x5700, addmod(mload(0x56c0), mload(0x56e0), f_q)) + mstore(0x5720, mulmod(sub(f_q, mload(0xd00)), mload(0x4120), f_q)) + mstore(0x5740, addmod(mload(0x5700), mload(0x5720), f_q)) + mstore(0x5760, mulmod(sub(f_q, mload(0xd20)), mload(0x4140), f_q)) + mstore(0x5780, addmod(mload(0x5740), mload(0x5760), f_q)) + mstore(0x57a0, mulmod(sub(f_q, mload(0xd40)), mload(0x4160), f_q)) + mstore(0x57c0, addmod(mload(0x5780), mload(0x57a0), f_q)) + mstore(0x57e0, mulmod(sub(f_q, mload(0xd80)), mload(0x4180), f_q)) + mstore(0x5800, addmod(mload(0x57c0), mload(0x57e0), f_q)) + mstore(0x5820, mulmod(sub(f_q, mload(0xf60)), mload(0x41a0), f_q)) + mstore(0x5840, addmod(mload(0x5800), mload(0x5820), f_q)) + mstore(0x5860, mulmod(sub(f_q, mload(0xfa0)), mload(0x41c0), f_q)) + mstore(0x5880, addmod(mload(0x5840), mload(0x5860), f_q)) + mstore(0x58a0, mulmod(sub(f_q, mload(0x1040)), mload(0x41e0), f_q)) + mstore(0x58c0, addmod(mload(0x5880), mload(0x58a0), f_q)) + mstore(0x58e0, mulmod(mload(0x58c0), mload(0x12c0), f_q)) + mstore(0x5900, mulmod(1, mload(0x12c0), f_q)) + mstore(0x5920, mulmod(mload(0x4500), mload(0x12c0), f_q)) + mstore(0x5940, mulmod(mload(0x4560), mload(0x12c0), f_q)) + mstore(0x5960, mulmod(mload(0x45c0), mload(0x12c0), f_q)) + mstore(0x5980, mulmod(mload(0x4620), mload(0x12c0), f_q)) + mstore(0x59a0, mulmod(mload(0x4680), mload(0x12c0), f_q)) + mstore(0x59c0, mulmod(mload(0x46e0), mload(0x12c0), f_q)) + mstore(0x59e0, mulmod(mload(0x4740), mload(0x12c0), f_q)) + mstore(0x5a00, mulmod(mload(0x47a0), mload(0x12c0), f_q)) + mstore(0x5a20, mulmod(mload(0x4800), mload(0x12c0), f_q)) + mstore(0x5a40, mulmod(mload(0x4860), mload(0x12c0), f_q)) + mstore(0x5a60, addmod(mload(0x5160), mload(0x58e0), f_q)) + mstore(0x5a80, addmod(mload(0x5180), mload(0x5900), f_q)) + mstore(0x5aa0, addmod(mload(0x51a0), mload(0x5920), f_q)) + mstore(0x5ac0, addmod(mload(0x51e0), mload(0x5940), f_q)) + mstore(0x5ae0, addmod(mload(0x5240), mload(0x5960), f_q)) + mstore(0x5b00, addmod(mload(0x5200), mload(0x5980), f_q)) + mstore(0x5b20, addmod(mload(0x5220), mload(0x59a0), f_q)) + mstore(0x5b40, addmod(mload(0x5260), mload(0x59c0), f_q)) + mstore(0x5b60, addmod(mload(0x52a0), mload(0x59e0), f_q)) + mstore(0x5b80, addmod(mload(0x52e0), mload(0x5a00), f_q)) + mstore(0x5ba0, addmod(mload(0x5300), mload(0x5a20), f_q)) + mstore(0x5bc0, addmod(mload(0x5360), mload(0x5a40), f_q)) + mstore(0x5be0, mulmod(sub(f_q, mload(0xbc0)), 1, f_q)) + mstore(0x5c00, mulmod(mload(0x5be0), mload(0x4040), f_q)) + mstore(0x5c20, mulmod(1, mload(0x4040), f_q)) + mstore(0x5c40, addmod(mload(0x5a60), mload(0x5c00), f_q)) + mstore(0x5c60, addmod(1, mload(0x5c20), f_q)) + mstore(0x5c80, mulmod(sub(f_q, mload(0xc00)), 1, f_q)) + mstore(0x5ca0, mulmod(mload(0x5c80), mload(0x4060), f_q)) + mstore(0x5cc0, mulmod(1, mload(0x4060), f_q)) + mstore(0x5ce0, addmod(mload(0x5c40), mload(0x5ca0), f_q)) + mstore(0x5d00, addmod(mload(0x5c60), mload(0x5cc0), f_q)) + mstore(0x5d20, mulmod(sub(f_q, mload(0xc40)), 1, f_q)) + mstore(0x5d40, mulmod(mload(0x5d20), mload(0x4080), f_q)) + mstore(0x5d60, mulmod(1, mload(0x4080), f_q)) + mstore(0x5d80, addmod(mload(0x5ce0), mload(0x5d40), f_q)) + mstore(0x5da0, addmod(mload(0x5d00), mload(0x5d60), f_q)) + mstore(0x5dc0, mulmod(sub(f_q, mload(0xfe0)), 1, f_q)) + mstore(0x5de0, mulmod(sub(f_q, mload(0x1080)), mload(0x10e0), f_q)) + mstore(0x5e00, addmod(mload(0x5dc0), mload(0x5de0), f_q)) + mstore(0x5e20, mulmod(mload(0x5e00), mload(0x40a0), f_q)) + mstore(0x5e40, mulmod(1, mload(0x40a0), f_q)) + mstore(0x5e60, mulmod(mload(0x4500), mload(0x40a0), f_q)) + mstore(0x5e80, addmod(mload(0x5d80), mload(0x5e20), f_q)) + mstore(0x5ea0, addmod(mload(0x5320), mload(0x5e40), f_q)) + mstore(0x5ec0, addmod(mload(0x5380), mload(0x5e60), f_q)) + mstore(0x5ee0, mulmod(1, mload(0xaa0), f_q)) + mstore(0x5f00, mulmod(1, mload(0x5ee0), f_q)) + mstore(0x5f20, mulmod(1426404432721484388505361748317961535523355871255605456897797744433766488507, mload(0xaa0), f_q)) + mstore(0x5f40, mulmod(mload(0x5900), mload(0x5f20), f_q)) + mstore(0x5f60, mulmod(9006377677104126645890996367423897105324004107057077789747582042159340961781, mload(0xaa0), f_q)) + mstore(0x5f80, mulmod(mload(0x5c20), mload(0x5f60), f_q)) + mstore(0x5fa0, mulmod(18769651408976934958286309932310414541151443913375694970737140453570733585773, mload(0xaa0), f_q)) + mstore(0x5fc0, mulmod(mload(0x5cc0), mload(0x5fa0), f_q)) + mstore(0x5fe0, mulmod(14067402467204121486302766047808497429914586165841890684531964769691379435525, mload(0xaa0), f_q)) + mstore(0x6000, mulmod(mload(0x5d60), mload(0x5fe0), f_q)) + mstore(0x6020, mulmod(2785514556381676080176937710880804108647911392478702105860685610379369825016, mload(0xaa0), f_q)) + mstore(0x6040, mulmod(mload(0x5e40), mload(0x6020), f_q)) + mstore(0x6060, 0x0000000000000000000000000000000000000000000000000000000000000001) + mstore(0x6080, 0x0000000000000000000000000000000000000000000000000000000000000002) + mstore(0x60a0, mload(0x5e80)) + success := and(eq(staticcall(gas(), 0x7, 0x6060, 0x60, 0x6060, 0x40), 1), success) + mstore(0x60c0, mload(0x340)) + mstore(0x60e0, mload(0x360)) + mstore(0x6100, mload(0x5da0)) + success := and(eq(staticcall(gas(), 0x7, 0x60c0, 0x60, 0x60c0, 0x40), 1), success) + mstore(0x6120, mload(0x6060)) + mstore(0x6140, mload(0x6080)) + mstore(0x6160, mload(0x60c0)) + mstore(0x6180, mload(0x60e0)) + success := and(eq(staticcall(gas(), 0x6, 0x6120, 0x80, 0x6120, 0x40), 1), success) + mstore(0x61a0, mload(0x380)) + mstore(0x61c0, mload(0x3a0)) + mstore(0x61e0, mload(0x5a80)) + success := and(eq(staticcall(gas(), 0x7, 0x61a0, 0x60, 0x61a0, 0x40), 1), success) + mstore(0x6200, mload(0x6120)) + mstore(0x6220, mload(0x6140)) + mstore(0x6240, mload(0x61a0)) + mstore(0x6260, mload(0x61c0)) + success := and(eq(staticcall(gas(), 0x6, 0x6200, 0x80, 0x6200, 0x40), 1), success) + mstore(0x6280, mload(0x3c0)) + mstore(0x62a0, mload(0x3e0)) + mstore(0x62c0, mload(0x5aa0)) + success := and(eq(staticcall(gas(), 0x7, 0x6280, 0x60, 0x6280, 0x40), 1), success) + mstore(0x62e0, mload(0x6200)) + mstore(0x6300, mload(0x6220)) + mstore(0x6320, mload(0x6280)) + mstore(0x6340, mload(0x62a0)) + success := and(eq(staticcall(gas(), 0x6, 0x62e0, 0x80, 0x62e0, 0x40), 1), success) + mstore(0x6360, mload(0x140)) + mstore(0x6380, mload(0x160)) + mstore(0x63a0, mload(0x51c0)) + success := and(eq(staticcall(gas(), 0x7, 0x6360, 0x60, 0x6360, 0x40), 1), success) + mstore(0x63c0, mload(0x62e0)) + mstore(0x63e0, mload(0x6300)) + mstore(0x6400, mload(0x6360)) + mstore(0x6420, mload(0x6380)) + success := and(eq(staticcall(gas(), 0x6, 0x63c0, 0x80, 0x63c0, 0x40), 1), success) + mstore(0x6440, mload(0x180)) + mstore(0x6460, mload(0x1a0)) + mstore(0x6480, mload(0x5ac0)) + success := and(eq(staticcall(gas(), 0x7, 0x6440, 0x60, 0x6440, 0x40), 1), success) + mstore(0x64a0, mload(0x63c0)) + mstore(0x64c0, mload(0x63e0)) + mstore(0x64e0, mload(0x6440)) + mstore(0x6500, mload(0x6460)) + success := and(eq(staticcall(gas(), 0x6, 0x64a0, 0x80, 0x64a0, 0x40), 1), success) + mstore(0x6520, mload(0x1c0)) + mstore(0x6540, mload(0x1e0)) + mstore(0x6560, mload(0x5b00)) + success := and(eq(staticcall(gas(), 0x7, 0x6520, 0x60, 0x6520, 0x40), 1), success) + mstore(0x6580, mload(0x64a0)) + mstore(0x65a0, mload(0x64c0)) + mstore(0x65c0, mload(0x6520)) + mstore(0x65e0, mload(0x6540)) + success := and(eq(staticcall(gas(), 0x6, 0x6580, 0x80, 0x6580, 0x40), 1), success) + mstore(0x6600, mload(0x4c0)) + mstore(0x6620, mload(0x4e0)) + mstore(0x6640, mload(0x5b20)) + success := and(eq(staticcall(gas(), 0x7, 0x6600, 0x60, 0x6600, 0x40), 1), success) + mstore(0x6660, mload(0x6580)) + mstore(0x6680, mload(0x65a0)) + mstore(0x66a0, mload(0x6600)) + mstore(0x66c0, mload(0x6620)) + success := and(eq(staticcall(gas(), 0x6, 0x6660, 0x80, 0x6660, 0x40), 1), success) + mstore(0x66e0, mload(0x200)) + mstore(0x6700, mload(0x220)) + mstore(0x6720, mload(0x5ae0)) + success := and(eq(staticcall(gas(), 0x7, 0x66e0, 0x60, 0x66e0, 0x40), 1), success) + mstore(0x6740, mload(0x6660)) + mstore(0x6760, mload(0x6680)) + mstore(0x6780, mload(0x66e0)) + mstore(0x67a0, mload(0x6700)) + success := and(eq(staticcall(gas(), 0x6, 0x6740, 0x80, 0x6740, 0x40), 1), success) + mstore(0x67c0, mload(0x240)) + mstore(0x67e0, mload(0x260)) + mstore(0x6800, mload(0x5b40)) + success := and(eq(staticcall(gas(), 0x7, 0x67c0, 0x60, 0x67c0, 0x40), 1), success) + mstore(0x6820, mload(0x6740)) + mstore(0x6840, mload(0x6760)) + mstore(0x6860, mload(0x67c0)) + mstore(0x6880, mload(0x67e0)) + success := and(eq(staticcall(gas(), 0x6, 0x6820, 0x80, 0x6820, 0x40), 1), success) + mstore(0x68a0, mload(0x280)) + mstore(0x68c0, mload(0x2a0)) + mstore(0x68e0, mload(0x5280)) + success := and(eq(staticcall(gas(), 0x7, 0x68a0, 0x60, 0x68a0, 0x40), 1), success) + mstore(0x6900, mload(0x6820)) + mstore(0x6920, mload(0x6840)) + mstore(0x6940, mload(0x68a0)) + mstore(0x6960, mload(0x68c0)) + success := and(eq(staticcall(gas(), 0x6, 0x6900, 0x80, 0x6900, 0x40), 1), success) + mstore(0x6980, mload(0x2c0)) + mstore(0x69a0, mload(0x2e0)) + mstore(0x69c0, mload(0x5b60)) + success := and(eq(staticcall(gas(), 0x7, 0x6980, 0x60, 0x6980, 0x40), 1), success) + mstore(0x69e0, mload(0x6900)) + mstore(0x6a00, mload(0x6920)) + mstore(0x6a20, mload(0x6980)) + mstore(0x6a40, mload(0x69a0)) + success := and(eq(staticcall(gas(), 0x6, 0x69e0, 0x80, 0x69e0, 0x40), 1), success) + mstore(0x6a60, mload(0x300)) + mstore(0x6a80, mload(0x320)) + mstore(0x6aa0, mload(0x52c0)) + success := and(eq(staticcall(gas(), 0x7, 0x6a60, 0x60, 0x6a60, 0x40), 1), success) + mstore(0x6ac0, mload(0x69e0)) + mstore(0x6ae0, mload(0x6a00)) + mstore(0x6b00, mload(0x6a60)) + mstore(0x6b20, mload(0x6a80)) + success := and(eq(staticcall(gas(), 0x6, 0x6ac0, 0x80, 0x6ac0, 0x40), 1), success) + mstore(0x6b40, mload(0x720)) + mstore(0x6b60, mload(0x740)) + mstore(0x6b80, mload(0x5b80)) + success := and(eq(staticcall(gas(), 0x7, 0x6b40, 0x60, 0x6b40, 0x40), 1), success) + mstore(0x6ba0, mload(0x6ac0)) + mstore(0x6bc0, mload(0x6ae0)) + mstore(0x6be0, mload(0x6b40)) + mstore(0x6c00, mload(0x6b60)) + success := and(eq(staticcall(gas(), 0x6, 0x6ba0, 0x80, 0x6ba0, 0x40), 1), success) + mstore(0x6c20, mload(0x760)) + mstore(0x6c40, mload(0x780)) + mstore(0x6c60, mload(0x5ba0)) + success := and(eq(staticcall(gas(), 0x7, 0x6c20, 0x60, 0x6c20, 0x40), 1), success) + mstore(0x6c80, mload(0x6ba0)) + mstore(0x6ca0, mload(0x6bc0)) + mstore(0x6cc0, mload(0x6c20)) + mstore(0x6ce0, mload(0x6c40)) + success := and(eq(staticcall(gas(), 0x6, 0x6c80, 0x80, 0x6c80, 0x40), 1), success) + mstore(0x6d00, mload(0x560)) + mstore(0x6d20, mload(0x580)) + mstore(0x6d40, mload(0x5ea0)) + success := and(eq(staticcall(gas(), 0x7, 0x6d00, 0x60, 0x6d00, 0x40), 1), success) + mstore(0x6d60, mload(0x6c80)) + mstore(0x6d80, mload(0x6ca0)) + mstore(0x6da0, mload(0x6d00)) + mstore(0x6dc0, mload(0x6d20)) + success := and(eq(staticcall(gas(), 0x6, 0x6d60, 0x80, 0x6d60, 0x40), 1), success) + mstore(0x6de0, mload(0x5a0)) + mstore(0x6e00, mload(0x5c0)) + mstore(0x6e20, mload(0x5340)) + success := and(eq(staticcall(gas(), 0x7, 0x6de0, 0x60, 0x6de0, 0x40), 1), success) + mstore(0x6e40, mload(0x6d60)) + mstore(0x6e60, mload(0x6d80)) + mstore(0x6e80, mload(0x6de0)) + mstore(0x6ea0, mload(0x6e00)) + success := and(eq(staticcall(gas(), 0x6, 0x6e40, 0x80, 0x6e40, 0x40), 1), success) + mstore(0x6ec0, mload(0x7a0)) + mstore(0x6ee0, mload(0x7c0)) + mstore(0x6f00, mload(0x5bc0)) + success := and(eq(staticcall(gas(), 0x7, 0x6ec0, 0x60, 0x6ec0, 0x40), 1), success) + mstore(0x6f20, mload(0x6e40)) + mstore(0x6f40, mload(0x6e60)) + mstore(0x6f60, mload(0x6ec0)) + mstore(0x6f80, mload(0x6ee0)) + success := and(eq(staticcall(gas(), 0x6, 0x6f20, 0x80, 0x6f20, 0x40), 1), success) + mstore(0x6fa0, mload(0x5e0)) + mstore(0x6fc0, mload(0x600)) + mstore(0x6fe0, mload(0x5ec0)) + success := and(eq(staticcall(gas(), 0x7, 0x6fa0, 0x60, 0x6fa0, 0x40), 1), success) + mstore(0x7000, mload(0x6f20)) + mstore(0x7020, mload(0x6f40)) + mstore(0x7040, mload(0x6fa0)) + mstore(0x7060, mload(0x6fc0)) + success := and(eq(staticcall(gas(), 0x6, 0x7000, 0x80, 0x7000, 0x40), 1), success) + mstore(0x7080, mload(0x620)) + mstore(0x70a0, mload(0x640)) + mstore(0x70c0, mload(0x53a0)) + success := and(eq(staticcall(gas(), 0x7, 0x7080, 0x60, 0x7080, 0x40), 1), success) + mstore(0x70e0, mload(0x7000)) + mstore(0x7100, mload(0x7020)) + mstore(0x7120, mload(0x7080)) + mstore(0x7140, mload(0x70a0)) + success := and(eq(staticcall(gas(), 0x6, 0x70e0, 0x80, 0x70e0, 0x40), 1), success) + mstore(0x7160, 0x24df3a8ab6d23ed7008fbc06251e90863a4315ffc6c1cb8709eaaa3cf263faa5) + mstore(0x7180, 0x1095bd5aa580d4456d7475fd0544191c4db8c131f5edbdb8526406874a2256fe) + mstore(0x71a0, mload(0x53c0)) + success := and(eq(staticcall(gas(), 0x7, 0x7160, 0x60, 0x7160, 0x40), 1), success) + mstore(0x71c0, mload(0x70e0)) + mstore(0x71e0, mload(0x7100)) + mstore(0x7200, mload(0x7160)) + mstore(0x7220, mload(0x7180)) + success := and(eq(staticcall(gas(), 0x6, 0x71c0, 0x80, 0x71c0, 0x40), 1), success) + mstore(0x7240, 0x11e06a0924bc91df420cc28907921d96d30e06732532056355b159bfab487599) + mstore(0x7260, 0x0146dba1ad065c26ee3890d2e260e0a486b77a7024b700a0c4d2f42546526a92) + mstore(0x7280, mload(0x53e0)) + success := and(eq(staticcall(gas(), 0x7, 0x7240, 0x60, 0x7240, 0x40), 1), success) + mstore(0x72a0, mload(0x71c0)) + mstore(0x72c0, mload(0x71e0)) + mstore(0x72e0, mload(0x7240)) + mstore(0x7300, mload(0x7260)) + success := and(eq(staticcall(gas(), 0x6, 0x72a0, 0x80, 0x72a0, 0x40), 1), success) + mstore(0x7320, 0x2939459d1b84dfbd52b2e2b64f0a9e34a92f902561cfefa96e9c34dd7d24c5ed) + mstore(0x7340, 0x0863a7b24ba92c51042ec70c09561f56de7508951df59c9b2405868b3fb1e398) + mstore(0x7360, mload(0x5400)) + success := and(eq(staticcall(gas(), 0x7, 0x7320, 0x60, 0x7320, 0x40), 1), success) + mstore(0x7380, mload(0x72a0)) + mstore(0x73a0, mload(0x72c0)) + mstore(0x73c0, mload(0x7320)) + mstore(0x73e0, mload(0x7340)) + success := and(eq(staticcall(gas(), 0x6, 0x7380, 0x80, 0x7380, 0x40), 1), success) + mstore(0x7400, 0x2689485a8adaae5d72519b79d073c50281c6c6f2edb50dfc43381e6685b4ed48) + mstore(0x7420, 0x010475e5addbb2801fe3e12bff0c16cd59dcbc00612e487225531caf1fe73384) + mstore(0x7440, mload(0x5420)) + success := and(eq(staticcall(gas(), 0x7, 0x7400, 0x60, 0x7400, 0x40), 1), success) + mstore(0x7460, mload(0x7380)) + mstore(0x7480, mload(0x73a0)) + mstore(0x74a0, mload(0x7400)) + mstore(0x74c0, mload(0x7420)) + success := and(eq(staticcall(gas(), 0x6, 0x7460, 0x80, 0x7460, 0x40), 1), success) + mstore(0x74e0, 0x0c25af76635e4d86530f59602968f73c64d4e9321da480a656f8fdd45cc8f53d) + mstore(0x7500, 0x10a7b87fb011847118106b7ce456d3d82fbe5034bdb61ab81502d1eaa3c45fa3) + mstore(0x7520, mload(0x5440)) + success := and(eq(staticcall(gas(), 0x7, 0x74e0, 0x60, 0x74e0, 0x40), 1), success) + mstore(0x7540, mload(0x7460)) + mstore(0x7560, mload(0x7480)) + mstore(0x7580, mload(0x74e0)) + mstore(0x75a0, mload(0x7500)) + success := and(eq(staticcall(gas(), 0x6, 0x7540, 0x80, 0x7540, 0x40), 1), success) + mstore(0x75c0, 0x1da4d5f14edc872371c52c1c162a0c072bb7ec1dbbbe39ba8829dae031ccdb41) + mstore(0x75e0, 0x0b6e1dc1fe60239ed770f9595c733082777582cbfbccad71b2dbfc0cc271130d) + mstore(0x7600, mload(0x5460)) + success := and(eq(staticcall(gas(), 0x7, 0x75c0, 0x60, 0x75c0, 0x40), 1), success) + mstore(0x7620, mload(0x7540)) + mstore(0x7640, mload(0x7560)) + mstore(0x7660, mload(0x75c0)) + mstore(0x7680, mload(0x75e0)) + success := and(eq(staticcall(gas(), 0x6, 0x7620, 0x80, 0x7620, 0x40), 1), success) + mstore(0x76a0, 0x03c4f9bc94be2784bee9bbc645150ce1a747111cd4d8c86a6ba5872db514566b) + mstore(0x76c0, 0x0e92420076ca4212e17e10a8d09a40ad7203108c12142eae3c7e0820145bcb34) + mstore(0x76e0, mload(0x5480)) + success := and(eq(staticcall(gas(), 0x7, 0x76a0, 0x60, 0x76a0, 0x40), 1), success) + mstore(0x7700, mload(0x7620)) + mstore(0x7720, mload(0x7640)) + mstore(0x7740, mload(0x76a0)) + mstore(0x7760, mload(0x76c0)) + success := and(eq(staticcall(gas(), 0x6, 0x7700, 0x80, 0x7700, 0x40), 1), success) + mstore(0x7780, 0x2beb5c5065bb0090c21172606d4c4a17f8aba887cc35da572017f68fff0e2daa) + mstore(0x77a0, 0x044c2c7666c79f7117180457a5fce10b23a7954745d3c6af2852913ccf7ccc5f) + mstore(0x77c0, mload(0x54a0)) + success := and(eq(staticcall(gas(), 0x7, 0x7780, 0x60, 0x7780, 0x40), 1), success) + mstore(0x77e0, mload(0x7700)) + mstore(0x7800, mload(0x7720)) + mstore(0x7820, mload(0x7780)) + mstore(0x7840, mload(0x77a0)) + success := and(eq(staticcall(gas(), 0x6, 0x77e0, 0x80, 0x77e0, 0x40), 1), success) + mstore(0x7860, 0x05c183434fc3a650d28f4fa95ddf0aef925ed36337ba3dea6fb7e33f2314344d) + mstore(0x7880, 0x1221a2bc16fb1cdb5a8b7115e4d01309e4359cedbb63ca2ddce40870ad49d9eb) + mstore(0x78a0, mload(0x54c0)) + success := and(eq(staticcall(gas(), 0x7, 0x7860, 0x60, 0x7860, 0x40), 1), success) + mstore(0x78c0, mload(0x77e0)) + mstore(0x78e0, mload(0x7800)) + mstore(0x7900, mload(0x7860)) + mstore(0x7920, mload(0x7880)) + success := and(eq(staticcall(gas(), 0x6, 0x78c0, 0x80, 0x78c0, 0x40), 1), success) + mstore(0x7940, 0x12209b4185f5db7676fc98326c71e416945a641cd92ce00aa1ac5804e64519ba) + mstore(0x7960, 0x0e4ce8068964b434965e5f2ada90c054808c74f79cd3cda02c0df09a8b8a01dc) + mstore(0x7980, mload(0x54e0)) + success := and(eq(staticcall(gas(), 0x7, 0x7940, 0x60, 0x7940, 0x40), 1), success) + mstore(0x79a0, mload(0x78c0)) + mstore(0x79c0, mload(0x78e0)) + mstore(0x79e0, mload(0x7940)) + mstore(0x7a00, mload(0x7960)) + success := and(eq(staticcall(gas(), 0x6, 0x79a0, 0x80, 0x79a0, 0x40), 1), success) + mstore(0x7a20, 0x074bc27bd8025b72b9154c9d6ecf604e62e9b29af9e285e7c92a7c5de2cd68eb) + mstore(0x7a40, 0x0e135b6f45a74901de4a3ed12a4c514d57d5727ed8ba2423c3dfc82867bb7b93) + mstore(0x7a60, mload(0x5500)) + success := and(eq(staticcall(gas(), 0x7, 0x7a20, 0x60, 0x7a20, 0x40), 1), success) + mstore(0x7a80, mload(0x79a0)) + mstore(0x7aa0, mload(0x79c0)) + mstore(0x7ac0, mload(0x7a20)) + mstore(0x7ae0, mload(0x7a40)) + success := and(eq(staticcall(gas(), 0x6, 0x7a80, 0x80, 0x7a80, 0x40), 1), success) + mstore(0x7b00, mload(0x880)) + mstore(0x7b20, mload(0x8a0)) + mstore(0x7b40, mload(0x5520)) + success := and(eq(staticcall(gas(), 0x7, 0x7b00, 0x60, 0x7b00, 0x40), 1), success) + mstore(0x7b60, mload(0x7a80)) + mstore(0x7b80, mload(0x7aa0)) + mstore(0x7ba0, mload(0x7b00)) + mstore(0x7bc0, mload(0x7b20)) + success := and(eq(staticcall(gas(), 0x6, 0x7b60, 0x80, 0x7b60, 0x40), 1), success) + mstore(0x7be0, mload(0x8c0)) + mstore(0x7c00, mload(0x8e0)) + mstore(0x7c20, mload(0x5540)) + success := and(eq(staticcall(gas(), 0x7, 0x7be0, 0x60, 0x7be0, 0x40), 1), success) + mstore(0x7c40, mload(0x7b60)) + mstore(0x7c60, mload(0x7b80)) + mstore(0x7c80, mload(0x7be0)) + mstore(0x7ca0, mload(0x7c00)) + success := and(eq(staticcall(gas(), 0x6, 0x7c40, 0x80, 0x7c40, 0x40), 1), success) + mstore(0x7cc0, mload(0x900)) + mstore(0x7ce0, mload(0x920)) + mstore(0x7d00, mload(0x5560)) + success := and(eq(staticcall(gas(), 0x7, 0x7cc0, 0x60, 0x7cc0, 0x40), 1), success) + mstore(0x7d20, mload(0x7c40)) + mstore(0x7d40, mload(0x7c60)) + mstore(0x7d60, mload(0x7cc0)) + mstore(0x7d80, mload(0x7ce0)) + success := and(eq(staticcall(gas(), 0x6, 0x7d20, 0x80, 0x7d20, 0x40), 1), success) + mstore(0x7da0, mload(0x940)) + mstore(0x7dc0, mload(0x960)) + mstore(0x7de0, mload(0x5580)) + success := and(eq(staticcall(gas(), 0x7, 0x7da0, 0x60, 0x7da0, 0x40), 1), success) + mstore(0x7e00, mload(0x7d20)) + mstore(0x7e20, mload(0x7d40)) + mstore(0x7e40, mload(0x7da0)) + mstore(0x7e60, mload(0x7dc0)) + success := and(eq(staticcall(gas(), 0x6, 0x7e00, 0x80, 0x7e00, 0x40), 1), success) + mstore(0x7e80, mload(0x980)) + mstore(0x7ea0, mload(0x9a0)) + mstore(0x7ec0, mload(0x55a0)) + success := and(eq(staticcall(gas(), 0x7, 0x7e80, 0x60, 0x7e80, 0x40), 1), success) + mstore(0x7ee0, mload(0x7e00)) + mstore(0x7f00, mload(0x7e20)) + mstore(0x7f20, mload(0x7e80)) + mstore(0x7f40, mload(0x7ea0)) + success := and(eq(staticcall(gas(), 0x6, 0x7ee0, 0x80, 0x7ee0, 0x40), 1), success) + mstore(0x7f60, mload(0x9c0)) + mstore(0x7f80, mload(0x9e0)) + mstore(0x7fa0, mload(0x55c0)) + success := and(eq(staticcall(gas(), 0x7, 0x7f60, 0x60, 0x7f60, 0x40), 1), success) + mstore(0x7fc0, mload(0x7ee0)) + mstore(0x7fe0, mload(0x7f00)) + mstore(0x8000, mload(0x7f60)) + mstore(0x8020, mload(0x7f80)) + success := and(eq(staticcall(gas(), 0x6, 0x7fc0, 0x80, 0x7fc0, 0x40), 1), success) + mstore(0x8040, mload(0xa00)) + mstore(0x8060, mload(0xa20)) + mstore(0x8080, mload(0x55e0)) + success := and(eq(staticcall(gas(), 0x7, 0x8040, 0x60, 0x8040, 0x40), 1), success) + mstore(0x80a0, mload(0x7fc0)) + mstore(0x80c0, mload(0x7fe0)) + mstore(0x80e0, mload(0x8040)) + mstore(0x8100, mload(0x8060)) + success := and(eq(staticcall(gas(), 0x6, 0x80a0, 0x80, 0x80a0, 0x40), 1), success) + mstore(0x8120, mload(0xa40)) + mstore(0x8140, mload(0xa60)) + mstore(0x8160, mload(0x5600)) + success := and(eq(staticcall(gas(), 0x7, 0x8120, 0x60, 0x8120, 0x40), 1), success) + mstore(0x8180, mload(0x80a0)) + mstore(0x81a0, mload(0x80c0)) + mstore(0x81c0, mload(0x8120)) + mstore(0x81e0, mload(0x8140)) + success := and(eq(staticcall(gas(), 0x6, 0x8180, 0x80, 0x8180, 0x40), 1), success) + mstore(0x8200, mload(0x7e0)) + mstore(0x8220, mload(0x800)) + mstore(0x8240, mload(0x5620)) + success := and(eq(staticcall(gas(), 0x7, 0x8200, 0x60, 0x8200, 0x40), 1), success) + mstore(0x8260, mload(0x8180)) + mstore(0x8280, mload(0x81a0)) + mstore(0x82a0, mload(0x8200)) + mstore(0x82c0, mload(0x8220)) + success := and(eq(staticcall(gas(), 0x6, 0x8260, 0x80, 0x8260, 0x40), 1), success) + mstore(0x82e0, mload(0x1120)) + mstore(0x8300, mload(0x1140)) + mstore(0x8320, mload(0x5f00)) + success := and(eq(staticcall(gas(), 0x7, 0x82e0, 0x60, 0x82e0, 0x40), 1), success) + mstore(0x8340, mload(0x8260)) + mstore(0x8360, mload(0x8280)) + mstore(0x8380, mload(0x82e0)) + mstore(0x83a0, mload(0x8300)) + success := and(eq(staticcall(gas(), 0x6, 0x8340, 0x80, 0x8340, 0x40), 1), success) + mstore(0x83c0, mload(0x1160)) + mstore(0x83e0, mload(0x1180)) + mstore(0x8400, mload(0x5f40)) + success := and(eq(staticcall(gas(), 0x7, 0x83c0, 0x60, 0x83c0, 0x40), 1), success) + mstore(0x8420, mload(0x8340)) + mstore(0x8440, mload(0x8360)) + mstore(0x8460, mload(0x83c0)) + mstore(0x8480, mload(0x83e0)) + success := and(eq(staticcall(gas(), 0x6, 0x8420, 0x80, 0x8420, 0x40), 1), success) + mstore(0x84a0, mload(0x11a0)) + mstore(0x84c0, mload(0x11c0)) + mstore(0x84e0, mload(0x5f80)) + success := and(eq(staticcall(gas(), 0x7, 0x84a0, 0x60, 0x84a0, 0x40), 1), success) + mstore(0x8500, mload(0x8420)) + mstore(0x8520, mload(0x8440)) + mstore(0x8540, mload(0x84a0)) + mstore(0x8560, mload(0x84c0)) + success := and(eq(staticcall(gas(), 0x6, 0x8500, 0x80, 0x8500, 0x40), 1), success) + mstore(0x8580, mload(0x11e0)) + mstore(0x85a0, mload(0x1200)) + mstore(0x85c0, mload(0x5fc0)) + success := and(eq(staticcall(gas(), 0x7, 0x8580, 0x60, 0x8580, 0x40), 1), success) + mstore(0x85e0, mload(0x8500)) + mstore(0x8600, mload(0x8520)) + mstore(0x8620, mload(0x8580)) + mstore(0x8640, mload(0x85a0)) + success := and(eq(staticcall(gas(), 0x6, 0x85e0, 0x80, 0x85e0, 0x40), 1), success) + mstore(0x8660, mload(0x1220)) + mstore(0x8680, mload(0x1240)) + mstore(0x86a0, mload(0x6000)) + success := and(eq(staticcall(gas(), 0x7, 0x8660, 0x60, 0x8660, 0x40), 1), success) + mstore(0x86c0, mload(0x85e0)) + mstore(0x86e0, mload(0x8600)) + mstore(0x8700, mload(0x8660)) + mstore(0x8720, mload(0x8680)) + success := and(eq(staticcall(gas(), 0x6, 0x86c0, 0x80, 0x86c0, 0x40), 1), success) + mstore(0x8740, mload(0x1260)) + mstore(0x8760, mload(0x1280)) + mstore(0x8780, mload(0x6040)) + success := and(eq(staticcall(gas(), 0x7, 0x8740, 0x60, 0x8740, 0x40), 1), success) + mstore(0x87a0, mload(0x86c0)) + mstore(0x87c0, mload(0x86e0)) + mstore(0x87e0, mload(0x8740)) + mstore(0x8800, mload(0x8760)) + success := and(eq(staticcall(gas(), 0x6, 0x87a0, 0x80, 0x87a0, 0x40), 1), success) + mstore(0x8820, mload(0x1160)) + mstore(0x8840, mload(0x1180)) + mstore(0x8860, mload(0x5900)) + success := and(eq(staticcall(gas(), 0x7, 0x8820, 0x60, 0x8820, 0x40), 1), success) + mstore(0x8880, mload(0x1120)) + mstore(0x88a0, mload(0x1140)) + mstore(0x88c0, mload(0x8820)) + mstore(0x88e0, mload(0x8840)) + success := and(eq(staticcall(gas(), 0x6, 0x8880, 0x80, 0x8880, 0x40), 1), success) + mstore(0x8900, mload(0x11a0)) + mstore(0x8920, mload(0x11c0)) + mstore(0x8940, mload(0x5c20)) + success := and(eq(staticcall(gas(), 0x7, 0x8900, 0x60, 0x8900, 0x40), 1), success) + mstore(0x8960, mload(0x8880)) + mstore(0x8980, mload(0x88a0)) + mstore(0x89a0, mload(0x8900)) + mstore(0x89c0, mload(0x8920)) + success := and(eq(staticcall(gas(), 0x6, 0x8960, 0x80, 0x8960, 0x40), 1), success) + mstore(0x89e0, mload(0x11e0)) + mstore(0x8a00, mload(0x1200)) + mstore(0x8a20, mload(0x5cc0)) + success := and(eq(staticcall(gas(), 0x7, 0x89e0, 0x60, 0x89e0, 0x40), 1), success) + mstore(0x8a40, mload(0x8960)) + mstore(0x8a60, mload(0x8980)) + mstore(0x8a80, mload(0x89e0)) + mstore(0x8aa0, mload(0x8a00)) + success := and(eq(staticcall(gas(), 0x6, 0x8a40, 0x80, 0x8a40, 0x40), 1), success) + mstore(0x8ac0, mload(0x1220)) + mstore(0x8ae0, mload(0x1240)) + mstore(0x8b00, mload(0x5d60)) + success := and(eq(staticcall(gas(), 0x7, 0x8ac0, 0x60, 0x8ac0, 0x40), 1), success) + mstore(0x8b20, mload(0x8a40)) + mstore(0x8b40, mload(0x8a60)) + mstore(0x8b60, mload(0x8ac0)) + mstore(0x8b80, mload(0x8ae0)) + success := and(eq(staticcall(gas(), 0x6, 0x8b20, 0x80, 0x8b20, 0x40), 1), success) + mstore(0x8ba0, mload(0x1260)) + mstore(0x8bc0, mload(0x1280)) + mstore(0x8be0, mload(0x5e40)) + success := and(eq(staticcall(gas(), 0x7, 0x8ba0, 0x60, 0x8ba0, 0x40), 1), success) + mstore(0x8c00, mload(0x8b20)) + mstore(0x8c20, mload(0x8b40)) + mstore(0x8c40, mload(0x8ba0)) + mstore(0x8c60, mload(0x8bc0)) + success := and(eq(staticcall(gas(), 0x6, 0x8c00, 0x80, 0x8c00, 0x40), 1), success) + mstore(0x8c80, mload(0x87a0)) + mstore(0x8ca0, mload(0x87c0)) + mstore(0x8cc0, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) + mstore(0x8ce0, 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) + mstore(0x8d00, 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) + mstore(0x8d20, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa) + mstore(0x8d40, mload(0x8c00)) + mstore(0x8d60, mload(0x8c20)) + mstore(0x8d80, 0x03fecfd23d328341e7c37d832729014de9a532c74fa1e734832b9364afe54ff6) + mstore(0x8da0, 0x1c409140357e6291196cff0168ffabc3272b2b7ff408e5e22698c7097abd3c8e) + mstore(0x8dc0, 0x26664eede2dc90d92950867bfd69fbb8e099bf8ad87665e7ae1b61ced474f8bb) + mstore(0x8de0, 0x2b3f914b211ba74b0bb752fd46788410c534dff9de694623b784dbddd2f43858) + success := and(eq(staticcall(gas(), 0x8, 0x8c80, 0x180, 0x8c80, 0x20), 1), success) + success := and(eq(mload(0x8c80), 1), success) if not(success) { revert(0, 0) } return(0, 0) - } - } - } \ No newline at end of file + } + } +} diff --git a/packages/protocol/tasks/deploy_L1.ts b/packages/protocol/tasks/deploy_L1.ts index 5aba985969..72a7261e8b 100644 --- a/packages/protocol/tasks/deploy_L1.ts +++ b/packages/protocol/tasks/deploy_L1.ts @@ -331,5 +331,7 @@ async function deployPlonkVerifier(hre: any): Promise { "../contracts/libs/yul/PlonkVerifier.yulp" ); - return { address: await utils.deployBytecode(hre, byteCode) }; + return { + address: await utils.deployBytecode(hre, byteCode, "PlonkVerifier"), + }; } diff --git a/packages/protocol/tasks/utils.ts b/packages/protocol/tasks/utils.ts index 7053de252d..ce25616840 100644 --- a/packages/protocol/tasks/utils.ts +++ b/packages/protocol/tasks/utils.ts @@ -78,19 +78,21 @@ function compileYulContract(contractPath: string): string { return byteCode; } -async function deployBytecode(hre: any, byteCode: string): Promise { +async function deployBytecode( + hre: any, + byteCode: string, + name: string +): Promise { const [signer] = await hre.ethers.getSigners(); const tx = await signer.sendTransaction({ data: byteCode }); const receipt = await tx.wait(); - log.debug( - `PlonkVerifier deploying, tx ${tx.hash}, waiting for confirmations` - ); + log.debug(`${name} deploying, tx ${tx.hash}, waiting for confirmations`); if (receipt.status !== 1) { throw new Error( - `failed to create PlonkVerifier contract, transaction ${tx.hash} reverted` + `failed to create ${name} contract, transaction ${tx.hash} reverted` ); }