From 9704bb48fa49168773e22df9177c00b9d429edfe Mon Sep 17 00:00:00 2001 From: Kelvyne Date: Tue, 26 Dec 2023 13:10:30 +0100 Subject: [PATCH] fix: hardhat tests --- .../FCL_Webauthn.sol/FCL_WebAuthn.dbg.json | 2 +- .../FCL_Webauthn.sol/FCL_WebAuthn.json | 4 +- .../FCL_ecdsa.sol/FCL_ecdsa.dbg.json | 4 + .../FCL_ecdsa.sol/FCL_ecdsa.json | 10 ++ .../FCL_ecdsa_utils.dbg.json | 4 + .../FCL_ecdsa_utils.sol/FCL_ecdsa_utils.json | 10 ++ .../FCL_elliptic.sol/FCL_Elliptic_ZZ.dbg.json | 2 +- .../FCL_elliptic.sol/FCL_Elliptic_ZZ.json | 129 +----------------- .../utils/Base64Url.sol/Base64Url.dbg.json | 2 +- .../d699b9a3d7351a481d985f908e577701.json | 1 + .../fd068d5ca84930c6ffb69a4def64cf81.json | 1 - .../WrapperFCLWebAuthn.dbg.json | 4 - .../WrapperFCLWebAuthn.json | 70 ---------- .../P256Signer.sol/P256Signer.dbg.json | 2 +- .../contracts/P256Signer.sol/P256Signer.json | 36 ++--- .../P256SignerFactory.dbg.json | 2 +- .../P256SignerFactory.json | 4 +- .../src/utils/LibClone.sol/LibClone.dbg.json | 2 +- lib/forge-std | 2 +- test/hardhat/safe.test.js | 10 +- 20 files changed, 58 insertions(+), 243 deletions(-) create mode 100644 artifacts/FreshCryptoLib/FCL_ecdsa.sol/FCL_ecdsa.dbg.json create mode 100644 artifacts/FreshCryptoLib/FCL_ecdsa.sol/FCL_ecdsa.json create mode 100644 artifacts/FreshCryptoLib/FCL_ecdsa_utils.sol/FCL_ecdsa_utils.dbg.json create mode 100644 artifacts/FreshCryptoLib/FCL_ecdsa_utils.sol/FCL_ecdsa_utils.json create mode 100644 artifacts/build-info/d699b9a3d7351a481d985f908e577701.json delete mode 100644 artifacts/build-info/fd068d5ca84930c6ffb69a4def64cf81.json delete mode 100644 artifacts/contracts/FCL/WrapperFCLWebAuthn.sol/WrapperFCLWebAuthn.dbg.json delete mode 100644 artifacts/contracts/FCL/WrapperFCLWebAuthn.sol/WrapperFCLWebAuthn.json diff --git a/artifacts/FreshCryptoLib/FCL_Webauthn.sol/FCL_WebAuthn.dbg.json b/artifacts/FreshCryptoLib/FCL_Webauthn.sol/FCL_WebAuthn.dbg.json index fd31369..2b23791 100644 --- a/artifacts/FreshCryptoLib/FCL_Webauthn.sol/FCL_WebAuthn.dbg.json +++ b/artifacts/FreshCryptoLib/FCL_Webauthn.sol/FCL_WebAuthn.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/fd068d5ca84930c6ffb69a4def64cf81.json" + "buildInfo": "../../build-info/d699b9a3d7351a481d985f908e577701.json" } diff --git a/artifacts/FreshCryptoLib/FCL_Webauthn.sol/FCL_WebAuthn.json b/artifacts/FreshCryptoLib/FCL_Webauthn.sol/FCL_WebAuthn.json index fe3d9e6..f6e6a1c 100644 --- a/artifacts/FreshCryptoLib/FCL_Webauthn.sol/FCL_WebAuthn.json +++ b/artifacts/FreshCryptoLib/FCL_Webauthn.sol/FCL_WebAuthn.json @@ -19,8 +19,8 @@ "type": "error" } ], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200263862a83cad763fa89c0fbc976522f2fe1f6f58aa8f116f81dd44d79ab837264736f6c63430008140033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200263862a83cad763fa89c0fbc976522f2fe1f6f58aa8f116f81dd44d79ab837264736f6c63430008140033", + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205ec686acfa02e88a7b10e3662be27203c5dbafb297ba4beccb1abe866cc1438964736f6c63430008140033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205ec686acfa02e88a7b10e3662be27203c5dbafb297ba4beccb1abe866cc1438964736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/FreshCryptoLib/FCL_ecdsa.sol/FCL_ecdsa.dbg.json b/artifacts/FreshCryptoLib/FCL_ecdsa.sol/FCL_ecdsa.dbg.json new file mode 100644 index 0000000..2b23791 --- /dev/null +++ b/artifacts/FreshCryptoLib/FCL_ecdsa.sol/FCL_ecdsa.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../build-info/d699b9a3d7351a481d985f908e577701.json" +} diff --git a/artifacts/FreshCryptoLib/FCL_ecdsa.sol/FCL_ecdsa.json b/artifacts/FreshCryptoLib/FCL_ecdsa.sol/FCL_ecdsa.json new file mode 100644 index 0000000..302e1c0 --- /dev/null +++ b/artifacts/FreshCryptoLib/FCL_ecdsa.sol/FCL_ecdsa.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "FCL_ecdsa", + "sourceName": "FreshCryptoLib/FCL_ecdsa.sol", + "abi": [], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b29a801ab981744287cd32ec87d54caa302eadb87d56b183ab94e3275fd8226564736f6c63430008140033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b29a801ab981744287cd32ec87d54caa302eadb87d56b183ab94e3275fd8226564736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/FreshCryptoLib/FCL_ecdsa_utils.sol/FCL_ecdsa_utils.dbg.json b/artifacts/FreshCryptoLib/FCL_ecdsa_utils.sol/FCL_ecdsa_utils.dbg.json new file mode 100644 index 0000000..2b23791 --- /dev/null +++ b/artifacts/FreshCryptoLib/FCL_ecdsa_utils.sol/FCL_ecdsa_utils.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../build-info/d699b9a3d7351a481d985f908e577701.json" +} diff --git a/artifacts/FreshCryptoLib/FCL_ecdsa_utils.sol/FCL_ecdsa_utils.json b/artifacts/FreshCryptoLib/FCL_ecdsa_utils.sol/FCL_ecdsa_utils.json new file mode 100644 index 0000000..e7647c1 --- /dev/null +++ b/artifacts/FreshCryptoLib/FCL_ecdsa_utils.sol/FCL_ecdsa_utils.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "FCL_ecdsa_utils", + "sourceName": "FreshCryptoLib/FCL_ecdsa_utils.sol", + "abi": [], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220961fa3a78d8662c41faec7b285d5cbcd644c3eff5473df218b753a4efb3afa3a64736f6c63430008140033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220961fa3a78d8662c41faec7b285d5cbcd644c3eff5473df218b753a4efb3afa3a64736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/FreshCryptoLib/FCL_elliptic.sol/FCL_Elliptic_ZZ.dbg.json b/artifacts/FreshCryptoLib/FCL_elliptic.sol/FCL_Elliptic_ZZ.dbg.json index fd31369..2b23791 100644 --- a/artifacts/FreshCryptoLib/FCL_elliptic.sol/FCL_Elliptic_ZZ.dbg.json +++ b/artifacts/FreshCryptoLib/FCL_elliptic.sol/FCL_Elliptic_ZZ.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/fd068d5ca84930c6ffb69a4def64cf81.json" + "buildInfo": "../../build-info/d699b9a3d7351a481d985f908e577701.json" } diff --git a/artifacts/FreshCryptoLib/FCL_elliptic.sol/FCL_Elliptic_ZZ.json b/artifacts/FreshCryptoLib/FCL_elliptic.sol/FCL_Elliptic_ZZ.json index c95f26b..a7d1ec8 100644 --- a/artifacts/FreshCryptoLib/FCL_elliptic.sol/FCL_Elliptic_ZZ.json +++ b/artifacts/FreshCryptoLib/FCL_elliptic.sol/FCL_Elliptic_ZZ.json @@ -2,132 +2,9 @@ "_format": "hh-sol-artifact-1", "contractName": "FCL_Elliptic_ZZ", "sourceName": "FreshCryptoLib/FCL_elliptic.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "zz", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "zzz", - "type": "uint256" - } - ], - "name": "ecZZ_Coronize", - "outputs": [ - { - "internalType": "uint256", - "name": "x3", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y3", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "zz3", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "zzz3", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "h", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "v", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "r", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "s", - "type": "uint256" - } - ], - "name": "ec_recover_r1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "k", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "kpriv", - "type": "uint256" - } - ], - "name": "ecdsa_sign", - "outputs": [ - { - "internalType": "uint256", - "name": "r", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "s", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x61226761003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c80635f67f323146100505780637f99d9601461008d578063e982f355146100c0575b600080fd5b61006361005e36600461215e565b6100e8565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100a061009b366004612190565b610264565b604080519485526020850193909352918301526060820152608001610084565b6100d36100ce3660046121cb565b61035b565b60408051928352602083019190915201610084565b600082158061011757507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518310155b80610120575081155b8061014b57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b156101585750600061025c565b600061016e84610169601b886121f7565b610406565b9050600061017b8561055b565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551827fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518a6000086101f0907fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516121f7565b09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551838709905060008061022a898786866105df565b604080516020808201949094528082019290925280518083038201815260609092019052805191012096505050505050505b949350505050565b6000808080807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8b0990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89820994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d090993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81880992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80828c09870991505095509550955095915050565b60008061036c600080866000611132565b91507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518260000891507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551807fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255185850987086103e68661055b565b0990508115806103f4575080155b156103fe57600080fd5b935093915050565b6000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80858609850990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7fffffffff00000001000000000000000000000000fffffffffffffffffffffffc870983087f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0890506104c781611bf9565b91507fffffffff00000002000000000000000000000000ffffffffffffffffffffffff8203610519577fffffffff00000003000000000000000000000000ffffffffffffffffffffffff915050610555565b82600116826001161461055357610550827fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6121f7565b91505b505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa6105d857600080fd5b5192915050565b600080808060ff6105ee612122565b6105f6612140565b88158015610602575087155b1561061857600080965096505050505050611129565b6106647f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611cce565b6020830152815288831c600190811689851c90911b600216015b806106a05760018403935060018a851c1660018a861c1660011b01905061067e565b50600189841c16600189851c1660011b01945060018503610702577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f595505b60028503610711578a96508995505b600385036107255760208101519550805196505b60018303925060019450600193505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115611011577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff866002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff88850997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89840998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c870908995060018d881c1660018d891c1660011b01905080610a1057897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03995050505050611006565b60018103610a5f577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610a6e578e93508d92505b60038103610a825784519350602085015192505b88610a9b57509198509650600195508594506110069050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c880908935080610dff5783610dff577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a82099950507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a850999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c870985089a505050505050611006565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818b0999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838f097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089c50505050809a50505050505b600183039250610734565b83606083015260208252602080830152602060408301527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808301527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a083015260208260c0846005600019fa61108957600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8251870995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8251860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff858809965050505050505b94509492505050565b600080808060ff818088158015611147575087155b1561115b576000965050505050505061025c565b6111a77f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611cce565b8092508193505050600189841c16600189851c1660011b015b806111e25760018403935060018a851c1660018a861c1660011b0190506111c0565b50600189841c16600189851c1660011b01955060018603611244577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603611253578a96508993505b60038603611262578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115611b49577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b0190508061154d57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050611b3e565b6001810361159c577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b600281036115ab578e93508d92505b600381036115ba578593508492505b896115d35750919850600197508796509450611b3e9050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8809089350806119375783611937577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b82099a50507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050611b3e565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250611271565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa611bc457600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099c9b505050505050505050505050565b600060405160208152602080820152602060408201528260608201527f3fffffffc0000000400000000000000000000000400000000000000000000000608082015260a081017fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815260208160c0846005600019fa611c7757600080fd5b5191508290507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82830914611cc957507fffffffff00000002000000000000000000000000ffffffffffffffffffffffff5b919050565b600080808086611ce5578585935093505050611129565b84611cf7578787935093505050611129565b611d0688886001808a8a611d2b565b929a5090985092509050611d1c88888484611ff0565b93509350505094509492505050565b60008060008088600003611d4a57508492508391506001905080611fe3565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b6000806000611ffe846120a5565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6105d857600080fd5b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6000806000806080858703121561217457600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156121a857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000606084860312156121e057600080fd5b505081359360208301359350604090920135919050565b81810381811115610555577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220e95d75cac5be2e930b8af42215213dbddb970eb865b0823981765d03ccbc4f6c64736f6c63430008140033", - "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c80635f67f323146100505780637f99d9601461008d578063e982f355146100c0575b600080fd5b61006361005e36600461215e565b6100e8565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100a061009b366004612190565b610264565b604080519485526020850193909352918301526060820152608001610084565b6100d36100ce3660046121cb565b61035b565b60408051928352602083019190915201610084565b600082158061011757507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518310155b80610120575081155b8061014b57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b156101585750600061025c565b600061016e84610169601b886121f7565b610406565b9050600061017b8561055b565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551827fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518a6000086101f0907fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516121f7565b09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551838709905060008061022a898786866105df565b604080516020808201949094528082019290925280518083038201815260609092019052805191012096505050505050505b949350505050565b6000808080807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8b0990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89820994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d090993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81880992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80828c09870991505095509550955095915050565b60008061036c600080866000611132565b91507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518260000891507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551807fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255185850987086103e68661055b565b0990508115806103f4575080155b156103fe57600080fd5b935093915050565b6000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80858609850990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7fffffffff00000001000000000000000000000000fffffffffffffffffffffffc870983087f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0890506104c781611bf9565b91507fffffffff00000002000000000000000000000000ffffffffffffffffffffffff8203610519577fffffffff00000003000000000000000000000000ffffffffffffffffffffffff915050610555565b82600116826001161461055357610550827fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6121f7565b91505b505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa6105d857600080fd5b5192915050565b600080808060ff6105ee612122565b6105f6612140565b88158015610602575087155b1561061857600080965096505050505050611129565b6106647f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611cce565b6020830152815288831c600190811689851c90911b600216015b806106a05760018403935060018a851c1660018a861c1660011b01905061067e565b50600189841c16600189851c1660011b01945060018503610702577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f595505b60028503610711578a96508995505b600385036107255760208101519550805196505b60018303925060019450600193505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115611011577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff866002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff88850997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89840998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c870908995060018d881c1660018d891c1660011b01905080610a1057897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03995050505050611006565b60018103610a5f577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610a6e578e93508d92505b60038103610a825784519350602085015192505b88610a9b57509198509650600195508594506110069050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c880908935080610dff5783610dff577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a82099950507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a850999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c870985089a505050505050611006565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818b0999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838f097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089c50505050809a50505050505b600183039250610734565b83606083015260208252602080830152602060408301527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808301527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a083015260208260c0846005600019fa61108957600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8251870995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8251860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff858809965050505050505b94509492505050565b600080808060ff818088158015611147575087155b1561115b576000965050505050505061025c565b6111a77f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611cce565b8092508193505050600189841c16600189851c1660011b015b806111e25760018403935060018a851c1660018a861c1660011b0190506111c0565b50600189841c16600189851c1660011b01955060018603611244577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603611253578a96508993505b60038603611262578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115611b49577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b0190508061154d57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050611b3e565b6001810361159c577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b600281036115ab578e93508d92505b600381036115ba578593508492505b896115d35750919850600197508796509450611b3e9050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8809089350806119375783611937577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b82099a50507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050611b3e565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250611271565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa611bc457600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099c9b505050505050505050505050565b600060405160208152602080820152602060408201528260608201527f3fffffffc0000000400000000000000000000000400000000000000000000000608082015260a081017fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815260208160c0846005600019fa611c7757600080fd5b5191508290507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82830914611cc957507fffffffff00000002000000000000000000000000ffffffffffffffffffffffff5b919050565b600080808086611ce5578585935093505050611129565b84611cf7578787935093505050611129565b611d0688886001808a8a611d2b565b929a5090985092509050611d1c88888484611ff0565b93509350505094509492505050565b60008060008088600003611d4a57508492508391506001905080611fe3565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b6000806000611ffe846120a5565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6105d857600080fd5b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6000806000806080858703121561217457600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156121a857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000606084860312156121e057600080fd5b505081359360208301359350604090920135919050565b81810381811115610555577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220e95d75cac5be2e930b8af42215213dbddb970eb865b0823981765d03ccbc4f6c64736f6c63430008140033", + "abi": [], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e7ab0b3825695b2a217a3739a7a46963208636b10d8ba64ee0ee3077a118f4ed64736f6c63430008140033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e7ab0b3825695b2a217a3739a7a46963208636b10d8ba64ee0ee3077a118f4ed64736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/FreshCryptoLib/utils/Base64Url.sol/Base64Url.dbg.json b/artifacts/FreshCryptoLib/utils/Base64Url.sol/Base64Url.dbg.json index d05dd2b..d30811a 100644 --- a/artifacts/FreshCryptoLib/utils/Base64Url.sol/Base64Url.dbg.json +++ b/artifacts/FreshCryptoLib/utils/Base64Url.sol/Base64Url.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../build-info/fd068d5ca84930c6ffb69a4def64cf81.json" + "buildInfo": "../../../build-info/d699b9a3d7351a481d985f908e577701.json" } diff --git a/artifacts/build-info/d699b9a3d7351a481d985f908e577701.json b/artifacts/build-info/d699b9a3d7351a481d985f908e577701.json new file mode 100644 index 0000000..bdca094 --- /dev/null +++ b/artifacts/build-info/d699b9a3d7351a481d985f908e577701.json @@ -0,0 +1 @@ +{"id":"d699b9a3d7351a481d985f908e577701","_format":"hh-sol-build-info-1","solcVersion":"0.8.20","solcLongVersion":"0.8.20+commit.a1b79de6","input":{"language":"Solidity","sources":{"contracts/P256Signer.sol":{"content":"pragma solidity ^0.8.0;\n\nimport {FCL_WebAuthn} from \"FreshCryptoLib/FCL_Webauthn.sol\";\n\n/// @title P256Signer\n/// @notice A contract used to verify ECDSA signatures over secp256r1 through\n/// EIP-1271 of Webauthn payloads.\n/// @dev This contract is the implementation. It is meant to be used through\n/// proxy clone.\ncontract P256Signer {\n /// @notice The EIP-1271 magic value\n bytes4 internal constant EIP1271_MAGICVALUE = 0x1626ba7e;\n\n /// @notice The old EIP-1271 magic value\n bytes4 internal constant OLD_EIP1271_MAGICVALUE = 0x20c13b0b;\n\n /// @notice Whether the contract has been initialized\n bool public initialized;\n\n /// @notice The x coordinate of the secp256r1 public key\n uint256 public x;\n\n /// @notice The y coordinate of the secp256r1 public key\n uint256 public y;\n\n /// @notice Error message when the signature is invalid\n error InvalidSignature();\n\n /// @notice Error message when the hash is invalid\n error InvalidHash();\n\n /// @notice Error message when the contract is already initialized\n error AlreadyInitialized();\n\n constructor() {\n initialized = true;\n }\n\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\n /// @param _hash The hash of the data signed\n /// @param _signature The signature\n /// @return The EIP-1271 magic value\n function isValidSignature(bytes32 _hash, bytes calldata _signature) public view returns (bytes4) {\n _validate(abi.encode(_hash), _signature);\n return EIP1271_MAGICVALUE;\n }\n\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\n /// @dev This is the old version of the function of EIP-1271 using bytes\n /// memory instead of bytes32\n /// @param _hash The hash of the data signed\n /// @param _signature The signature\n /// @return The EIP-1271 magic value\n function isValidSignature(bytes memory _hash, bytes calldata _signature) public view returns (bytes4) {\n _validate(_hash, _signature);\n return OLD_EIP1271_MAGICVALUE;\n }\n\n struct SignatureLayout {\n bytes authenticatorData;\n bytes clientData;\n uint256 challengeOffset;\n uint256[2] rs;\n }\n\n /// @notice Validates the signature\n /// @param data The data signed\n /// @param _signature The signature\n function _validate(bytes memory data, bytes calldata _signature) private view {\n bytes32 _hash = keccak256(data);\n SignatureLayout calldata signaturePointer;\n // This code should precalculate the offsets of variables as defined in the layout\n // Calldata variables are represented as offsets, and, I think, length for dynamic types\n // If the calldata is malformed (e.g., shorter than expected), this will revert with an out of bounds error\n assembly {\n signaturePointer := _signature.offset\n }\n\n bool valid = FCL_WebAuthn.checkSignature(\n signaturePointer.authenticatorData,\n 0x01,\n signaturePointer.clientData,\n _hash,\n signaturePointer.challengeOffset,\n signaturePointer.rs,\n x,\n y\n );\n\n if (!valid) revert InvalidSignature();\n }\n\n /// @dev This function is only callable once and needs to be called immediately\n /// after deployment by the factory in the same transaction.\n /// @param x_ The x coordinate of the public key\n /// @param y_ The y coordinate of the public key\n function initialize(uint256 x_, uint256 y_) external {\n if (initialized) revert AlreadyInitialized();\n initialized = true;\n x = x_;\n y = y_;\n }\n}\n"},"contracts/P256SignerFactory.sol":{"content":"pragma solidity ^0.8.0;\n\nimport {P256Signer} from \"./P256Signer.sol\";\nimport \"solady/src/utils/LibClone.sol\";\n\n/// @title P256SignerFactory\n/// @notice Factory contract for creating proxies for P256Signer\ncontract P256SignerFactory {\n /// @notice The implementation address of the P256Signer contract\n address public immutable implementation;\n\n constructor(address implementation_) {\n implementation = implementation_;\n }\n\n /// @notice Emitted when a new P256Signer proxy contract is created\n event NewSignerCreated(uint256 indexed x, uint256 indexed y, address signer);\n\n /// @notice Creates a new P256Signer proxy contract\n /// @param x The x coordinate of the public key\n /// @param y The y coordinate of the public key\n function create(uint256 x, uint256 y) external returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(x, y));\n address signer = LibClone.cloneDeterministic(implementation, salt);\n P256Signer(signer).initialize(x, y);\n emit NewSignerCreated(x, y, signer);\n return signer;\n }\n}\n"},"FreshCryptoLib/FCL_ecdsa_utils.sol":{"content":"\n//********************************************************************************************/\n// ___ _ ___ _ _ _ _\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\n// | _| '_/ -_|_-< ' \\ | (__| '_| || | '_ \\ _/ _ \\ | |__| | '_ \\\n// |_||_| \\___/__/_||_| \\___|_| \\_, | .__/\\__\\___/ |____|_|_.__/\n// |__/|_|\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\n///* License: This software is licensed under MIT License\n///* This Code may be reused including license and copyright notice.\n///* See LICENSE file at the root folder of the project.\n///* FILE: FCL_ecdsa.sol\n///*\n///*\n///* DESCRIPTION: ecdsa verification implementation\n///*\n//**************************************************************************************/\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\n// if ever used for other curve than sec256R1\n// SPDX-License-Identifier: MIT\npragma solidity >=0.8.19 <0.9.0;\n\n\nimport {FCL_Elliptic_ZZ} from \"./FCL_elliptic.sol\";\n\n\n\nlibrary FCL_ecdsa_utils {\n // Set parameters for curve sec256r1.public\n //curve order (number of points)\n uint256 constant n = FCL_Elliptic_ZZ.n;\n \n /**\n * @dev ECDSA verification, given , signature, and public key.\n */\n\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256 Qx, uint256 Qy) internal view returns (bool) {\n uint256 r = rs[0];\n uint256 s = rs[1];\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\n return false;\n }\n if (!FCL_Elliptic_ZZ.ecAff_isOnCurve(Qx, Qy)) {\n return false;\n }\n\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\n\n uint256 scalar_u = mulmod(uint256(message), sInv, FCL_Elliptic_ZZ.n);\n uint256 scalar_v = mulmod(r, sInv, FCL_Elliptic_ZZ.n);\n uint256 x1;\n\n x1 = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(Qx, Qy, scalar_u, scalar_v);\n x1= addmod(x1, n-r,n );\n \n \n return x1 == 0;\n }\n\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256[2] calldata Q) internal view returns (bool) {\n return ecdsa_verify(message, rs, Q[0], Q[1]);\n }\n\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) internal view returns (address)\n {\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\n return address(0);\n }\n uint256 y=FCL_Elliptic_ZZ.ec_Decompress(r, v-27);\n uint256 rinv=FCL_Elliptic_ZZ.FCL_nModInv(r);\n uint256 u1=mulmod(FCL_Elliptic_ZZ.n-addmod(0,h,FCL_Elliptic_ZZ.n), rinv,FCL_Elliptic_ZZ.n);//-hr^-1\n uint256 u2=mulmod(s, rinv,FCL_Elliptic_ZZ.n);//sr^-1\n\n uint256 Qx;\n uint256 Qy;\n (Qx,Qy)=FCL_Elliptic_ZZ.ecZZ_mulmuladd(r,y, u1, u2);\n\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\n }\n\n\n //ecdsa signature for test purpose only (who would like to have a private key onchain anyway ?)\n //K is nonce, kpriv is private key\n function ecdsa_sign(bytes32 message, uint256 k , uint256 kpriv) internal view returns(uint256 r, uint256 s)\n {\n r=FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(0,0, k, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\n r=addmod(0,r, FCL_Elliptic_ZZ.n); \n s=mulmod(FCL_Elliptic_ZZ.FCL_nModInv(k), addmod(uint256(message), mulmod(r, kpriv, FCL_Elliptic_ZZ.n),FCL_Elliptic_ZZ.n),FCL_Elliptic_ZZ.n);//s=k^-1.(h+r.kpriv)\n\n \n if(r==0||s==0){\n revert();\n }\n\n\n }\n\n //ecdsa key derivation\n //kpriv is private key return (x,y) coordinates of associated Pubkey\n function ecdsa_derivKpub(uint256 kpriv) internal view returns(uint256 x, uint256 y)\n {\n \n x=FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(0,0, kpriv, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\n y=FCL_Elliptic_ZZ.ec_Decompress(x, 1);\n \n if (FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(x, y, kpriv, FCL_Elliptic_ZZ.n - 1) != 0) //extract correct y value\n {\n y=FCL_Elliptic_ZZ.p-y;\n } \n\n }\n \n //precomputations for 8 dimensional trick\n function Precalc_8dim( uint256 Qx, uint256 Qy) internal view returns( uint[2][256] memory Prec)\n {\n \n uint[2][8] memory Pow64_PQ; //store P, 64P, 128P, 192P, Q, 64Q, 128Q, 192Q\n \n //the trivial private keys 1 and -1 are forbidden\n if(Qx==FCL_Elliptic_ZZ.gx)\n {\n revert();\n }\n Pow64_PQ[0][0]=FCL_Elliptic_ZZ.gx;\n Pow64_PQ[0][1]=FCL_Elliptic_ZZ.gy;\n \n Pow64_PQ[4][0]=Qx;\n Pow64_PQ[4][1]=Qy;\n \n /* raise to multiplication by 64 by 6 consecutive doubling*/\n for(uint j=1;j<4;j++){\n uint256 x;\n uint256 y;\n uint256 zz;\n uint256 zzz;\n \n \t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j-1][0], Pow64_PQ[j-1][1], 1, 1);\n \t(Pow64_PQ[j][0], Pow64_PQ[j][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\n (x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j+3][0], Pow64_PQ[j+3][1], 1, 1);\n \t(Pow64_PQ[j+4][0], Pow64_PQ[j+4][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\n\n \tfor(uint i=0;i<63;i++){\n \t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j][0], Pow64_PQ[j][1],1,1);\n (Pow64_PQ[j][0], Pow64_PQ[j][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\n \t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j+4][0], Pow64_PQ[j+4][1],1,1);\n (Pow64_PQ[j+4][0], Pow64_PQ[j+4][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\n \t}\n }\n \n /* neutral point */\n Prec[0][0]=0;\n Prec[0][1]=0;\n \n \t\n for(uint i=1;i<256;i++)\n { \n Prec[i][0]=0;\n Prec[i][1]=0;\n \n for(uint j=0;j<8;j++)\n {\n \tif( (i&(1<=0.8.19 <0.9.0;\n\n\nimport {FCL_Elliptic_ZZ} from \"./FCL_elliptic.sol\";\n\n\n\nlibrary FCL_ecdsa {\n // Set parameters for curve sec256r1.public\n //curve order (number of points)\n uint256 constant n = FCL_Elliptic_ZZ.n;\n \n /**\n * @dev ECDSA verification, given , signature, and public key.\n */\n\n /**\n * @dev ECDSA verification, given , signature, and public key, no calldata version\n */\n function ecdsa_verify(bytes32 message, uint256 r, uint256 s, uint256 Qx, uint256 Qy) internal view returns (bool){\n\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\n return false;\n }\n \n if (!FCL_Elliptic_ZZ.ecAff_isOnCurve(Qx, Qy)) {\n return false;\n }\n\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\n\n uint256 scalar_u = mulmod(uint256(message), sInv, FCL_Elliptic_ZZ.n);\n uint256 scalar_v = mulmod(r, sInv, FCL_Elliptic_ZZ.n);\n uint256 x1;\n\n x1 = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(Qx, Qy, scalar_u, scalar_v);\n\n x1= addmod(x1, n-r,n );\n \n return x1 == 0;\n }\n\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) internal view returns (address)\n {\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\n return address(0);\n }\n uint256 y=FCL_Elliptic_ZZ.ec_Decompress(r, v-27);\n uint256 rinv=FCL_Elliptic_ZZ.FCL_nModInv(r);\n uint256 u1=mulmod(FCL_Elliptic_ZZ.n-addmod(0,h,FCL_Elliptic_ZZ.n), rinv,FCL_Elliptic_ZZ.n);//-hr^-1\n uint256 u2=mulmod(s, rinv,FCL_Elliptic_ZZ.n);//sr^-1\n\n uint256 Qx;\n uint256 Qy;\n (Qx,Qy)=FCL_Elliptic_ZZ.ecZZ_mulmuladd(r,y, u1, u2);\n\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\n }\n\n function ecdsa_precomputed_verify(bytes32 message, uint256 r, uint256 s, address Shamir8)\n internal view\n returns (bool)\n {\n \n if (r == 0 || r >= n || s == 0 || s >= n) {\n return false;\n }\n /* Q is pushed via the contract at address Shamir8 assumed to be correct\n if (!isOnCurve(Q[0], Q[1])) {\n return false;\n }*/\n\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\n\n uint256 X;\n\n //Shamir 8 dimensions\n X = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\n\n X= addmod(X, n-r,n );\n\n return X == 0;\n } //end ecdsa_precomputed_verify()\n\n function ecdsa_precomputed_verify(bytes32 message, uint256[2] calldata rs, address Shamir8)\n internal view\n returns (bool)\n {\n uint256 r = rs[0];\n uint256 s = rs[1];\n if (r == 0 || r >= n || s == 0 || s >= n) {\n return false;\n }\n /* Q is pushed via the contract at address Shamir8 assumed to be correct\n if (!isOnCurve(Q[0], Q[1])) {\n return false;\n }*/\n\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\n\n uint256 X;\n\n //Shamir 8 dimensions\n X = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\n\n X= addmod(X, n-r,n );\n\n return X == 0;\n } //end ecdsa_precomputed_verify()\n\n}\n"},"FreshCryptoLib/FCL_elliptic.sol":{"content":"//********************************************************************************************/\n// ___ _ ___ _ _ _ _\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\n// | _| '_/ -_|_-< ' \\ | (__| '_| || | '_ \\ _/ _ \\ | |__| | '_ \\\n// |_||_| \\___/__/_||_| \\___|_| \\_, | .__/\\__\\___/ |____|_|_.__/\n// |__/|_|\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\n///* License: This software is licensed under MIT License\n///* This Code may be reused including license and copyright notice.\n///* See LICENSE file at the root folder of the project.\n///* FILE: FCL_elliptic.sol\n///*\n///*\n///* DESCRIPTION: modified XYZZ system coordinates for EVM elliptic point multiplication\n///* optimization\n///*\n//**************************************************************************************/\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\n// if ever used for other curve than sec256R1\n// SPDX-License-Identifier: MIT\npragma solidity >=0.8.19 <0.9.0;\n\nlibrary FCL_Elliptic_ZZ {\n // Set parameters for curve sec256r1.\n\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\n //curve prime field modulus\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\n //short weierstrass first coefficient\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\n //short weierstrass second coefficient\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\n //generating point affine coordinates\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\n //curve order (number of points)\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\n /* -2 mod n constant, used to speed up inversion*/\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\n\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\n //P+1 div 4\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\n //arbitrary constant to express no quadratic residuosity\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\n\n /**\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\n */\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\n assembly {\n let pointer := mload(0x40)\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(pointer, 0x20)\n mstore(add(pointer, 0x20), 0x20)\n mstore(add(pointer, 0x40), 0x20)\n // Define variables base, exponent and modulus\n mstore(add(pointer, 0x60), u)\n mstore(add(pointer, 0x80), minus_2modn)\n mstore(add(pointer, 0xa0), n)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\n result := mload(pointer)\n }\n }\n /**\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\n */\n\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\n assembly {\n let pointer := mload(0x40)\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(pointer, 0x20)\n mstore(add(pointer, 0x20), 0x20)\n mstore(add(pointer, 0x40), 0x20)\n // Define variables base, exponent and modulus\n mstore(add(pointer, 0x60), u)\n mstore(add(pointer, 0x80), minus_2)\n mstore(add(pointer, 0xa0), p)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\n result := mload(pointer)\n }\n }\n\n //Coron projective shuffling, take as input alpha as blinding factor\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\n {\n \n uint256 alpha2=mulmod(alpha,alpha,p);\n \n x3=mulmod(alpha2, x,p); //alpha^-2.x\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\n\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\n \n return (x3, y3, zz3, zzz3);\n }\n\n\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\n {\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\n u2=addmod(u2, p-u1, p);// P = U2-U1\n x1=mulmod(u2, u2, p);//PP\n x2=mulmod(x1, u2, p);//PPP\n \n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\n\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\n\n return (x3, y3, zz3, zzz3);\n }\n\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\n/// @param self The integer of which to find the modular inverse\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\n\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\n assembly (\"memory-safe\") {\n // load the free memory pointer value\n let pointer := mload(0x40)\n\n // Define length of base (Bsize)\n mstore(pointer, 0x20)\n // Define the exponent size (Esize)\n mstore(add(pointer, 0x20), 0x20)\n // Define the modulus size (Msize)\n mstore(add(pointer, 0x40), 0x20)\n // Define variables base (B)\n mstore(add(pointer, 0x60), self)\n // Define the exponent (E)\n mstore(add(pointer, 0x80), pp1div4)\n // We save the point of the last argument, it will be override by the result\n // of the precompile call in order to avoid paying for the memory expansion properly\n let _result := add(pointer, 0xa0)\n // Define the modulus (M)\n mstore(_result, p)\n\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\n if iszero(\n staticcall(\n not(0), // amount of gas to send\n MODEXP_PRECOMPILE, // target\n pointer, // argsOffset\n 0xc0, // argsSize (6 * 32 bytes)\n _result, // retOffset (we override M to avoid paying for the memory expansion)\n 0x20 // retSize (32 bytes)\n )\n ) { revert(0, 0) }\n\n result := mload(_result)\n// result :=addmod(result,0,p)\n }\n if(mulmod(result,result,p)!=self){\n result=_NOTSQUARE;\n }\n \n return result;\n}\n /**\n * /* @dev Convert from affine rep to XYZZ rep\n */\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\n unchecked {\n P[2] = 1; //ZZ\n P[3] = 1; //ZZZ\n P[0] = x0;\n P[1] = y0;\n }\n }\n\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \n\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\n\n y=SqrtMod(y2);\n if(y==_NOTSQUARE){\n return _NOTONCURVE;\n }\n if((y&1)!=(parity&1)){\n y=p-y;\n }\n }\n\n /**\n * /* @dev Convert from XYZZ rep to affine rep\n */\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\n y1 = mulmod(y, zzzInv, p); //Y/zzz\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\n zzzInv = mulmod(_b, _b, p); //1/zz\n x1 = mulmod(x, zzzInv, p); //X/zz\n }\n\n /**\n * /* @dev Sutherland2008 doubling\n */\n /* The \"dbl-2008-s-1\" doubling formulas */\n\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\n internal\n pure\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\n {\n unchecked {\n assembly {\n P0 := mulmod(2, y, p) //U = 2*Y1\n P2 := mulmod(P0, P0, p) // V=U^2\n P3 := mulmod(x, P2, p) // S = X1*V\n P1 := mulmod(P0, P2, p) // W=UV\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\n }\n }\n return (P0, P1, P2, P3);\n }\n\n /**\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\n */\n\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\n internal\n pure\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\n {\n unchecked {\n if (y1 == 0) {\n return (x2, y2, 1, 1);\n }\n\n assembly {\n y1 := sub(p, y1)\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\n P0 := mulmod(x2, x2, p) //PP = P^2\n P1 := mulmod(P0, x2, p) //PPP = P*PP\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\n }\n //end assembly\n } //end unchecked\n return (P0, P1, P2, P3);\n }\n\n /**\n * @dev Return the zero curve in XYZZ coordinates.\n */\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\n return (0, 0, 0, 0);\n }\n /**\n * @dev Check if point is the neutral of the curve\n */\n\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\n return y0 == 0;\n }\n /**\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\n */\n\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\n return (0, 0);\n }\n\n /**\n * @dev Check if the curve is the zero curve in affine rep.\n */\n // uint256 x, uint256 y)\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\n return (y == 0);\n }\n\n /**\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\n */\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\n if ( ((0 == x)&&( 0 == y)) || x == p || y == p) {\n return false;\n }\n unchecked {\n uint256 LHS = mulmod(y, y, p); // y^2\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\n\n return LHS == RHS;\n }\n }\n\n /**\n * @dev Add two elliptic curve points in affine coordinates. Deal with P=Q\n */\n\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\n uint256 zz0;\n uint256 zzz0;\n\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\n if((x0==x1)&&(y0==y1)) {\n (x0, y0, zz0, zzz0) = ecZZ_Dbl(x0, y0,1,1);\n }\n else{\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\n }\n\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\n }\n\n /**\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\n * Returns only x for ECDSA use \n * */\n function ecZZ_mulmuladd_S_asm(\n uint256 Q0,\n uint256 Q1, //affine rep for input point Q\n uint256 scalar_u,\n uint256 scalar_v\n ) internal view returns (uint256 X) {\n uint256 zz;\n uint256 zzz;\n uint256 Y;\n uint256 index = 255;\n uint256 H0;\n uint256 H1;\n\n unchecked {\n if (scalar_u == 0 && scalar_v == 0) return 0;\n\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); \n if((H0==0)&&(H1==0))//handling Q=-G\n {\n scalar_u=addmod(scalar_u, n-scalar_v, n);\n scalar_v=0;\n\n }\n assembly {\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\n index := sub(index, 1)\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n } {}\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n\n if eq(zz, 1) {\n X := gx\n Y := gy\n }\n if eq(zz, 2) {\n X := Q0\n Y := Q1\n }\n if eq(zz, 3) {\n X := H0\n Y := H1\n }\n\n index := sub(index, 1)\n zz := 1\n zzz := 1\n\n for {} gt(minus_1, index) { index := sub(index, 1) } {\n // inlined EcZZ_Dbl\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\n let T2 := mulmod(T1, T1, p) // V=U^2\n let T3 := mulmod(X, T2, p) // S = X1*V\n T1 := mulmod(T1, T2, p) // W=UV\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\n\n {\n //value of dibit\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n\n if iszero(T4) {\n Y := sub(p, Y) //restore the -Y inversion\n continue\n } // if T4!=0\n\n if eq(T4, 1) {\n T1 := gx\n T2 := gy\n }\n if eq(T4, 2) {\n T1 := Q0\n T2 := Q1\n }\n if eq(T4, 3) {\n T1 := H0\n T2 := H1\n }\n if iszero(zz) {\n X := T1\n Y := T2\n zz := 1\n zzz := 1\n continue\n }\n // inlined EcZZ_AddN\n\n //T3:=sub(p, Y)\n //T3:=Y\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\n\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\n //todo : construct edge vector case\n if iszero(y2) {\n if iszero(T2) {\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\n T2 := mulmod(T1, T1, p) // V=U^2\n T3 := mulmod(X, T2, p) // S = X1*V\n\n T1 := mulmod(T1, T2, p) // W=UV\n y2 := mulmod(addmod(X, zz, p), addmod(X, sub(p, zz), p), p) //(X-ZZ)(X+ZZ)\n T4 := mulmod(3, y2, p) //M=3*(X-ZZ)(X+ZZ)\n\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\n\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\n\n continue\n }\n }\n\n T4 := mulmod(T2, T2, p) //PP\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\n zz := mulmod(zz, T4, p)\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\n let TT2 := mulmod(X, T4, p)\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\n\n X := T4\n }\n } //end loop\n let T := mload(0x40)\n mstore(add(T, 0x60), zz)\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(T, 0x20)\n mstore(add(T, 0x20), 0x20)\n mstore(add(T, 0x40), 0x20)\n // Define variables base, exponent and modulus\n //mstore(add(pointer, 0x60), u)\n mstore(add(T, 0x80), minus_2)\n mstore(add(T, 0xa0), p)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\n\n //Y:=mulmod(Y,zzz,p)//Y/zzz\n //zz :=mulmod(zz, mload(T),p) //1/z\n //zz:= mulmod(zz,zz,p) //1/zz\n X := mulmod(X, mload(T), p) //X/zz\n } //end assembly\n } //end unchecked\n\n return X;\n }\n\n\n /**\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\n * Returns affine representation of point (normalized) \n * */\n function ecZZ_mulmuladd(\n uint256 Q0,\n uint256 Q1, //affine rep for input point Q\n uint256 scalar_u,\n uint256 scalar_v\n ) internal view returns (uint256 X, uint256 Y) {\n uint256 zz;\n uint256 zzz;\n uint256 index = 255;\n uint256[6] memory T;\n uint256[2] memory H;\n \n unchecked {\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\n\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\n\n assembly {\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\n index := sub(index, 1)\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n } {}\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n\n if eq(zz, 1) {\n X := gx\n Y := gy\n }\n if eq(zz, 2) {\n X := Q0\n Y := Q1\n }\n if eq(zz, 3) {\n Y := mload(add(H,32))\n X := mload(H)\n }\n\n index := sub(index, 1)\n zz := 1\n zzz := 1\n\n for {} gt(minus_1, index) { index := sub(index, 1) } {\n // inlined EcZZ_Dbl\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\n let T2 := mulmod(T1, T1, p) // V=U^2\n let T3 := mulmod(X, T2, p) // S = X1*V\n T1 := mulmod(T1, T2, p) // W=UV\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\n\n {\n //value of dibit\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n\n if iszero(T4) {\n Y := sub(p, Y) //restore the -Y inversion\n continue\n } // if T4!=0\n\n if eq(T4, 1) {\n T1 := gx\n T2 := gy\n }\n if eq(T4, 2) {\n T1 := Q0\n T2 := Q1\n }\n if eq(T4, 3) {\n T1 := mload(H)\n T2 := mload(add(H,32))\n }\n if iszero(zz) {\n X := T1\n Y := T2\n zz := 1\n zzz := 1\n continue\n }\n // inlined EcZZ_AddN\n\n //T3:=sub(p, Y)\n //T3:=Y\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\n\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\n //todo : construct edge vector case\n if iszero(y2) {\n if iszero(T2) {\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\n T2 := mulmod(T1, T1, p) // V=U^2\n T3 := mulmod(X, T2, p) // S = X1*V\n\n T1 := mulmod(T1, T2, p) // W=UV\n y2 := addmod(X, zz, p) //X+ZZ\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\n T4 := mulmod(3, y2, p) //M\n\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\n\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\n\n continue\n }\n }\n\n T4 := mulmod(T2, T2, p) //PP\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\n zz := mulmod(zz, T4, p)\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\n let TT2 := mulmod(X, T4, p)\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\n\n X := T4\n }\n } //end loop\n mstore(add(T, 0x60), zzz)\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(T, 0x20)\n mstore(add(T, 0x20), 0x20)\n mstore(add(T, 0x40), 0x20)\n // Define variables base, exponent and modulus\n //mstore(add(pointer, 0x60), u)\n mstore(add(T, 0x80), minus_2)\n mstore(add(T, 0xa0), p)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\n\n Y:=mulmod(Y,mload(T),p)//Y/zzz\n zz :=mulmod(zz, mload(T),p) //1/z\n zz:= mulmod(zz,zz,p) //1/zz\n X := mulmod(X, zz, p) //X/zz\n } //end assembly\n } //end unchecked\n\n return (X,Y);\n }\n\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\n //contract at given address dataPointer\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\n // the external tool to generate tables from public key is in the /sage directory\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\n internal view\n returns (uint256 X /*, uint Y*/ )\n {\n unchecked {\n uint256 zz; // third and coordinates of the point\n\n uint256[6] memory T;\n zz = 256; //start index\n\n while (T[0] == 0) {\n zz = zz - 1;\n //tbd case of msb octobit is null\n T[0] = 64\n * (\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\n );\n }\n assembly {\n extcodecopy(dataPointer, T, mload(T), 64)\n let index := sub(zz, 1)\n X := mload(T)\n let Y := mload(add(T, 32))\n let zzz := 1\n zz := 1\n\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\n for {} gt(index, 191) { index := add(index, 191) } {\n //inline Double\n {\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\n let T2 := mulmod(TT1, TT1, p) // V=U^2\n let T3 := mulmod(X, T2, p) // S = X1*V\n let T1 := mulmod(TT1, T2, p) // W=UV\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\n\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\n\n /* compute element to access in precomputed table */\n }\n {\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\n let index2 := sub(index, 64)\n let T3 :=\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\n let index3 := sub(index2, 64)\n let T2 :=\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\n index := sub(index3, 64)\n let T1 :=\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\n\n //tbd: check validity of formulae with (0,1) to remove conditional jump\n if iszero(T1) {\n Y := sub(p, Y)\n\n continue\n }\n extcodecopy(dataPointer, T, T1, 64)\n }\n\n {\n /* Access to precomputed table using extcodecopy hack */\n\n // inlined EcZZ_AddN\n if iszero(zz) {\n X := mload(T)\n Y := mload(add(T, 32))\n zz := 1\n zzz := 1\n\n continue\n }\n\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\n\n //special case ecAdd(P,P)=EcDbl\n if iszero(y2) {\n if iszero(T2) {\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\n T2 := mulmod(T1, T1, p) // V=U^2\n let T3 := mulmod(X, T2, p) // S = X1*V\n\n T1 := mulmod(T1, T2, p) // W=UV\n y2 := addmod(X, zz, p) //X+ZZ\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\n let T4 := mulmod(3, y2, p) //M\n\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\n\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\n\n continue\n }\n }\n\n let T4 := mulmod(T2, T2, p)\n let T1 := mulmod(T4, T2, p) //\n zz := mulmod(zz, T4, p)\n //zzz3=V*ZZ1\n zzz := mulmod(zzz, T1, p) // W=UV/\n let zz1 := mulmod(X, T4, p)\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\n }\n } //end loop\n mstore(add(T, 0x60), zz)\n\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(T, 0x20)\n mstore(add(T, 0x20), 0x20)\n mstore(add(T, 0x40), 0x20)\n // Define variables base, exponent and modulus\n //mstore(add(pointer, 0x60), u)\n mstore(add(T, 0x80), minus_2)\n mstore(add(T, 0xa0), p)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\n\n zz := mload(T)\n X := mulmod(X, zz, p) //X/zz\n }\n } //end unchecked\n }\n\n \n\n // improving the extcodecopy trick : append array at end of contract\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\n internal view\n returns (uint256 X /*, uint Y*/ )\n {\n uint256 zz; // third and coordinates of the point\n\n uint256[6] memory T;\n zz = 256; //start index\n\n unchecked {\n while (T[0] == 0) {\n zz = zz - 1;\n //tbd case of msb octobit is null\n T[0] = 64\n * (\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\n );\n }\n assembly {\n codecopy(T, add(mload(T), dataPointer), 64)\n X := mload(T)\n let Y := mload(add(T, 32))\n let zzz := 1\n zz := 1\n\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\n let T2 := mulmod(T1, T1, p) // V=U^2\n let T3 := mulmod(X, T2, p) // S = X1*V\n T1 := mulmod(T1, T2, p) // W=UV\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\n\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\n\n /* compute element to access in precomputed table */\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\n index := sub(index, 64)\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\n index := sub(index, 64)\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\n index := sub(index, 64)\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\n //index:=add(index,192), restore index, interleaved with loop\n\n //tbd: check validity of formulae with (0,1) to remove conditional jump\n if iszero(T4) {\n Y := sub(p, Y)\n\n continue\n }\n {\n /* Access to precomputed table using extcodecopy hack */\n codecopy(T, add(T4, dataPointer), 64)\n\n // inlined EcZZ_AddN\n\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\n T4 := mulmod(T2, T2, p)\n T1 := mulmod(T4, T2, p)\n T2 := mulmod(zz, T4, p) // W=UV\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\n let zz1 := mulmod(X, T4, p)\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\n zz := T2\n X := T4\n }\n } //end loop\n mstore(add(T, 0x60), zz)\n\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(T, 0x20)\n mstore(add(T, 0x20), 0x20)\n mstore(add(T, 0x40), 0x20)\n // Define variables base, exponent and modulus\n //mstore(add(pointer, 0x60), u)\n mstore(add(T, 0x80), minus_2)\n mstore(add(T, 0xa0), p)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\n\n zz := mload(T)\n X := mulmod(X, zz, p) //X/zz\n }\n } //end unchecked\n }\n\n\n /**\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\n * generation of contract bytecode for precomputations is done using sagemath code\n * (see sage directory, WebAuthn_precompute.sage)\n */\n\n /**\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\n * generation of contract bytecode for precomputations is done using sagemath code\n * (see sage directory, WebAuthn_precompute.sage)\n */\n\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\n internal view\n returns (bool)\n {\n uint256 r = rs[0];\n uint256 s = rs[1];\n if (r == 0 || r >= n || s == 0 || s >= n) {\n return false;\n }\n /* Q is pushed via bytecode assumed to be correct\n if (!isOnCurve(Q[0], Q[1])) {\n return false;\n }*/\n\n uint256 sInv = FCL_nModInv(s);\n uint256 X;\n\n //Shamir 8 dimensions\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\n\n assembly {\n X := addmod(X, sub(n, r), n)\n }\n return X == 0;\n } //end ecdsa_precomputed_verify()\n\n\n\n} //EOF\n"},"FreshCryptoLib/FCL_Webauthn.sol":{"content":"//********************************************************************************************/\n// ___ _ ___ _ _ _ _\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\n// | _| '_/ -_|_-< ' \\ | (__| '_| || | '_ \\ _/ _ \\ | |__| | '_ \\\n// |_||_| \\___/__/_||_| \\___|_| \\_, | .__/\\__\\___/ |____|_|_.__/\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\n///* License: This software is licensed under MIT License\n///* This Code may be reused including license and copyright notice.\n///* See LICENSE file at the root folder of the project.\n///* FILE: FCL_elliptic.sol\n///*\n///*\n///* DESCRIPTION: Implementation of the WebAuthn Authentication mechanism\n///* https://www.w3.org/TR/webauthn-2/#sctn-intro\n///* Original code extracted from https://github.com/btchip/Webauthn.sol\n//**************************************************************************************/\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\n// if ever used for other curve than sec256R1\n// SPDX-License-Identifier: MIT\npragma solidity >=0.8.19 <0.9.0;\n\nimport {Base64Url} from \"./utils/Base64Url.sol\";\nimport {FCL_Elliptic_ZZ} from \"./FCL_elliptic.sol\";\nimport {FCL_ecdsa} from \"./FCL_ecdsa.sol\";\n\nimport {FCL_ecdsa_utils} from \"./FCL_ecdsa_utils.sol\";\n\nlibrary FCL_WebAuthn {\n error InvalidAuthenticatorData();\n error InvalidClientData();\n error InvalidSignature();\n\n function WebAuthn_format(\n bytes calldata authenticatorData,\n bytes1 authenticatorDataFlagMask,\n bytes calldata clientData,\n bytes32 clientChallenge,\n uint256 clientChallengeDataOffset,\n uint256[2] calldata // rs\n ) internal pure returns (bytes32 result) {\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\n {\n if ((authenticatorData[32] & authenticatorDataFlagMask) != authenticatorDataFlagMask) {\n revert InvalidAuthenticatorData();\n }\n // Verify that clientData commits to the expected client challenge\n // Use the Base64Url encoding which omits padding characters to match WebAuthn Specification\n string memory challengeEncoded = Base64Url.encode(abi.encodePacked(clientChallenge));\n bytes memory challengeExtracted = new bytes(\n bytes(challengeEncoded).length\n );\n\n assembly {\n calldatacopy(\n add(challengeExtracted, 32),\n add(clientData.offset, clientChallengeDataOffset),\n mload(challengeExtracted)\n )\n }\n\n bytes32 moreData; //=keccak256(abi.encodePacked(challengeExtracted));\n assembly {\n moreData := keccak256(add(challengeExtracted, 32), mload(challengeExtracted))\n }\n\n if (keccak256(abi.encodePacked(bytes(challengeEncoded))) != moreData) {\n revert InvalidClientData();\n }\n } //avoid stack full\n\n // Verify the signature over sha256(authenticatorData || sha256(clientData))\n bytes memory verifyData = new bytes(authenticatorData.length + 32);\n\n assembly {\n calldatacopy(add(verifyData, 32), authenticatorData.offset, authenticatorData.length)\n }\n\n bytes32 more = sha256(clientData);\n assembly {\n mstore(add(verifyData, add(authenticatorData.length, 32)), more)\n }\n\n return sha256(verifyData);\n }\n\n function checkSignature (\n bytes calldata authenticatorData,\n bytes1 authenticatorDataFlagMask,\n bytes calldata clientData,\n bytes32 clientChallenge,\n uint256 clientChallengeDataOffset,\n uint256[2] calldata rs,\n uint256[2] calldata Q\n ) internal view returns (bool) {\n return checkSignature(authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs, Q[0], Q[1]);\n }\n\n function checkSignature (\n bytes calldata authenticatorData,\n bytes1 authenticatorDataFlagMask,\n bytes calldata clientData,\n bytes32 clientChallenge,\n uint256 clientChallengeDataOffset,\n uint256[2] calldata rs,\n uint256 Qx,\n uint256 Qy\n ) internal view returns (bool) {\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\n\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\n );\n\n bool result = FCL_ecdsa_utils.ecdsa_verify(message, rs, Qx, Qy);\n\n return result;\n }\n\n function checkSignature_prec(\n bytes calldata authenticatorData,\n bytes1 authenticatorDataFlagMask,\n bytes calldata clientData,\n bytes32 clientChallenge,\n uint256 clientChallengeDataOffset,\n uint256[2] calldata rs,\n address dataPointer\n ) internal view returns (bool) {\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\n\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\n );\n\n bool result = FCL_ecdsa.ecdsa_precomputed_verify(message, rs, dataPointer);\n\n return result;\n }\n\n //beware that this implementation will not be compliant with EOF\n function checkSignature_hackmem(\n bytes calldata authenticatorData,\n bytes1 authenticatorDataFlagMask,\n bytes calldata clientData,\n bytes32 clientChallenge,\n uint256 clientChallengeDataOffset,\n uint256[2] calldata rs,\n uint256 dataPointer\n ) internal view returns (bool) {\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\n\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\n );\n\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_hackmem(message, rs, dataPointer);\n\n return result;\n }\n}\n"},"FreshCryptoLib/utils/Base64Url.sol":{"content":"// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @dev Encode (without '=' padding) \n * @author evmbrahmin, adapted from hiromin's Base64URL libraries\n */\nlibrary Base64Url {\n /**\n * @dev Base64Url Encoding Table\n */\n string internal constant ENCODING_TABLE =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n\n function encode(bytes memory data) internal pure returns (string memory) {\n if (data.length == 0) return \"\";\n\n // Load the table into memory\n string memory table = ENCODING_TABLE;\n\n string memory result = new string(4 * ((data.length + 2) / 3));\n\n // @solidity memory-safe-assembly\n assembly {\n let tablePtr := add(table, 1)\n let resultPtr := add(result, 32)\n\n for {\n let dataPtr := data\n let endPtr := add(data, mload(data))\n } lt(dataPtr, endPtr) {\n\n } {\n dataPtr := add(dataPtr, 3)\n let input := mload(dataPtr)\n\n mstore8(\n resultPtr,\n mload(add(tablePtr, and(shr(18, input), 0x3F)))\n )\n resultPtr := add(resultPtr, 1)\n\n mstore8(\n resultPtr,\n mload(add(tablePtr, and(shr(12, input), 0x3F)))\n )\n resultPtr := add(resultPtr, 1)\n\n mstore8(\n resultPtr,\n mload(add(tablePtr, and(shr(6, input), 0x3F)))\n )\n resultPtr := add(resultPtr, 1)\n\n mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))\n resultPtr := add(resultPtr, 1)\n }\n\n // Remove the padding adjustment logic\n switch mod(mload(data), 3)\n case 1 {\n // Adjust for the last byte of data\n resultPtr := sub(resultPtr, 2)\n }\n case 2 {\n // Adjust for the last two bytes of data\n resultPtr := sub(resultPtr, 1)\n }\n \n // Set the correct length of the result string\n mstore(result, sub(resultPtr, add(result, 32)))\n }\n\n return result; \n }\n}\n"},"solady/src/utils/LibClone.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\n/// @notice Minimal proxy library.\n/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)\n/// @author Minimal proxy by 0age (https://github.com/0age)\n/// @author Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie\n/// (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)\n///\n/// @dev Minimal proxy:\n/// Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime,\n/// it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern,\n/// which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.\n///\n/// @dev Minimal proxy (PUSH0 variant):\n/// This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai.\n/// It is optimized first for minimal runtime gas, then for minimal bytecode.\n/// The PUSH0 clone functions are intentionally postfixed with a jarring \"_PUSH0\" as\n/// many EVM chains may not support the PUSH0 opcode in the early months after Shanghai.\n/// Please use with caution.\n///\n/// @dev Clones with immutable args (CWIA):\n/// The implementation of CWIA here implements a `receive()` method that emits the\n/// `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata,\n/// enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards\n/// composability. The minimal proxy implementation does not offer this feature.\nlibrary LibClone {\n /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/\n /* CUSTOM ERRORS */\n /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/\n\n /// @dev Unable to deploy the clone.\n error DeploymentFailed();\n\n /// @dev The salt must start with either the zero address or the caller.\n error SaltDoesNotStartWithCaller();\n\n /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/\n /* MINIMAL PROXY OPERATIONS */\n /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/\n\n /// @dev Deploys a clone of `implementation`.\n function clone(address implementation) internal returns (address instance) {\n /// @solidity memory-safe-assembly\n assembly {\n /**\n * --------------------------------------------------------------------------+\n * CREATION (9 bytes) |\n * --------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * --------------------------------------------------------------------------|\n * 60 runSize | PUSH1 runSize | r | |\n * 3d | RETURNDATASIZE | 0 r | |\n * 81 | DUP2 | r 0 r | |\n * 60 offset | PUSH1 offset | o r 0 r | |\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\n * f3 | RETURN | | [0..runSize): runtime code |\n * --------------------------------------------------------------------------|\n * RUNTIME (44 bytes) |\n * --------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * --------------------------------------------------------------------------|\n * |\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | 0 | |\n * 3d | RETURNDATASIZE | 0 0 | |\n * 3d | RETURNDATASIZE | 0 0 0 | |\n * 3d | RETURNDATASIZE | 0 0 0 0 | |\n * |\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds 0 0 0 0 | |\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | |\n * 3d | RETURNDATASIZE | 0 0 cds 0 0 0 0 | |\n * 37 | CALLDATACOPY | 0 0 0 0 | [0..cds): calldata |\n * |\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds 0 0 0 0 | [0..cds): calldata |\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | [0..cds): calldata |\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 0 0 | [0..cds): calldata |\n * 5a | GAS | gas addr 0 cds 0 0 0 0 | [0..cds): calldata |\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata |\n * |\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata |\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata |\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata |\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata |\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\n * |\n * 60 0x2a | PUSH1 0x2a | 0x2a success 0 rds | [0..rds): returndata |\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\n * |\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * fd | REVERT | | [0..rds): returndata |\n * |\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\n * f3 | RETURN | | [0..rds): returndata |\n * --------------------------------------------------------------------------+\n */\n\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\n mstore(0x14, implementation)\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\n instance := create(0, 0x0c, 0x35)\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x21, 0)\n }\n }\n\n /// @dev Deploys a deterministic clone of `implementation` with `salt`.\n function cloneDeterministic(address implementation, bytes32 salt)\n internal\n returns (address instance)\n {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\n mstore(0x14, implementation)\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\n instance := create2(0, 0x0c, 0x35, salt)\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x21, 0)\n }\n }\n\n /// @dev Returns the initialization code hash of the clone of `implementation`.\n /// Used for mining vanity addresses with create2crunch.\n function initCodeHash(address implementation) internal pure returns (bytes32 hash) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\n mstore(0x14, implementation)\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\n hash := keccak256(0x0c, 0x35)\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x21, 0)\n }\n }\n\n /// @dev Returns the address of the deterministic clone of `implementation`,\n /// with `salt` by `deployer`.\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\n function predictDeterministicAddress(address implementation, bytes32 salt, address deployer)\n internal\n pure\n returns (address predicted)\n {\n bytes32 hash = initCodeHash(implementation);\n predicted = predictDeterministicAddress(hash, salt, deployer);\n }\n\n /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/\n /* MINIMAL PROXY OPERATIONS (PUSH0 VARIANT) */\n /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/\n\n /// @dev Deploys a PUSH0 clone of `implementation`.\n function clone_PUSH0(address implementation) internal returns (address instance) {\n /// @solidity memory-safe-assembly\n assembly {\n /**\n * --------------------------------------------------------------------------+\n * CREATION (9 bytes) |\n * --------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * --------------------------------------------------------------------------|\n * 60 runSize | PUSH1 runSize | r | |\n * 5f | PUSH0 | 0 r | |\n * 81 | DUP2 | r 0 r | |\n * 60 offset | PUSH1 offset | o r 0 r | |\n * 5f | PUSH0 | 0 o r 0 r | |\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\n * f3 | RETURN | | [0..runSize): runtime code |\n * --------------------------------------------------------------------------|\n * RUNTIME (45 bytes) |\n * --------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * --------------------------------------------------------------------------|\n * |\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\n * 5f | PUSH0 | 0 | |\n * 5f | PUSH0 | 0 0 | |\n * |\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds 0 0 | |\n * 5f | PUSH0 | 0 cds 0 0 | |\n * 5f | PUSH0 | 0 0 cds 0 0 | |\n * 37 | CALLDATACOPY | 0 0 | [0..cds): calldata |\n * |\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds 0 0 | [0..cds): calldata |\n * 5f | PUSH0 | 0 cds 0 0 | [0..cds): calldata |\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 | [0..cds): calldata |\n * 5a | GAS | gas addr 0 cds 0 0 | [0..cds): calldata |\n * f4 | DELEGATECALL | success | [0..cds): calldata |\n * |\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | rds success | [0..cds): calldata |\n * 5f | PUSH0 | 0 rds success | [0..cds): calldata |\n * 5f | PUSH0 | 0 0 rds success | [0..cds): calldata |\n * 3e | RETURNDATACOPY | success | [0..rds): returndata |\n * |\n * 60 0x29 | PUSH1 0x29 | 0x29 success | [0..rds): returndata |\n * 57 | JUMPI | | [0..rds): returndata |\n * |\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\n * fd | REVERT | | [0..rds): returndata |\n * |\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 5b | JUMPDEST | | [0..rds): returndata |\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\n * f3 | RETURN | | [0..rds): returndata |\n * --------------------------------------------------------------------------+\n */\n\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\n mstore(0x14, implementation) // 20\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\n instance := create(0, 0x0e, 0x36)\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x24, 0)\n }\n }\n\n /// @dev Deploys a deterministic PUSH0 clone of `implementation` with `salt`.\n function cloneDeterministic_PUSH0(address implementation, bytes32 salt)\n internal\n returns (address instance)\n {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\n mstore(0x14, implementation) // 20\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\n instance := create2(0, 0x0e, 0x36, salt)\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x24, 0)\n }\n }\n\n /// @dev Returns the initialization code hash of the PUSH0 clone of `implementation`.\n /// Used for mining vanity addresses with create2crunch.\n function initCodeHash_PUSH0(address implementation) internal pure returns (bytes32 hash) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\n mstore(0x14, implementation) // 20\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\n hash := keccak256(0x0e, 0x36)\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x24, 0)\n }\n }\n\n /// @dev Returns the address of the deterministic PUSH0 clone of `implementation`,\n /// with `salt` by `deployer`.\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\n function predictDeterministicAddress_PUSH0(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n bytes32 hash = initCodeHash_PUSH0(implementation);\n predicted = predictDeterministicAddress(hash, salt, deployer);\n }\n\n /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/\n /* CLONES WITH IMMUTABLE ARGS OPERATIONS */\n /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/\n\n /// @dev Deploys a minimal proxy with `implementation`,\n /// using immutable arguments encoded in `data`.\n ///\n /// Note: This implementation of CWIA differs from the original implementation.\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\n function clone(address implementation, bytes memory data) internal returns (address instance) {\n assembly {\n // Compute the boundaries of the data and cache the memory slots around it.\n let mBefore3 := mload(sub(data, 0x60))\n let mBefore2 := mload(sub(data, 0x40))\n let mBefore1 := mload(sub(data, 0x20))\n let dataLength := mload(data)\n let dataEnd := add(add(data, 0x20), dataLength)\n let mAfter1 := mload(dataEnd)\n\n // +2 bytes for telling how much data there is appended to the call.\n let extraLength := add(dataLength, 2)\n // The `creationSize` is `extraLength + 108`\n // The `runSize` is `creationSize - 10`.\n\n /**\n * ---------------------------------------------------------------------------------------------------+\n * CREATION (10 bytes) |\n * ---------------------------------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * ---------------------------------------------------------------------------------------------------|\n * 61 runSize | PUSH2 runSize | r | |\n * 3d | RETURNDATASIZE | 0 r | |\n * 81 | DUP2 | r 0 r | |\n * 60 offset | PUSH1 offset | o r 0 r | |\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\n * f3 | RETURN | | [0..runSize): runtime code |\n * ---------------------------------------------------------------------------------------------------|\n * RUNTIME (98 bytes + extraLength) |\n * ---------------------------------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * ---------------------------------------------------------------------------------------------------|\n * |\n * ::: if no calldata, emit event & return w/o `DELEGATECALL` ::::::::::::::::::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds | |\n * 60 0x2c | PUSH1 0x2c | 0x2c cds | |\n * 57 | JUMPI | | |\n * 34 | CALLVALUE | cv | |\n * 3d | RETURNDATASIZE | 0 cv | |\n * 52 | MSTORE | | [0..0x20): callvalue |\n * 7f sig | PUSH32 0x9e.. | sig | [0..0x20): callvalue |\n * 59 | MSIZE | 0x20 sig | [0..0x20): callvalue |\n * 3d | RETURNDATASIZE | 0 0x20 sig | [0..0x20): callvalue |\n * a1 | LOG1 | | [0..0x20): callvalue |\n * 00 | STOP | | [0..0x20): callvalue |\n * 5b | JUMPDEST | | |\n * |\n * ::: copy calldata to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds | |\n * 3d | RETURNDATASIZE | 0 cds | |\n * 3d | RETURNDATASIZE | 0 0 cds | |\n * 37 | CALLDATACOPY | | [0..cds): calldata |\n * |\n * ::: keep some values in stack :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | 0 | [0..cds): calldata |\n * 3d | RETURNDATASIZE | 0 0 | [0..cds): calldata |\n * 3d | RETURNDATASIZE | 0 0 0 | [0..cds): calldata |\n * 3d | RETURNDATASIZE | 0 0 0 0 | [0..cds): calldata |\n * 61 extra | PUSH2 extra | e 0 0 0 0 | [0..cds): calldata |\n * |\n * ::: copy extra data to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 80 | DUP1 | e e 0 0 0 0 | [0..cds): calldata |\n * 60 0x62 | PUSH1 0x62 | 0x62 e e 0 0 0 0 | [0..cds): calldata |\n * 36 | CALLDATASIZE | cds 0x62 e e 0 0 0 0 | [0..cds): calldata |\n * 39 | CODECOPY | e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * |\n * ::: delegate call to the implementation contract ::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 01 | ADD | cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 3d | RETURNDATASIZE | 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 73 addr | PUSH20 addr | addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 5a | GAS | gas addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * |\n * ::: copy return data to memory ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\n * |\n * 60 0x60 | PUSH1 0x60 | 0x60 success 0 rds | [0..rds): returndata |\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\n * |\n * ::: revert ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * fd | REVERT | | [0..rds): returndata |\n * |\n * ::: return ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\n * f3 | RETURN | | [0..rds): returndata |\n * ---------------------------------------------------------------------------------------------------+\n */\n // Write the bytecode before the data.\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\n // Write the address of the implementation.\n mstore(sub(data, 0x0d), implementation)\n // Write the rest of the bytecode.\n mstore(\n sub(data, 0x21),\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\n )\n // `keccak256(\"ReceiveETH(uint256)\")`\n mstore(\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\n )\n mstore(\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\n // The actual EVM limit may be smaller and may change over time.\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\n )\n mstore(dataEnd, shl(0xf0, extraLength))\n\n // Create the instance.\n instance := create(0, sub(data, 0x4c), add(extraLength, 0x6c))\n\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n\n // Restore the overwritten memory surrounding `data`.\n mstore(dataEnd, mAfter1)\n mstore(data, dataLength)\n mstore(sub(data, 0x20), mBefore1)\n mstore(sub(data, 0x40), mBefore2)\n mstore(sub(data, 0x60), mBefore3)\n }\n }\n\n /// @dev Deploys a deterministic clone of `implementation`,\n /// using immutable arguments encoded in `data`, with `salt`.\n ///\n /// Note: This implementation of CWIA differs from the original implementation.\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\n function cloneDeterministic(address implementation, bytes memory data, bytes32 salt)\n internal\n returns (address instance)\n {\n assembly {\n // Compute the boundaries of the data and cache the memory slots around it.\n let mBefore3 := mload(sub(data, 0x60))\n let mBefore2 := mload(sub(data, 0x40))\n let mBefore1 := mload(sub(data, 0x20))\n let dataLength := mload(data)\n let dataEnd := add(add(data, 0x20), dataLength)\n let mAfter1 := mload(dataEnd)\n\n // +2 bytes for telling how much data there is appended to the call.\n let extraLength := add(dataLength, 2)\n\n // Write the bytecode before the data.\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\n // Write the address of the implementation.\n mstore(sub(data, 0x0d), implementation)\n // Write the rest of the bytecode.\n mstore(\n sub(data, 0x21),\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\n )\n // `keccak256(\"ReceiveETH(uint256)\")`\n mstore(\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\n )\n mstore(\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\n // The actual EVM limit may be smaller and may change over time.\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\n )\n mstore(dataEnd, shl(0xf0, extraLength))\n\n // Create the instance.\n instance := create2(0, sub(data, 0x4c), add(extraLength, 0x6c), salt)\n\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n\n // Restore the overwritten memory surrounding `data`.\n mstore(dataEnd, mAfter1)\n mstore(data, dataLength)\n mstore(sub(data, 0x20), mBefore1)\n mstore(sub(data, 0x40), mBefore2)\n mstore(sub(data, 0x60), mBefore3)\n }\n }\n\n /// @dev Returns the initialization code hash of the clone of `implementation`\n /// using immutable arguments encoded in `data`.\n /// Used for mining vanity addresses with create2crunch.\n function initCodeHash(address implementation, bytes memory data)\n internal\n pure\n returns (bytes32 hash)\n {\n assembly {\n // Compute the boundaries of the data and cache the memory slots around it.\n let mBefore3 := mload(sub(data, 0x60))\n let mBefore2 := mload(sub(data, 0x40))\n let mBefore1 := mload(sub(data, 0x20))\n let dataLength := mload(data)\n let dataEnd := add(add(data, 0x20), dataLength)\n let mAfter1 := mload(dataEnd)\n\n // Do a out-of-gas revert if `dataLength` is too big. 0xffff - 0x02 - 0x62 = 0xff9b.\n // The actual EVM limit may be smaller and may change over time.\n returndatacopy(returndatasize(), returndatasize(), gt(dataLength, 0xff9b))\n\n // +2 bytes for telling how much data there is appended to the call.\n let extraLength := add(dataLength, 2)\n\n // Write the bytecode before the data.\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\n // Write the address of the implementation.\n mstore(sub(data, 0x0d), implementation)\n // Write the rest of the bytecode.\n mstore(\n sub(data, 0x21),\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\n )\n // `keccak256(\"ReceiveETH(uint256)\")`\n mstore(\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\n )\n mstore(\n sub(data, 0x5a),\n or(shl(0x78, add(extraLength, 0x62)), 0x6100003d81600a3d39f336602c57343d527f)\n )\n mstore(dataEnd, shl(0xf0, extraLength))\n\n // Compute and store the bytecode hash.\n hash := keccak256(sub(data, 0x4c), add(extraLength, 0x6c))\n\n // Restore the overwritten memory surrounding `data`.\n mstore(dataEnd, mAfter1)\n mstore(data, dataLength)\n mstore(sub(data, 0x20), mBefore1)\n mstore(sub(data, 0x40), mBefore2)\n mstore(sub(data, 0x60), mBefore3)\n }\n }\n\n /// @dev Returns the address of the deterministic clone of\n /// `implementation` using immutable arguments encoded in `data`, with `salt`, by `deployer`.\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\n function predictDeterministicAddress(\n address implementation,\n bytes memory data,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n bytes32 hash = initCodeHash(implementation, data);\n predicted = predictDeterministicAddress(hash, salt, deployer);\n }\n\n /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/\n /* OTHER OPERATIONS */\n /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/\n\n /// @dev Returns the address when a contract with initialization code hash,\n /// `hash`, is deployed with `salt`, by `deployer`.\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\n function predictDeterministicAddress(bytes32 hash, bytes32 salt, address deployer)\n internal\n pure\n returns (address predicted)\n {\n /// @solidity memory-safe-assembly\n assembly {\n // Compute and store the bytecode hash.\n mstore8(0x00, 0xff) // Write the prefix.\n mstore(0x35, hash)\n mstore(0x01, shl(96, deployer))\n mstore(0x15, salt)\n predicted := keccak256(0x00, 0x55)\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x35, 0)\n }\n }\n\n /// @dev Reverts if `salt` does not start with either the zero address or the caller.\n function checkStartsWithCaller(bytes32 salt) internal view {\n /// @solidity memory-safe-assembly\n assembly {\n // If the salt does not start with the zero address or the caller.\n if iszero(or(iszero(shr(96, salt)), eq(caller(), shr(96, salt)))) {\n // Store the function selector of `SaltDoesNotStartWithCaller()`.\n mstore(0x00, 0x2f634836)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n }\n }\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":1000000},"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","storageLayout","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"errors":[{"component":"general","errorCode":"1878","formattedMessage":"Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> contracts/P256Signer.sol\n\n","message":"SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.","severity":"warning","sourceLocation":{"end":-1,"file":"contracts/P256Signer.sol","start":-1},"type":"Warning"},{"component":"general","errorCode":"1878","formattedMessage":"Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> contracts/P256SignerFactory.sol\n\n","message":"SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.","severity":"warning","sourceLocation":{"end":-1,"file":"contracts/P256SignerFactory.sol","start":-1},"type":"Warning"}],"sources":{"FreshCryptoLib/FCL_Webauthn.sol":{"ast":{"absolutePath":"FreshCryptoLib/FCL_Webauthn.sol","exportedSymbols":{"Base64Url":[2843],"FCL_Elliptic_ZZ":[2797],"FCL_WebAuthn":[291],"FCL_ecdsa":[685],"FCL_ecdsa_utils":[1466]},"id":292,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.8",".19","<","0.9",".0"],"nodeType":"PragmaDirective","src":"1228:32:0"},{"absolutePath":"FreshCryptoLib/utils/Base64Url.sol","file":"./utils/Base64Url.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":292,"sourceUnit":2844,"src":"1262:48:0","symbolAliases":[{"foreign":{"id":2,"name":"Base64Url","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2843,"src":"1270:9:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"FreshCryptoLib/FCL_elliptic.sol","file":"./FCL_elliptic.sol","id":5,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":292,"sourceUnit":2798,"src":"1311:51:0","symbolAliases":[{"foreign":{"id":4,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1319:15:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"FreshCryptoLib/FCL_ecdsa.sol","file":"./FCL_ecdsa.sol","id":7,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":292,"sourceUnit":686,"src":"1363:42:0","symbolAliases":[{"foreign":{"id":6,"name":"FCL_ecdsa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":685,"src":"1371:9:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"FreshCryptoLib/FCL_ecdsa_utils.sol","file":"./FCL_ecdsa_utils.sol","id":9,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":292,"sourceUnit":1467,"src":"1407:54:0","symbolAliases":[{"foreign":{"id":8,"name":"FCL_ecdsa_utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1466,"src":"1415:15:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FCL_WebAuthn","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":291,"linearizedBaseContracts":[291],"name":"FCL_WebAuthn","nameLocation":"1471:12:0","nodeType":"ContractDefinition","nodes":[{"errorSelector":"fc934792","id":11,"name":"InvalidAuthenticatorData","nameLocation":"1496:24:0","nodeType":"ErrorDefinition","parameters":{"id":10,"nodeType":"ParameterList","parameters":[],"src":"1520:2:0"},"src":"1490:33:0"},{"errorSelector":"ebab5d29","id":13,"name":"InvalidClientData","nameLocation":"1534:17:0","nodeType":"ErrorDefinition","parameters":{"id":12,"nodeType":"ParameterList","parameters":[],"src":"1551:2:0"},"src":"1528:26:0"},{"errorSelector":"8baa579f","id":15,"name":"InvalidSignature","nameLocation":"1565:16:0","nodeType":"ErrorDefinition","parameters":{"id":14,"nodeType":"ParameterList","parameters":[],"src":"1581:2:0"},"src":"1559:25:0"},{"body":{"id":112,"nodeType":"Block","src":"1890:1781:0","statements":[{"id":89,"nodeType":"Block","src":"1992:1178:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":41,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":38,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":34,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17,"src":"2011:17:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":36,"indexExpression":{"hexValue":"3332","id":35,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2029:2:0","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2011:21:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":37,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19,"src":"2035:25:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"2011:49:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"id":39,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2010:51:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":40,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19,"src":"2065:25:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"2010:80:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46,"nodeType":"IfStatement","src":"2006:152:0","trueBody":{"id":45,"nodeType":"Block","src":"2092:66:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":42,"name":"InvalidAuthenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11,"src":"2117:24:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":43,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2117:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44,"nodeType":"RevertStatement","src":"2110:33:0"}]}},{"assignments":[48],"declarations":[{"constant":false,"id":48,"mutability":"mutable","name":"challengeEncoded","nameLocation":"2369:16:0","nodeType":"VariableDeclaration","scope":89,"src":"2355:30:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":47,"name":"string","nodeType":"ElementaryTypeName","src":"2355:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":56,"initialValue":{"arguments":[{"arguments":[{"id":53,"name":"clientChallenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23,"src":"2422:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":51,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2405:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":52,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2409:12:0","memberName":"encodePacked","nodeType":"MemberAccess","src":"2405:16:0","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2405:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":49,"name":"Base64Url","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2843,"src":"2388:9:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Base64Url_$2843_$","typeString":"type(library Base64Url)"}},"id":50,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2398:6:0","memberName":"encode","nodeType":"MemberAccess","referencedDeclaration":2842,"src":"2388:16:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_string_memory_ptr_$","typeString":"function (bytes memory) pure returns (string memory)"}},"id":55,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2388:51:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"2355:84:0"},{"assignments":[58],"declarations":[{"constant":false,"id":58,"mutability":"mutable","name":"challengeExtracted","nameLocation":"2466:18:0","nodeType":"VariableDeclaration","scope":89,"src":"2453:31:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":57,"name":"bytes","nodeType":"ElementaryTypeName","src":"2453:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":67,"initialValue":{"arguments":[{"expression":{"arguments":[{"id":63,"name":"challengeEncoded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48,"src":"2516:16:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":62,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2510:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":61,"name":"bytes","nodeType":"ElementaryTypeName","src":"2510:5:0","typeDescriptions":{}}},"id":64,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2510:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":65,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2534:6:0","memberName":"length","nodeType":"MemberAccess","src":"2510:30:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2487:9:0","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":59,"name":"bytes","nodeType":"ElementaryTypeName","src":"2491:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":66,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2487:63:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2453:97:0"},{"AST":{"nodeType":"YulBlock","src":"2574:229:0","statements":[{"expression":{"arguments":[{"arguments":[{"name":"challengeExtracted","nodeType":"YulIdentifier","src":"2630:18:0"},{"kind":"number","nodeType":"YulLiteral","src":"2650:2:0","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2626:3:0"},"nodeType":"YulFunctionCall","src":"2626:27:0"},{"arguments":[{"name":"clientData.offset","nodeType":"YulIdentifier","src":"2679:17:0"},{"name":"clientChallengeDataOffset","nodeType":"YulIdentifier","src":"2698:25:0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2675:3:0"},"nodeType":"YulFunctionCall","src":"2675:49:0"},{"arguments":[{"name":"challengeExtracted","nodeType":"YulIdentifier","src":"2752:18:0"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2746:5:0"},"nodeType":"YulFunctionCall","src":"2746:25:0"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2592:12:0"},"nodeType":"YulFunctionCall","src":"2592:197:0"},"nodeType":"YulExpressionStatement","src":"2592:197:0"}]},"evmVersion":"paris","externalReferences":[{"declaration":58,"isOffset":false,"isSlot":false,"src":"2630:18:0","valueSize":1},{"declaration":58,"isOffset":false,"isSlot":false,"src":"2752:18:0","valueSize":1},{"declaration":25,"isOffset":false,"isSlot":false,"src":"2698:25:0","valueSize":1},{"declaration":21,"isOffset":true,"isSlot":false,"src":"2679:17:0","suffix":"offset","valueSize":1}],"id":68,"nodeType":"InlineAssembly","src":"2565:238:0"},{"assignments":[70],"declarations":[{"constant":false,"id":70,"mutability":"mutable","name":"moreData","nameLocation":"2825:8:0","nodeType":"VariableDeclaration","scope":89,"src":"2817:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":69,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2817:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":71,"nodeType":"VariableDeclarationStatement","src":"2817:16:0"},{"AST":{"nodeType":"YulBlock","src":"2908:109:0","statements":[{"nodeType":"YulAssignment","src":"2926:77:0","value":{"arguments":[{"arguments":[{"name":"challengeExtracted","nodeType":"YulIdentifier","src":"2952:18:0"},{"kind":"number","nodeType":"YulLiteral","src":"2972:2:0","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2948:3:0"},"nodeType":"YulFunctionCall","src":"2948:27:0"},{"arguments":[{"name":"challengeExtracted","nodeType":"YulIdentifier","src":"2983:18:0"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2977:5:0"},"nodeType":"YulFunctionCall","src":"2977:25:0"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"2938:9:0"},"nodeType":"YulFunctionCall","src":"2938:65:0"},"variableNames":[{"name":"moreData","nodeType":"YulIdentifier","src":"2926:8:0"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":58,"isOffset":false,"isSlot":false,"src":"2952:18:0","valueSize":1},{"declaration":58,"isOffset":false,"isSlot":false,"src":"2983:18:0","valueSize":1},{"declaration":70,"isOffset":false,"isSlot":false,"src":"2926:8:0","valueSize":1}],"id":72,"nodeType":"InlineAssembly","src":"2899:118:0"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":83,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":78,"name":"challengeEncoded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48,"src":"3068:16:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":77,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3062:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76,"name":"bytes","nodeType":"ElementaryTypeName","src":"3062:5:0","typeDescriptions":{}}},"id":79,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3062:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":74,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3045:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":75,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3049:12:0","memberName":"encodePacked","nodeType":"MemberAccess","src":"3045:16:0","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":80,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3045:41:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":73,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3035:9:0","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":81,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3035:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":82,"name":"moreData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70,"src":"3091:8:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3035:64:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":88,"nodeType":"IfStatement","src":"3031:129:0","trueBody":{"id":87,"nodeType":"Block","src":"3101:59:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":84,"name":"InvalidClientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"3126:17:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":85,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3126:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86,"nodeType":"RevertStatement","src":"3119:26:0"}]}}]},{"assignments":[91],"declarations":[{"constant":false,"id":91,"mutability":"mutable","name":"verifyData","nameLocation":"3297:10:0","nodeType":"VariableDeclaration","scope":112,"src":"3284:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":90,"name":"bytes","nodeType":"ElementaryTypeName","src":"3284:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":99,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":94,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17,"src":"3320:17:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":95,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3338:6:0","memberName":"length","nodeType":"MemberAccess","src":"3320:24:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"3332","id":96,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3347:2:0","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"3320:29:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":93,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3310:9:0","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":92,"name":"bytes","nodeType":"ElementaryTypeName","src":"3314:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":98,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3310:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3284:66:0"},{"AST":{"nodeType":"YulBlock","src":"3370:109:0","statements":[{"expression":{"arguments":[{"arguments":[{"name":"verifyData","nodeType":"YulIdentifier","src":"3401:10:0"},{"kind":"number","nodeType":"YulLiteral","src":"3413:2:0","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3397:3:0"},"nodeType":"YulFunctionCall","src":"3397:19:0"},{"name":"authenticatorData.offset","nodeType":"YulIdentifier","src":"3418:24:0"},{"name":"authenticatorData.length","nodeType":"YulIdentifier","src":"3444:24:0"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3384:12:0"},"nodeType":"YulFunctionCall","src":"3384:85:0"},"nodeType":"YulExpressionStatement","src":"3384:85:0"}]},"evmVersion":"paris","externalReferences":[{"declaration":17,"isOffset":false,"isSlot":false,"src":"3444:24:0","suffix":"length","valueSize":1},{"declaration":17,"isOffset":true,"isSlot":false,"src":"3418:24:0","suffix":"offset","valueSize":1},{"declaration":91,"isOffset":false,"isSlot":false,"src":"3401:10:0","valueSize":1}],"id":100,"nodeType":"InlineAssembly","src":"3361:118:0"},{"assignments":[102],"declarations":[{"constant":false,"id":102,"mutability":"mutable","name":"more","nameLocation":"3497:4:0","nodeType":"VariableDeclaration","scope":112,"src":"3489:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":101,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3489:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":106,"initialValue":{"arguments":[{"id":104,"name":"clientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21,"src":"3511:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":103,"name":"sha256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-22,"src":"3504:6:0","typeDescriptions":{"typeIdentifier":"t_function_sha256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3504:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3489:33:0"},{"AST":{"nodeType":"YulBlock","src":"3541:88:0","statements":[{"expression":{"arguments":[{"arguments":[{"name":"verifyData","nodeType":"YulIdentifier","src":"3566:10:0"},{"arguments":[{"name":"authenticatorData.length","nodeType":"YulIdentifier","src":"3582:24:0"},{"kind":"number","nodeType":"YulLiteral","src":"3608:2:0","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3578:3:0"},"nodeType":"YulFunctionCall","src":"3578:33:0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3562:3:0"},"nodeType":"YulFunctionCall","src":"3562:50:0"},{"name":"more","nodeType":"YulIdentifier","src":"3614:4:0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3555:6:0"},"nodeType":"YulFunctionCall","src":"3555:64:0"},"nodeType":"YulExpressionStatement","src":"3555:64:0"}]},"evmVersion":"paris","externalReferences":[{"declaration":17,"isOffset":false,"isSlot":false,"src":"3582:24:0","suffix":"length","valueSize":1},{"declaration":102,"isOffset":false,"isSlot":false,"src":"3614:4:0","valueSize":1},{"declaration":91,"isOffset":false,"isSlot":false,"src":"3566:10:0","valueSize":1}],"id":107,"nodeType":"InlineAssembly","src":"3532:97:0"},{"expression":{"arguments":[{"id":109,"name":"verifyData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91,"src":"3653:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":108,"name":"sha256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-22,"src":"3646:6:0","typeDescriptions":{"typeIdentifier":"t_function_sha256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3646:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":33,"id":111,"nodeType":"Return","src":"3639:25:0"}]},"id":113,"implemented":true,"kind":"function","modifiers":[],"name":"WebAuthn_format","nameLocation":"1599:15:0","nodeType":"FunctionDefinition","parameters":{"id":30,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17,"mutability":"mutable","name":"authenticatorData","nameLocation":"1639:17:0","nodeType":"VariableDeclaration","scope":113,"src":"1624:32:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":16,"name":"bytes","nodeType":"ElementaryTypeName","src":"1624:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19,"mutability":"mutable","name":"authenticatorDataFlagMask","nameLocation":"1673:25:0","nodeType":"VariableDeclaration","scope":113,"src":"1666:32:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":18,"name":"bytes1","nodeType":"ElementaryTypeName","src":"1666:6:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":21,"mutability":"mutable","name":"clientData","nameLocation":"1723:10:0","nodeType":"VariableDeclaration","scope":113,"src":"1708:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":20,"name":"bytes","nodeType":"ElementaryTypeName","src":"1708:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":23,"mutability":"mutable","name":"clientChallenge","nameLocation":"1751:15:0","nodeType":"VariableDeclaration","scope":113,"src":"1743:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":22,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":25,"mutability":"mutable","name":"clientChallengeDataOffset","nameLocation":"1784:25:0","nodeType":"VariableDeclaration","scope":113,"src":"1776:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24,"name":"uint256","nodeType":"ElementaryTypeName","src":"1776:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":113,"src":"1819:19:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":26,"name":"uint256","nodeType":"ElementaryTypeName","src":"1819:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28,"length":{"hexValue":"32","id":27,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1827:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"1819:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"src":"1614:236:0"},"returnParameters":{"id":33,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32,"mutability":"mutable","name":"result","nameLocation":"1882:6:0","nodeType":"VariableDeclaration","scope":113,"src":"1874:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1874:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1873:16:0"},"scope":291,"src":"1590:2081:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":151,"nodeType":"Block","src":"3996:156:0","statements":[{"expression":{"arguments":[{"id":137,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":115,"src":"4028:17:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":138,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117,"src":"4047:25:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"id":139,"name":"clientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119,"src":"4074:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":140,"name":"clientChallenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":121,"src":"4086:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":141,"name":"clientChallengeDataOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":123,"src":"4103:25:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":142,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":127,"src":"4130:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},{"baseExpression":{"id":143,"name":"Q","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"4134:1:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":145,"indexExpression":{"hexValue":"30","id":144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4136:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4134:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":146,"name":"Q","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"4140:1:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":148,"indexExpression":{"hexValue":"31","id":147,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4142:1:0","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4140:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":136,"name":"checkSignature","nodeType":"Identifier","overloadedDeclarations":[152,200],"referencedDeclaration":200,"src":"4013:14:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_calldata_ptr_$_t_bytes1_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$_t_array$_t_uint256_$2_calldata_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata,uint256,uint256) view returns (bool)"}},"id":149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4013:132:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":135,"id":150,"nodeType":"Return","src":"4006:139:0"}]},"id":152,"implemented":true,"kind":"function","modifiers":[],"name":"checkSignature","nameLocation":"3687:14:0","nodeType":"FunctionDefinition","parameters":{"id":132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":115,"mutability":"mutable","name":"authenticatorData","nameLocation":"3727:17:0","nodeType":"VariableDeclaration","scope":152,"src":"3712:32:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":114,"name":"bytes","nodeType":"ElementaryTypeName","src":"3712:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":117,"mutability":"mutable","name":"authenticatorDataFlagMask","nameLocation":"3761:25:0","nodeType":"VariableDeclaration","scope":152,"src":"3754:32:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":116,"name":"bytes1","nodeType":"ElementaryTypeName","src":"3754:6:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":119,"mutability":"mutable","name":"clientData","nameLocation":"3811:10:0","nodeType":"VariableDeclaration","scope":152,"src":"3796:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":118,"name":"bytes","nodeType":"ElementaryTypeName","src":"3796:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":121,"mutability":"mutable","name":"clientChallenge","nameLocation":"3839:15:0","nodeType":"VariableDeclaration","scope":152,"src":"3831:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":120,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3831:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":123,"mutability":"mutable","name":"clientChallengeDataOffset","nameLocation":"3872:25:0","nodeType":"VariableDeclaration","scope":152,"src":"3864:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":122,"name":"uint256","nodeType":"ElementaryTypeName","src":"3864:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":127,"mutability":"mutable","name":"rs","nameLocation":"3927:2:0","nodeType":"VariableDeclaration","scope":152,"src":"3907:22:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":124,"name":"uint256","nodeType":"ElementaryTypeName","src":"3907:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":126,"length":{"hexValue":"32","id":125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3915:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"3907:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":131,"mutability":"mutable","name":"Q","nameLocation":"3959:1:0","nodeType":"VariableDeclaration","scope":152,"src":"3939:21:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":128,"name":"uint256","nodeType":"ElementaryTypeName","src":"3939:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":130,"length":{"hexValue":"32","id":129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"3939:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"src":"3702:264:0"},"returnParameters":{"id":135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":134,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":152,"src":"3990:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":133,"name":"bool","nodeType":"ElementaryTypeName","src":"3990:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3989:6:0"},"scope":291,"src":"3677:475:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":199,"nodeType":"Block","src":"4486:382:0","statements":[{"assignments":[176],"declarations":[{"constant":false,"id":176,"mutability":"mutable","name":"message","nameLocation":"4597:7:0","nodeType":"VariableDeclaration","scope":199,"src":"4589:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":175,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4589:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":186,"initialValue":{"arguments":[{"id":179,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":154,"src":"4649:17:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":180,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":156,"src":"4668:25:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"id":181,"name":"clientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":158,"src":"4695:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":182,"name":"clientChallenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":160,"src":"4707:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":183,"name":"clientChallengeDataOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"4724:25:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":184,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":166,"src":"4751:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}],"expression":{"id":177,"name":"FCL_WebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"4607:12:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_WebAuthn_$291_$","typeString":"type(library FCL_WebAuthn)"}},"id":178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4620:15:0","memberName":"WebAuthn_format","nodeType":"MemberAccess","referencedDeclaration":113,"src":"4607:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_calldata_ptr_$_t_bytes1_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$_t_array$_t_uint256_$2_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata) pure returns (bytes32)"}},"id":185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4607:156:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4589:174:0"},{"assignments":[188],"declarations":[{"constant":false,"id":188,"mutability":"mutable","name":"result","nameLocation":"4779:6:0","nodeType":"VariableDeclaration","scope":199,"src":"4774:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":187,"name":"bool","nodeType":"ElementaryTypeName","src":"4774:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":196,"initialValue":{"arguments":[{"id":191,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":176,"src":"4817:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":192,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":166,"src":"4826:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},{"id":193,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":168,"src":"4830:2:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":194,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":170,"src":"4834:2:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":189,"name":"FCL_ecdsa_utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1466,"src":"4788:15:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_ecdsa_utils_$1466_$","typeString":"type(library FCL_ecdsa_utils)"}},"id":190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4804:12:0","memberName":"ecdsa_verify","nodeType":"MemberAccess","referencedDeclaration":808,"src":"4788:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_uint256_$2_calldata_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (bytes32,uint256[2] calldata,uint256,uint256) view returns (bool)"}},"id":195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4788:49:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"4774:63:0"},{"expression":{"id":197,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":188,"src":"4855:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":174,"id":198,"nodeType":"Return","src":"4848:13:0"}]},"id":200,"implemented":true,"kind":"function","modifiers":[],"name":"checkSignature","nameLocation":"4168:14:0","nodeType":"FunctionDefinition","parameters":{"id":171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":154,"mutability":"mutable","name":"authenticatorData","nameLocation":"4208:17:0","nodeType":"VariableDeclaration","scope":200,"src":"4193:32:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":153,"name":"bytes","nodeType":"ElementaryTypeName","src":"4193:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":156,"mutability":"mutable","name":"authenticatorDataFlagMask","nameLocation":"4242:25:0","nodeType":"VariableDeclaration","scope":200,"src":"4235:32:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":155,"name":"bytes1","nodeType":"ElementaryTypeName","src":"4235:6:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":158,"mutability":"mutable","name":"clientData","nameLocation":"4292:10:0","nodeType":"VariableDeclaration","scope":200,"src":"4277:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":157,"name":"bytes","nodeType":"ElementaryTypeName","src":"4277:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":160,"mutability":"mutable","name":"clientChallenge","nameLocation":"4320:15:0","nodeType":"VariableDeclaration","scope":200,"src":"4312:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":159,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4312:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":162,"mutability":"mutable","name":"clientChallengeDataOffset","nameLocation":"4353:25:0","nodeType":"VariableDeclaration","scope":200,"src":"4345:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":161,"name":"uint256","nodeType":"ElementaryTypeName","src":"4345:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":166,"mutability":"mutable","name":"rs","nameLocation":"4408:2:0","nodeType":"VariableDeclaration","scope":200,"src":"4388:22:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":163,"name":"uint256","nodeType":"ElementaryTypeName","src":"4388:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":165,"length":{"hexValue":"32","id":164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4396:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"4388:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":168,"mutability":"mutable","name":"Qx","nameLocation":"4428:2:0","nodeType":"VariableDeclaration","scope":200,"src":"4420:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":167,"name":"uint256","nodeType":"ElementaryTypeName","src":"4420:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":170,"mutability":"mutable","name":"Qy","nameLocation":"4448:2:0","nodeType":"VariableDeclaration","scope":200,"src":"4440:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":169,"name":"uint256","nodeType":"ElementaryTypeName","src":"4440:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4183:273:0"},"returnParameters":{"id":174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":173,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":200,"src":"4480:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":172,"name":"bool","nodeType":"ElementaryTypeName","src":"4480:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4479:6:0"},"scope":291,"src":"4158:710:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":244,"nodeType":"Block","src":"5194:393:0","statements":[{"assignments":[222],"declarations":[{"constant":false,"id":222,"mutability":"mutable","name":"message","nameLocation":"5305:7:0","nodeType":"VariableDeclaration","scope":244,"src":"5297:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":221,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5297:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":232,"initialValue":{"arguments":[{"id":225,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":202,"src":"5357:17:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":226,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":204,"src":"5376:25:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"id":227,"name":"clientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":206,"src":"5403:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":228,"name":"clientChallenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":208,"src":"5415:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":229,"name":"clientChallengeDataOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":210,"src":"5432:25:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":230,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":214,"src":"5459:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}],"expression":{"id":223,"name":"FCL_WebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"5315:12:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_WebAuthn_$291_$","typeString":"type(library FCL_WebAuthn)"}},"id":224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5328:15:0","memberName":"WebAuthn_format","nodeType":"MemberAccess","referencedDeclaration":113,"src":"5315:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_calldata_ptr_$_t_bytes1_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$_t_array$_t_uint256_$2_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata) pure returns (bytes32)"}},"id":231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:156:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5297:174:0"},{"assignments":[234],"declarations":[{"constant":false,"id":234,"mutability":"mutable","name":"result","nameLocation":"5487:6:0","nodeType":"VariableDeclaration","scope":244,"src":"5482:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":233,"name":"bool","nodeType":"ElementaryTypeName","src":"5482:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":241,"initialValue":{"arguments":[{"id":237,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":222,"src":"5531:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":238,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":214,"src":"5540:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},{"id":239,"name":"dataPointer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":216,"src":"5544:11:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":235,"name":"FCL_ecdsa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":685,"src":"5496:9:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_ecdsa_$685_$","typeString":"type(library FCL_ecdsa)"}},"id":236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5506:24:0","memberName":"ecdsa_precomputed_verify","nodeType":"MemberAccess","referencedDeclaration":684,"src":"5496:34:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_uint256_$2_calldata_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,uint256[2] calldata,address) view returns (bool)"}},"id":240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5496:60:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"5482:74:0"},{"expression":{"id":242,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":234,"src":"5574:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":220,"id":243,"nodeType":"Return","src":"5567:13:0"}]},"id":245,"implemented":true,"kind":"function","modifiers":[],"name":"checkSignature_prec","nameLocation":"4883:19:0","nodeType":"FunctionDefinition","parameters":{"id":217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":202,"mutability":"mutable","name":"authenticatorData","nameLocation":"4927:17:0","nodeType":"VariableDeclaration","scope":245,"src":"4912:32:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":201,"name":"bytes","nodeType":"ElementaryTypeName","src":"4912:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":204,"mutability":"mutable","name":"authenticatorDataFlagMask","nameLocation":"4961:25:0","nodeType":"VariableDeclaration","scope":245,"src":"4954:32:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":203,"name":"bytes1","nodeType":"ElementaryTypeName","src":"4954:6:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":206,"mutability":"mutable","name":"clientData","nameLocation":"5011:10:0","nodeType":"VariableDeclaration","scope":245,"src":"4996:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":205,"name":"bytes","nodeType":"ElementaryTypeName","src":"4996:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":208,"mutability":"mutable","name":"clientChallenge","nameLocation":"5039:15:0","nodeType":"VariableDeclaration","scope":245,"src":"5031:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":207,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5031:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":210,"mutability":"mutable","name":"clientChallengeDataOffset","nameLocation":"5072:25:0","nodeType":"VariableDeclaration","scope":245,"src":"5064:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":209,"name":"uint256","nodeType":"ElementaryTypeName","src":"5064:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":214,"mutability":"mutable","name":"rs","nameLocation":"5127:2:0","nodeType":"VariableDeclaration","scope":245,"src":"5107:22:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":211,"name":"uint256","nodeType":"ElementaryTypeName","src":"5107:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":213,"length":{"hexValue":"32","id":212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5115:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"5107:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":216,"mutability":"mutable","name":"dataPointer","nameLocation":"5147:11:0","nodeType":"VariableDeclaration","scope":245,"src":"5139:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":215,"name":"address","nodeType":"ElementaryTypeName","src":"5139:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4902:262:0"},"returnParameters":{"id":220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":219,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":245,"src":"5188:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":218,"name":"bool","nodeType":"ElementaryTypeName","src":"5188:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5187:6:0"},"scope":291,"src":"4874:713:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":289,"nodeType":"Block","src":"5985:400:0","statements":[{"assignments":[267],"declarations":[{"constant":false,"id":267,"mutability":"mutable","name":"message","nameLocation":"6096:7:0","nodeType":"VariableDeclaration","scope":289,"src":"6088:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":266,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6088:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":277,"initialValue":{"arguments":[{"id":270,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"6148:17:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":271,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":249,"src":"6167:25:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"id":272,"name":"clientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"6194:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":273,"name":"clientChallenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"6206:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":274,"name":"clientChallengeDataOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6223:25:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":275,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":259,"src":"6250:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}],"expression":{"id":268,"name":"FCL_WebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"6106:12:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_WebAuthn_$291_$","typeString":"type(library FCL_WebAuthn)"}},"id":269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6119:15:0","memberName":"WebAuthn_format","nodeType":"MemberAccess","referencedDeclaration":113,"src":"6106:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_calldata_ptr_$_t_bytes1_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$_t_array$_t_uint256_$2_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata) pure returns (bytes32)"}},"id":276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6106:156:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6088:174:0"},{"assignments":[279],"declarations":[{"constant":false,"id":279,"mutability":"mutable","name":"result","nameLocation":"6278:6:0","nodeType":"VariableDeclaration","scope":289,"src":"6273:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":278,"name":"bool","nodeType":"ElementaryTypeName","src":"6273:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":286,"initialValue":{"arguments":[{"id":282,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":267,"src":"6329:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":283,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":259,"src":"6338:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},{"id":284,"name":"dataPointer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"6342:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":280,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"6287:15:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6303:25:0","memberName":"ecdsa_precomputed_hackmem","nodeType":"MemberAccess","referencedDeclaration":2796,"src":"6287:41:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_uint256_$2_calldata_ptr_$_t_uint256_$returns$_t_bool_$","typeString":"function (bytes32,uint256[2] calldata,uint256) view returns (bool)"}},"id":285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6287:67:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"6273:81:0"},{"expression":{"id":287,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":279,"src":"6372:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":265,"id":288,"nodeType":"Return","src":"6365:13:0"}]},"id":290,"implemented":true,"kind":"function","modifiers":[],"name":"checkSignature_hackmem","nameLocation":"5671:22:0","nodeType":"FunctionDefinition","parameters":{"id":262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":247,"mutability":"mutable","name":"authenticatorData","nameLocation":"5718:17:0","nodeType":"VariableDeclaration","scope":290,"src":"5703:32:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":246,"name":"bytes","nodeType":"ElementaryTypeName","src":"5703:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":249,"mutability":"mutable","name":"authenticatorDataFlagMask","nameLocation":"5752:25:0","nodeType":"VariableDeclaration","scope":290,"src":"5745:32:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":248,"name":"bytes1","nodeType":"ElementaryTypeName","src":"5745:6:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":251,"mutability":"mutable","name":"clientData","nameLocation":"5802:10:0","nodeType":"VariableDeclaration","scope":290,"src":"5787:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":250,"name":"bytes","nodeType":"ElementaryTypeName","src":"5787:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":253,"mutability":"mutable","name":"clientChallenge","nameLocation":"5830:15:0","nodeType":"VariableDeclaration","scope":290,"src":"5822:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":252,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5822:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":255,"mutability":"mutable","name":"clientChallengeDataOffset","nameLocation":"5863:25:0","nodeType":"VariableDeclaration","scope":290,"src":"5855:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":254,"name":"uint256","nodeType":"ElementaryTypeName","src":"5855:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":259,"mutability":"mutable","name":"rs","nameLocation":"5918:2:0","nodeType":"VariableDeclaration","scope":290,"src":"5898:22:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":256,"name":"uint256","nodeType":"ElementaryTypeName","src":"5898:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":258,"length":{"hexValue":"32","id":257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5906:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"5898:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":261,"mutability":"mutable","name":"dataPointer","nameLocation":"5938:11:0","nodeType":"VariableDeclaration","scope":290,"src":"5930:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":260,"name":"uint256","nodeType":"ElementaryTypeName","src":"5930:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5693:262:0"},"returnParameters":{"id":265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":264,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":290,"src":"5979:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":263,"name":"bool","nodeType":"ElementaryTypeName","src":"5979:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5978:6:0"},"scope":291,"src":"5662:723:0","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":292,"src":"1463:4924:0","usedErrors":[11,13,15],"usedEvents":[]}],"src":"1228:5160:0"},"id":0},"FreshCryptoLib/FCL_ecdsa.sol":{"ast":{"absolutePath":"FreshCryptoLib/FCL_ecdsa.sol","exportedSymbols":{"FCL_Elliptic_ZZ":[2797],"FCL_ecdsa":[685]},"id":686,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":293,"literals":["solidity",">=","0.8",".19","<","0.9",".0"],"nodeType":"PragmaDirective","src":"1127:32:1"},{"absolutePath":"FreshCryptoLib/FCL_elliptic.sol","file":"./FCL_elliptic.sol","id":295,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":686,"sourceUnit":2798,"src":"1162:51:1","symbolAliases":[{"foreign":{"id":294,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1170:15:1","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FCL_ecdsa","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":685,"linearizedBaseContracts":[685],"name":"FCL_ecdsa","nameLocation":"1225:9:1","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":299,"mutability":"constant","name":"n","nameLocation":"1345:1:1","nodeType":"VariableDeclaration","scope":685,"src":"1328:38:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":296,"name":"uint256","nodeType":"ElementaryTypeName","src":"1328:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"expression":{"id":297,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1349:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":298,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1365:1:1","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"1349:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":401,"nodeType":"Block","src":"1676:589:1","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":315,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":304,"src":"1691:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1696:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1691:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":318,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":304,"src":"1701:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":319,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1706:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":320,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1722:1:1","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"1706:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1701:22:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1691:32:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":323,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":306,"src":"1727:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1732:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1727:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1691:42:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":327,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":306,"src":"1737:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":328,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1742:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":329,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1758:1:1","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"1742:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1737:22:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1691:68:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":335,"nodeType":"IfStatement","src":"1687:111:1","trueBody":{"id":334,"nodeType":"Block","src":"1761:37:1","statements":[{"expression":{"hexValue":"66616c7365","id":332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1782:5:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":314,"id":333,"nodeType":"Return","src":"1775:12:1"}]}},{"condition":{"id":341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1820:40:1","subExpression":{"arguments":[{"id":338,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"1853:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":339,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":310,"src":"1857:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":336,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1821:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1837:15:1","memberName":"ecAff_isOnCurve","nodeType":"MemberAccess","referencedDeclaration":2183,"src":"1821:31:1","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1821:39:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":345,"nodeType":"IfStatement","src":"1816:83:1","trueBody":{"id":344,"nodeType":"Block","src":"1862:37:1","statements":[{"expression":{"hexValue":"66616c7365","id":342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1883:5:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":314,"id":343,"nodeType":"Return","src":"1876:12:1"}]}},{"assignments":[347],"declarations":[{"constant":false,"id":347,"mutability":"mutable","name":"sInv","nameLocation":"1917:4:1","nodeType":"VariableDeclaration","scope":401,"src":"1909:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":346,"name":"uint256","nodeType":"ElementaryTypeName","src":"1909:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":352,"initialValue":{"arguments":[{"id":350,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":306,"src":"1952:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":348,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1924:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1940:11:1","memberName":"FCL_nModInv","nodeType":"MemberAccess","referencedDeclaration":1517,"src":"1924:27:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1924:30:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1909:45:1"},{"assignments":[354],"declarations":[{"constant":false,"id":354,"mutability":"mutable","name":"scalar_u","nameLocation":"1973:8:1","nodeType":"VariableDeclaration","scope":401,"src":"1965:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":353,"name":"uint256","nodeType":"ElementaryTypeName","src":"1965:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":364,"initialValue":{"arguments":[{"arguments":[{"id":358,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":302,"src":"1999:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":357,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1991:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":356,"name":"uint256","nodeType":"ElementaryTypeName","src":"1991:7:1","typeDescriptions":{}}},"id":359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1991:16:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":360,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":347,"src":"2009:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":361,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2015:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":362,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2031:1:1","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2015:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":355,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"1984:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1984:49:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1965:68:1"},{"assignments":[366],"declarations":[{"constant":false,"id":366,"mutability":"mutable","name":"scalar_v","nameLocation":"2051:8:1","nodeType":"VariableDeclaration","scope":401,"src":"2043:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":365,"name":"uint256","nodeType":"ElementaryTypeName","src":"2043:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":373,"initialValue":{"arguments":[{"id":368,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":304,"src":"2069:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":369,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":347,"src":"2072:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":370,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2078:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":371,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2094:1:1","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2078:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":367,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"2062:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2062:34:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2043:53:1"},{"assignments":[375],"declarations":[{"constant":false,"id":375,"mutability":"mutable","name":"x1","nameLocation":"2114:2:1","nodeType":"VariableDeclaration","scope":401,"src":"2106:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":374,"name":"uint256","nodeType":"ElementaryTypeName","src":"2106:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":376,"nodeType":"VariableDeclarationStatement","src":"2106:10:1"},{"expression":{"id":385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":377,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"2127:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":380,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"2169:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":381,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":310,"src":"2173:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":382,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":354,"src":"2177:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":383,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":366,"src":"2187:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":378,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2132:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2148:20:1","memberName":"ecZZ_mulmuladd_S_asm","nodeType":"MemberAccess","referencedDeclaration":2355,"src":"2132:36:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256)"}},"id":384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2132:64:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2127:69:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":386,"nodeType":"ExpressionStatement","src":"2127:69:1"},{"expression":{"id":395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":387,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"2207:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":389,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"2218:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":390,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"2222:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":391,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":304,"src":"2224:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2222:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":393,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"2226:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":388,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"2211:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2211:18:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2207:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":396,"nodeType":"ExpressionStatement","src":"2207:22:1"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":397,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"2251:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2257:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2251:7:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":314,"id":400,"nodeType":"Return","src":"2244:14:1"}]},"documentation":{"id":300,"nodeType":"StructuredDocumentation","src":"1459:98:1","text":" @dev ECDSA verification, given , signature, and public key, no calldata version"},"id":402,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_verify","nameLocation":"1571:12:1","nodeType":"FunctionDefinition","parameters":{"id":311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":302,"mutability":"mutable","name":"message","nameLocation":"1592:7:1","nodeType":"VariableDeclaration","scope":402,"src":"1584:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":301,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1584:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":304,"mutability":"mutable","name":"r","nameLocation":"1609:1:1","nodeType":"VariableDeclaration","scope":402,"src":"1601:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":303,"name":"uint256","nodeType":"ElementaryTypeName","src":"1601:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":306,"mutability":"mutable","name":"s","nameLocation":"1620:1:1","nodeType":"VariableDeclaration","scope":402,"src":"1612:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":305,"name":"uint256","nodeType":"ElementaryTypeName","src":"1612:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":308,"mutability":"mutable","name":"Qx","nameLocation":"1631:2:1","nodeType":"VariableDeclaration","scope":402,"src":"1623:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":307,"name":"uint256","nodeType":"ElementaryTypeName","src":"1623:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":310,"mutability":"mutable","name":"Qy","nameLocation":"1643:2:1","nodeType":"VariableDeclaration","scope":402,"src":"1635:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":309,"name":"uint256","nodeType":"ElementaryTypeName","src":"1635:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1583:63:1"},"returnParameters":{"id":314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":313,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":402,"src":"1671:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":312,"name":"bool","nodeType":"ElementaryTypeName","src":"1671:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1670:6:1"},"scope":685,"src":"1562:703:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":517,"nodeType":"Block","src":"2374:595:1","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":415,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":408,"src":"2389:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2394:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2389:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":418,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":408,"src":"2399:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":419,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2404:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":420,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2420:1:1","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2404:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2399:22:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2389:32:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":423,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":410,"src":"2425:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":424,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2430:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2425:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2389:42:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":427,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":410,"src":"2435:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":428,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2440:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":429,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2456:1:1","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2440:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2435:22:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2389:68:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":438,"nodeType":"IfStatement","src":"2385:116:1","trueBody":{"id":437,"nodeType":"Block","src":"2459:42:1","statements":[{"expression":{"arguments":[{"hexValue":"30","id":434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2488:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2480:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":432,"name":"address","nodeType":"ElementaryTypeName","src":"2480:7:1","typeDescriptions":{}}},"id":435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2480:10:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":414,"id":436,"nodeType":"Return","src":"2473:17:1"}]}},{"assignments":[440],"declarations":[{"constant":false,"id":440,"mutability":"mutable","name":"y","nameLocation":"2518:1:1","nodeType":"VariableDeclaration","scope":517,"src":"2510:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":439,"name":"uint256","nodeType":"ElementaryTypeName","src":"2510:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":448,"initialValue":{"arguments":[{"id":443,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":408,"src":"2550:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":444,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":406,"src":"2553:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3237","id":445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2555:2:1","typeDescriptions":{"typeIdentifier":"t_rational_27_by_1","typeString":"int_const 27"},"value":"27"},"src":"2553:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":441,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2520:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2536:13:1","memberName":"ec_Decompress","nodeType":"MemberAccess","referencedDeclaration":1914,"src":"2520:29:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2520:38:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2510:48:1"},{"assignments":[450],"declarations":[{"constant":false,"id":450,"mutability":"mutable","name":"rinv","nameLocation":"2576:4:1","nodeType":"VariableDeclaration","scope":517,"src":"2568:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":449,"name":"uint256","nodeType":"ElementaryTypeName","src":"2568:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":455,"initialValue":{"arguments":[{"id":453,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":408,"src":"2609:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":451,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2581:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2597:11:1","memberName":"FCL_nModInv","nodeType":"MemberAccess","referencedDeclaration":1517,"src":"2581:27:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2581:30:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2568:43:1"},{"assignments":[457],"declarations":[{"constant":false,"id":457,"mutability":"mutable","name":"u1","nameLocation":"2629:2:1","nodeType":"VariableDeclaration","scope":517,"src":"2621:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":456,"name":"uint256","nodeType":"ElementaryTypeName","src":"2621:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":472,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":459,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2639:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2655:1:1","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2639:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"hexValue":"30","id":462,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2664:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":463,"name":"h","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":404,"src":"2666:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":464,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2668:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":465,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2684:1:1","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2668:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":461,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"2657:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2657:29:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2639:47:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":468,"name":"rinv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":450,"src":"2688:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":469,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2693:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":470,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2709:1:1","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2693:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":458,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"2632:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2632:79:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2621:90:1"},{"assignments":[474],"declarations":[{"constant":false,"id":474,"mutability":"mutable","name":"u2","nameLocation":"2737:2:1","nodeType":"VariableDeclaration","scope":517,"src":"2729:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":473,"name":"uint256","nodeType":"ElementaryTypeName","src":"2729:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":481,"initialValue":{"arguments":[{"id":476,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":410,"src":"2747:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":477,"name":"rinv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":450,"src":"2750:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":478,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2755:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":479,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2771:1:1","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2755:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":475,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"2740:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2740:33:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2729:44:1"},{"assignments":[483],"declarations":[{"constant":false,"id":483,"mutability":"mutable","name":"Qx","nameLocation":"2799:2:1","nodeType":"VariableDeclaration","scope":517,"src":"2791:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":482,"name":"uint256","nodeType":"ElementaryTypeName","src":"2791:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":484,"nodeType":"VariableDeclarationStatement","src":"2791:10:1"},{"assignments":[486],"declarations":[{"constant":false,"id":486,"mutability":"mutable","name":"Qy","nameLocation":"2819:2:1","nodeType":"VariableDeclaration","scope":517,"src":"2811:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":485,"name":"uint256","nodeType":"ElementaryTypeName","src":"2811:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":487,"nodeType":"VariableDeclarationStatement","src":"2811:10:1"},{"expression":{"id":498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":488,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":483,"src":"2832:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":489,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":486,"src":"2835:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":490,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"2831:7:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":493,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":408,"src":"2870:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":494,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"2872:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":495,"name":"u1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":457,"src":"2875:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":496,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":474,"src":"2879:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":491,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2839:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2855:14:1","memberName":"ecZZ_mulmuladd","nodeType":"MemberAccess","referencedDeclaration":2429,"src":"2839:30:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:43:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"2831:51:1","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":499,"nodeType":"ExpressionStatement","src":"2831:51:1"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":509,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":483,"src":"2951:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":510,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":486,"src":"2955:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":507,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2934:3:1","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2938:12:1","memberName":"encodePacked","nodeType":"MemberAccess","src":"2934:16:1","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2934:24:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":506,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2924:9:1","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2924:35:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2916:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":504,"name":"uint256","nodeType":"ElementaryTypeName","src":"2916:7:1","typeDescriptions":{}}},"id":513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2916:44:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":503,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2908:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":502,"name":"uint160","nodeType":"ElementaryTypeName","src":"2908:7:1","typeDescriptions":{}}},"id":514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2908:53:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2900:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":500,"name":"address","nodeType":"ElementaryTypeName","src":"2900:7:1","typeDescriptions":{}}},"id":515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2900:62:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":414,"id":516,"nodeType":"Return","src":"2893:69:1"}]},"id":518,"implemented":true,"kind":"function","modifiers":[],"name":"ec_recover_r1","nameLocation":"2280:13:1","nodeType":"FunctionDefinition","parameters":{"id":411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":404,"mutability":"mutable","name":"h","nameLocation":"2302:1:1","nodeType":"VariableDeclaration","scope":518,"src":"2294:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":403,"name":"uint256","nodeType":"ElementaryTypeName","src":"2294:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":406,"mutability":"mutable","name":"v","nameLocation":"2313:1:1","nodeType":"VariableDeclaration","scope":518,"src":"2305:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":405,"name":"uint256","nodeType":"ElementaryTypeName","src":"2305:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":408,"mutability":"mutable","name":"r","nameLocation":"2324:1:1","nodeType":"VariableDeclaration","scope":518,"src":"2316:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":407,"name":"uint256","nodeType":"ElementaryTypeName","src":"2316:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":410,"mutability":"mutable","name":"s","nameLocation":"2335:1:1","nodeType":"VariableDeclaration","scope":518,"src":"2327:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":409,"name":"uint256","nodeType":"ElementaryTypeName","src":"2327:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2293:44:1"},"returnParameters":{"id":414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":413,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":518,"src":"2361:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":412,"name":"address","nodeType":"ElementaryTypeName","src":"2361:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2360:9:1"},"scope":685,"src":"2271:698:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":594,"nodeType":"Block","src":"3114:541:1","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":531,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":522,"src":"3136:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3141:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3136:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":534,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":522,"src":"3146:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":535,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"3151:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3146:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3136:16:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":538,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":524,"src":"3156:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3161:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3156:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3136:26:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":542,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":524,"src":"3166:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":543,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"3171:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3166:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3136:36:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":549,"nodeType":"IfStatement","src":"3132:79:1","trueBody":{"id":548,"nodeType":"Block","src":"3174:37:1","statements":[{"expression":{"hexValue":"66616c7365","id":546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3195:5:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":530,"id":547,"nodeType":"Return","src":"3188:12:1"}]}},{"assignments":[551],"declarations":[{"constant":false,"id":551,"mutability":"mutable","name":"sInv","nameLocation":"3386:4:1","nodeType":"VariableDeclaration","scope":594,"src":"3378:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":550,"name":"uint256","nodeType":"ElementaryTypeName","src":"3378:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":556,"initialValue":{"arguments":[{"id":554,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":524,"src":"3421:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":552,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"3393:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3409:11:1","memberName":"FCL_nModInv","nodeType":"MemberAccess","referencedDeclaration":1517,"src":"3393:27:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3393:30:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3378:45:1"},{"assignments":[558],"declarations":[{"constant":false,"id":558,"mutability":"mutable","name":"X","nameLocation":"3442:1:1","nodeType":"VariableDeclaration","scope":594,"src":"3434:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":557,"name":"uint256","nodeType":"ElementaryTypeName","src":"3434:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":559,"nodeType":"VariableDeclarationStatement","src":"3434:9:1"},{"expression":{"id":578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":560,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":558,"src":"3484:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":566,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":520,"src":"3545:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3537:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":564,"name":"uint256","nodeType":"ElementaryTypeName","src":"3537:7:1","typeDescriptions":{}}},"id":567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3537:16:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":568,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":551,"src":"3555:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":569,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"3561:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":563,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"3530:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3530:33:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":572,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":522,"src":"3572:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":573,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":551,"src":"3575:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":574,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"3581:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":571,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"3565:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3565:18:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":576,"name":"Shamir8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"3585:7:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":561,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"3488:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3504:25:1","memberName":"ecZZ_mulmuladd_S8_extcode","nodeType":"MemberAccess","referencedDeclaration":2573,"src":"3488:41:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,uint256,address) view returns (uint256)"}},"id":577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3488:105:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3484:109:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":579,"nodeType":"ExpressionStatement","src":"3484:109:1"},{"expression":{"id":588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":580,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":558,"src":"3604:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":582,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":558,"src":"3614:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":583,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"3617:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":584,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":522,"src":"3619:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3617:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":586,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"3621:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":581,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"3607:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3607:17:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3604:20:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":589,"nodeType":"ExpressionStatement","src":"3604:20:1"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":590,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":558,"src":"3642:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":591,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3647:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3642:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":530,"id":593,"nodeType":"Return","src":"3635:13:1"}]},"id":595,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_precomputed_verify","nameLocation":"2984:24:1","nodeType":"FunctionDefinition","parameters":{"id":527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":520,"mutability":"mutable","name":"message","nameLocation":"3017:7:1","nodeType":"VariableDeclaration","scope":595,"src":"3009:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":519,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3009:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":522,"mutability":"mutable","name":"r","nameLocation":"3034:1:1","nodeType":"VariableDeclaration","scope":595,"src":"3026:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":521,"name":"uint256","nodeType":"ElementaryTypeName","src":"3026:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":524,"mutability":"mutable","name":"s","nameLocation":"3045:1:1","nodeType":"VariableDeclaration","scope":595,"src":"3037:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":523,"name":"uint256","nodeType":"ElementaryTypeName","src":"3037:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":526,"mutability":"mutable","name":"Shamir8","nameLocation":"3056:7:1","nodeType":"VariableDeclaration","scope":595,"src":"3048:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":525,"name":"address","nodeType":"ElementaryTypeName","src":"3048:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3008:56:1"},"returnParameters":{"id":530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":529,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":595,"src":"3104:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":528,"name":"bool","nodeType":"ElementaryTypeName","src":"3104:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3103:6:1"},"scope":685,"src":"2975:680:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":683,"nodeType":"Block","src":"3837:587:1","statements":[{"assignments":[609],"declarations":[{"constant":false,"id":609,"mutability":"mutable","name":"r","nameLocation":"3855:1:1","nodeType":"VariableDeclaration","scope":683,"src":"3847:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":608,"name":"uint256","nodeType":"ElementaryTypeName","src":"3847:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":613,"initialValue":{"baseExpression":{"id":610,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":601,"src":"3859:2:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":612,"indexExpression":{"hexValue":"30","id":611,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3862:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3859:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3847:17:1"},{"assignments":[615],"declarations":[{"constant":false,"id":615,"mutability":"mutable","name":"s","nameLocation":"3882:1:1","nodeType":"VariableDeclaration","scope":683,"src":"3874:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":614,"name":"uint256","nodeType":"ElementaryTypeName","src":"3874:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":619,"initialValue":{"baseExpression":{"id":616,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":601,"src":"3886:2:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":618,"indexExpression":{"hexValue":"31","id":617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3889:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3886:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3874:17:1"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":620,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"3905:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":621,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3910:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3905:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":623,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"3915:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":624,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"3920:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3915:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3905:16:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":627,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":615,"src":"3925:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3930:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3925:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3905:26:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":631,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":615,"src":"3935:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":632,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"3940:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3935:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3905:36:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":638,"nodeType":"IfStatement","src":"3901:79:1","trueBody":{"id":637,"nodeType":"Block","src":"3943:37:1","statements":[{"expression":{"hexValue":"66616c7365","id":635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3964:5:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":607,"id":636,"nodeType":"Return","src":"3957:12:1"}]}},{"assignments":[640],"declarations":[{"constant":false,"id":640,"mutability":"mutable","name":"sInv","nameLocation":"4155:4:1","nodeType":"VariableDeclaration","scope":683,"src":"4147:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":639,"name":"uint256","nodeType":"ElementaryTypeName","src":"4147:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":645,"initialValue":{"arguments":[{"id":643,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":615,"src":"4190:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":641,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"4162:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4178:11:1","memberName":"FCL_nModInv","nodeType":"MemberAccess","referencedDeclaration":1517,"src":"4162:27:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4162:30:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4147:45:1"},{"assignments":[647],"declarations":[{"constant":false,"id":647,"mutability":"mutable","name":"X","nameLocation":"4211:1:1","nodeType":"VariableDeclaration","scope":683,"src":"4203:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":646,"name":"uint256","nodeType":"ElementaryTypeName","src":"4203:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":648,"nodeType":"VariableDeclarationStatement","src":"4203:9:1"},{"expression":{"id":667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":649,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":647,"src":"4253:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":655,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":597,"src":"4314:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":654,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4306:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":653,"name":"uint256","nodeType":"ElementaryTypeName","src":"4306:7:1","typeDescriptions":{}}},"id":656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4306:16:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":657,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":640,"src":"4324:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":658,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"4330:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":652,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"4299:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4299:33:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":661,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"4341:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":662,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":640,"src":"4344:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":663,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"4350:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":660,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"4334:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4334:18:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":665,"name":"Shamir8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":603,"src":"4354:7:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":650,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"4257:15:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4273:25:1","memberName":"ecZZ_mulmuladd_S8_extcode","nodeType":"MemberAccess","referencedDeclaration":2573,"src":"4257:41:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,uint256,address) view returns (uint256)"}},"id":666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4257:105:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4253:109:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":668,"nodeType":"ExpressionStatement","src":"4253:109:1"},{"expression":{"id":677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":669,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":647,"src":"4373:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":671,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":647,"src":"4383:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":672,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"4386:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":673,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"4388:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4386:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":675,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"4390:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":670,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"4376:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4376:17:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4373:20:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":678,"nodeType":"ExpressionStatement","src":"4373:20:1"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":679,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":647,"src":"4411:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4416:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4411:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":607,"id":682,"nodeType":"Return","src":"4404:13:1"}]},"id":684,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_precomputed_verify","nameLocation":"3705:24:1","nodeType":"FunctionDefinition","parameters":{"id":604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":597,"mutability":"mutable","name":"message","nameLocation":"3738:7:1","nodeType":"VariableDeclaration","scope":684,"src":"3730:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":596,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3730:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":601,"mutability":"mutable","name":"rs","nameLocation":"3767:2:1","nodeType":"VariableDeclaration","scope":684,"src":"3747:22:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":598,"name":"uint256","nodeType":"ElementaryTypeName","src":"3747:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":600,"length":{"hexValue":"32","id":599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3755:1:1","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"3747:10:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":603,"mutability":"mutable","name":"Shamir8","nameLocation":"3779:7:1","nodeType":"VariableDeclaration","scope":684,"src":"3771:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":602,"name":"address","nodeType":"ElementaryTypeName","src":"3771:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3729:58:1"},"returnParameters":{"id":607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":606,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":684,"src":"3827:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":605,"name":"bool","nodeType":"ElementaryTypeName","src":"3827:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3826:6:1"},"scope":685,"src":"3696:728:1","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":686,"src":"1217:3244:1","usedErrors":[],"usedEvents":[]}],"src":"1127:3335:1"},"id":1},"FreshCryptoLib/FCL_ecdsa_utils.sol":{"ast":{"absolutePath":"FreshCryptoLib/FCL_ecdsa_utils.sol","exportedSymbols":{"FCL_Elliptic_ZZ":[2797],"FCL_ecdsa_utils":[1466]},"id":1467,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":687,"literals":["solidity",">=","0.8",".19","<","0.9",".0"],"nodeType":"PragmaDirective","src":"1128:32:2"},{"absolutePath":"FreshCryptoLib/FCL_elliptic.sol","file":"./FCL_elliptic.sol","id":689,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1467,"sourceUnit":2798,"src":"1163:51:2","symbolAliases":[{"foreign":{"id":688,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1171:15:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FCL_ecdsa_utils","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":1466,"linearizedBaseContracts":[1466],"name":"FCL_ecdsa_utils","nameLocation":"1226:15:2","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":693,"mutability":"constant","name":"n","nameLocation":"1352:1:2","nodeType":"VariableDeclaration","scope":1466,"src":"1335:38:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":690,"name":"uint256","nodeType":"ElementaryTypeName","src":"1335:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"expression":{"id":691,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1356:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":692,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1372:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"1356:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":807,"nodeType":"Block","src":"1582:644:2","statements":[{"assignments":[710],"declarations":[{"constant":false,"id":710,"mutability":"mutable","name":"r","nameLocation":"1600:1:2","nodeType":"VariableDeclaration","scope":807,"src":"1592:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":709,"name":"uint256","nodeType":"ElementaryTypeName","src":"1592:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":714,"initialValue":{"baseExpression":{"id":711,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":700,"src":"1604:2:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":713,"indexExpression":{"hexValue":"30","id":712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1607:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1604:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1592:17:2"},{"assignments":[716],"declarations":[{"constant":false,"id":716,"mutability":"mutable","name":"s","nameLocation":"1627:1:2","nodeType":"VariableDeclaration","scope":807,"src":"1619:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":715,"name":"uint256","nodeType":"ElementaryTypeName","src":"1619:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":720,"initialValue":{"baseExpression":{"id":717,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":700,"src":"1631:2:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":719,"indexExpression":{"hexValue":"31","id":718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1634:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1631:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1619:17:2"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":721,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":710,"src":"1650:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1655:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1650:6:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":724,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":710,"src":"1660:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":725,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1665:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":726,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1681:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"1665:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1660:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1650:32:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":729,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":716,"src":"1686:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1691:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1686:6:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1650:42:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":733,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":716,"src":"1696:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":734,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1701:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1717:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"1701:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1696:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1650:68:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":741,"nodeType":"IfStatement","src":"1646:111:2","trueBody":{"id":740,"nodeType":"Block","src":"1720:37:2","statements":[{"expression":{"hexValue":"66616c7365","id":738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1741:5:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":708,"id":739,"nodeType":"Return","src":"1734:12:2"}]}},{"condition":{"id":747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1770:40:2","subExpression":{"arguments":[{"id":744,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":702,"src":"1803:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":745,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":704,"src":"1807:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":742,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1771:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1787:15:2","memberName":"ecAff_isOnCurve","nodeType":"MemberAccess","referencedDeclaration":2183,"src":"1771:31:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1771:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":751,"nodeType":"IfStatement","src":"1766:83:2","trueBody":{"id":750,"nodeType":"Block","src":"1812:37:2","statements":[{"expression":{"hexValue":"66616c7365","id":748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1833:5:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":708,"id":749,"nodeType":"Return","src":"1826:12:2"}]}},{"assignments":[753],"declarations":[{"constant":false,"id":753,"mutability":"mutable","name":"sInv","nameLocation":"1867:4:2","nodeType":"VariableDeclaration","scope":807,"src":"1859:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":752,"name":"uint256","nodeType":"ElementaryTypeName","src":"1859:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":758,"initialValue":{"arguments":[{"id":756,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":716,"src":"1902:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":754,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1874:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1890:11:2","memberName":"FCL_nModInv","nodeType":"MemberAccess","referencedDeclaration":1517,"src":"1874:27:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1874:30:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1859:45:2"},{"assignments":[760],"declarations":[{"constant":false,"id":760,"mutability":"mutable","name":"scalar_u","nameLocation":"1923:8:2","nodeType":"VariableDeclaration","scope":807,"src":"1915:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":759,"name":"uint256","nodeType":"ElementaryTypeName","src":"1915:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":770,"initialValue":{"arguments":[{"arguments":[{"id":764,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":696,"src":"1949:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":763,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1941:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":762,"name":"uint256","nodeType":"ElementaryTypeName","src":"1941:7:2","typeDescriptions":{}}},"id":765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1941:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":766,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":753,"src":"1959:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":767,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"1965:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":768,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1981:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"1965:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":761,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"1934:6:2","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1934:49:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1915:68:2"},{"assignments":[772],"declarations":[{"constant":false,"id":772,"mutability":"mutable","name":"scalar_v","nameLocation":"2001:8:2","nodeType":"VariableDeclaration","scope":807,"src":"1993:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":771,"name":"uint256","nodeType":"ElementaryTypeName","src":"1993:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":779,"initialValue":{"arguments":[{"id":774,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":710,"src":"2019:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":775,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":753,"src":"2022:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":776,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2028:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":777,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2044:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2028:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":773,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"2012:6:2","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2012:34:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1993:53:2"},{"assignments":[781],"declarations":[{"constant":false,"id":781,"mutability":"mutable","name":"x1","nameLocation":"2064:2:2","nodeType":"VariableDeclaration","scope":807,"src":"2056:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":780,"name":"uint256","nodeType":"ElementaryTypeName","src":"2056:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":782,"nodeType":"VariableDeclarationStatement","src":"2056:10:2"},{"expression":{"id":791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":783,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":781,"src":"2077:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":786,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":702,"src":"2119:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":787,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":704,"src":"2123:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":788,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":760,"src":"2127:8:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":789,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"2137:8:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":784,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2082:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2098:20:2","memberName":"ecZZ_mulmuladd_S_asm","nodeType":"MemberAccess","referencedDeclaration":2355,"src":"2082:36:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256)"}},"id":790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2082:64:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2077:69:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":792,"nodeType":"ExpressionStatement","src":"2077:69:2"},{"expression":{"id":801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":793,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":781,"src":"2156:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":795,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":781,"src":"2167:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":796,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"2171:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":797,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":710,"src":"2173:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2171:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":799,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"2175:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":794,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"2160:6:2","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2160:18:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2156:22:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":802,"nodeType":"ExpressionStatement","src":"2156:22:2"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":803,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":781,"src":"2212:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2218:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2212:7:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":708,"id":806,"nodeType":"Return","src":"2205:14:2"}]},"documentation":{"id":694,"nodeType":"StructuredDocumentation","src":"1382:78:2","text":" @dev ECDSA verification, given , signature, and public key."},"id":808,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_verify","nameLocation":"1475:12:2","nodeType":"FunctionDefinition","parameters":{"id":705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":696,"mutability":"mutable","name":"message","nameLocation":"1496:7:2","nodeType":"VariableDeclaration","scope":808,"src":"1488:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":695,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1488:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":700,"mutability":"mutable","name":"rs","nameLocation":"1525:2:2","nodeType":"VariableDeclaration","scope":808,"src":"1505:22:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":697,"name":"uint256","nodeType":"ElementaryTypeName","src":"1505:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":699,"length":{"hexValue":"32","id":698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1513:1:2","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"1505:10:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":702,"mutability":"mutable","name":"Qx","nameLocation":"1537:2:2","nodeType":"VariableDeclaration","scope":808,"src":"1529:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":701,"name":"uint256","nodeType":"ElementaryTypeName","src":"1529:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":704,"mutability":"mutable","name":"Qy","nameLocation":"1549:2:2","nodeType":"VariableDeclaration","scope":808,"src":"1541:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":703,"name":"uint256","nodeType":"ElementaryTypeName","src":"1541:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1487:65:2"},"returnParameters":{"id":708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":707,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":808,"src":"1576:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":706,"name":"bool","nodeType":"ElementaryTypeName","src":"1576:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1575:6:2"},"scope":1466,"src":"1466:760:2","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":834,"nodeType":"Block","src":"2347:61:2","statements":[{"expression":{"arguments":[{"id":824,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":810,"src":"2377:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":825,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":814,"src":"2386:2:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},{"baseExpression":{"id":826,"name":"Q","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":818,"src":"2390:1:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":828,"indexExpression":{"hexValue":"30","id":827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2392:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2390:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":829,"name":"Q","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":818,"src":"2396:1:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":831,"indexExpression":{"hexValue":"31","id":830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2398:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2396:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":823,"name":"ecdsa_verify","nodeType":"Identifier","overloadedDeclarations":[808,835],"referencedDeclaration":808,"src":"2364:12:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_uint256_$2_calldata_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (bytes32,uint256[2] calldata,uint256,uint256) view returns (bool)"}},"id":832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2364:37:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":822,"id":833,"nodeType":"Return","src":"2357:44:2"}]},"id":835,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_verify","nameLocation":"2241:12:2","nodeType":"FunctionDefinition","parameters":{"id":819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":810,"mutability":"mutable","name":"message","nameLocation":"2262:7:2","nodeType":"VariableDeclaration","scope":835,"src":"2254:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":809,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2254:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":814,"mutability":"mutable","name":"rs","nameLocation":"2291:2:2","nodeType":"VariableDeclaration","scope":835,"src":"2271:22:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":811,"name":"uint256","nodeType":"ElementaryTypeName","src":"2271:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":813,"length":{"hexValue":"32","id":812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2279:1:2","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"2271:10:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":818,"mutability":"mutable","name":"Q","nameLocation":"2315:1:2","nodeType":"VariableDeclaration","scope":835,"src":"2295:21:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":815,"name":"uint256","nodeType":"ElementaryTypeName","src":"2295:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":817,"length":{"hexValue":"32","id":816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2303:1:2","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"2295:10:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"src":"2253:64:2"},"returnParameters":{"id":822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":821,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":835,"src":"2341:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":820,"name":"bool","nodeType":"ElementaryTypeName","src":"2341:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2340:6:2"},"scope":1466,"src":"2232:176:2","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":950,"nodeType":"Block","src":"2517:595:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":848,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":841,"src":"2532:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2537:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2532:6:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":851,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":841,"src":"2542:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":852,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2547:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2563:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2547:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2542:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2532:32:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":856,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":843,"src":"2568:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2573:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2568:6:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2532:42:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":860,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":843,"src":"2578:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":861,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2583:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":862,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2599:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2583:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2578:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2532:68:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":871,"nodeType":"IfStatement","src":"2528:116:2","trueBody":{"id":870,"nodeType":"Block","src":"2602:42:2","statements":[{"expression":{"arguments":[{"hexValue":"30","id":867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2631:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":866,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2623:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":865,"name":"address","nodeType":"ElementaryTypeName","src":"2623:7:2","typeDescriptions":{}}},"id":868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2623:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":847,"id":869,"nodeType":"Return","src":"2616:17:2"}]}},{"assignments":[873],"declarations":[{"constant":false,"id":873,"mutability":"mutable","name":"y","nameLocation":"2661:1:2","nodeType":"VariableDeclaration","scope":950,"src":"2653:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":872,"name":"uint256","nodeType":"ElementaryTypeName","src":"2653:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":881,"initialValue":{"arguments":[{"id":876,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":841,"src":"2693:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":877,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":839,"src":"2696:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3237","id":878,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2698:2:2","typeDescriptions":{"typeIdentifier":"t_rational_27_by_1","typeString":"int_const 27"},"value":"27"},"src":"2696:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":874,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2663:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2679:13:2","memberName":"ec_Decompress","nodeType":"MemberAccess","referencedDeclaration":1914,"src":"2663:29:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2663:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2653:48:2"},{"assignments":[883],"declarations":[{"constant":false,"id":883,"mutability":"mutable","name":"rinv","nameLocation":"2719:4:2","nodeType":"VariableDeclaration","scope":950,"src":"2711:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":882,"name":"uint256","nodeType":"ElementaryTypeName","src":"2711:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":888,"initialValue":{"arguments":[{"id":886,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":841,"src":"2752:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":884,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2724:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2740:11:2","memberName":"FCL_nModInv","nodeType":"MemberAccess","referencedDeclaration":1517,"src":"2724:27:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2724:30:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2711:43:2"},{"assignments":[890],"declarations":[{"constant":false,"id":890,"mutability":"mutable","name":"u1","nameLocation":"2772:2:2","nodeType":"VariableDeclaration","scope":950,"src":"2764:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":889,"name":"uint256","nodeType":"ElementaryTypeName","src":"2764:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":905,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":892,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2782:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2798:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2782:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"hexValue":"30","id":895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2807:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":896,"name":"h","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":837,"src":"2809:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":897,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2811:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2827:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2811:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":894,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"2800:6:2","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2800:29:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2782:47:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":901,"name":"rinv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":883,"src":"2831:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":902,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2836:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":903,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2852:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2836:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":891,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"2775:6:2","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2775:79:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2764:90:2"},{"assignments":[907],"declarations":[{"constant":false,"id":907,"mutability":"mutable","name":"u2","nameLocation":"2880:2:2","nodeType":"VariableDeclaration","scope":950,"src":"2872:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":906,"name":"uint256","nodeType":"ElementaryTypeName","src":"2872:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":914,"initialValue":{"arguments":[{"id":909,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":843,"src":"2890:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":910,"name":"rinv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":883,"src":"2893:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":911,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2898:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2914:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"2898:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":908,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"2883:6:2","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2883:33:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2872:44:2"},{"assignments":[916],"declarations":[{"constant":false,"id":916,"mutability":"mutable","name":"Qx","nameLocation":"2942:2:2","nodeType":"VariableDeclaration","scope":950,"src":"2934:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":915,"name":"uint256","nodeType":"ElementaryTypeName","src":"2934:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":917,"nodeType":"VariableDeclarationStatement","src":"2934:10:2"},{"assignments":[919],"declarations":[{"constant":false,"id":919,"mutability":"mutable","name":"Qy","nameLocation":"2962:2:2","nodeType":"VariableDeclaration","scope":950,"src":"2954:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":918,"name":"uint256","nodeType":"ElementaryTypeName","src":"2954:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":920,"nodeType":"VariableDeclarationStatement","src":"2954:10:2"},{"expression":{"id":931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":921,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":916,"src":"2975:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":922,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":919,"src":"2978:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":923,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"2974:7:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":926,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":841,"src":"3013:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":927,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":873,"src":"3015:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":928,"name":"u1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":890,"src":"3018:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":929,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":907,"src":"3022:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":924,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"2982:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2998:14:2","memberName":"ecZZ_mulmuladd","nodeType":"MemberAccess","referencedDeclaration":2429,"src":"2982:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2982:43:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"2974:51:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":932,"nodeType":"ExpressionStatement","src":"2974:51:2"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":942,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":916,"src":"3094:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":943,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":919,"src":"3098:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":940,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3077:3:2","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3081:12:2","memberName":"encodePacked","nodeType":"MemberAccess","src":"3077:16:2","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3077:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":939,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3067:9:2","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3067:35:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":938,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3059:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":937,"name":"uint256","nodeType":"ElementaryTypeName","src":"3059:7:2","typeDescriptions":{}}},"id":946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3059:44:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":936,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3051:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":935,"name":"uint160","nodeType":"ElementaryTypeName","src":"3051:7:2","typeDescriptions":{}}},"id":947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3051:53:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":934,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3043:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":933,"name":"address","nodeType":"ElementaryTypeName","src":"3043:7:2","typeDescriptions":{}}},"id":948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3043:62:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":847,"id":949,"nodeType":"Return","src":"3036:69:2"}]},"id":951,"implemented":true,"kind":"function","modifiers":[],"name":"ec_recover_r1","nameLocation":"2423:13:2","nodeType":"FunctionDefinition","parameters":{"id":844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":837,"mutability":"mutable","name":"h","nameLocation":"2445:1:2","nodeType":"VariableDeclaration","scope":951,"src":"2437:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":836,"name":"uint256","nodeType":"ElementaryTypeName","src":"2437:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":839,"mutability":"mutable","name":"v","nameLocation":"2456:1:2","nodeType":"VariableDeclaration","scope":951,"src":"2448:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":838,"name":"uint256","nodeType":"ElementaryTypeName","src":"2448:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":841,"mutability":"mutable","name":"r","nameLocation":"2467:1:2","nodeType":"VariableDeclaration","scope":951,"src":"2459:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":840,"name":"uint256","nodeType":"ElementaryTypeName","src":"2459:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":843,"mutability":"mutable","name":"s","nameLocation":"2478:1:2","nodeType":"VariableDeclaration","scope":951,"src":"2470:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":842,"name":"uint256","nodeType":"ElementaryTypeName","src":"2470:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2436:44:2"},"returnParameters":{"id":847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":951,"src":"2504:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":845,"name":"address","nodeType":"ElementaryTypeName","src":"2504:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2503:9:2"},"scope":1466,"src":"2414:698:2","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1020,"nodeType":"Block","src":"3370:408:2","statements":[{"expression":{"id":972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":964,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":960,"src":"3380:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3419:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3421:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":969,"name":"k","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"3424:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":965,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"3382:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3398:20:2","memberName":"ecZZ_mulmuladd_S_asm","nodeType":"MemberAccess","referencedDeclaration":2355,"src":"3382:36:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256)"}},"id":971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3382:47:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3380:49:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":973,"nodeType":"ExpressionStatement","src":"3380:49:2"},{"expression":{"id":981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":974,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":960,"src":"3501:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3510:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":977,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":960,"src":"3512:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":978,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"3515:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":979,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3531:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"3515:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":975,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"3503:6:2","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3503:30:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3501:32:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":982,"nodeType":"ExpressionStatement","src":"3501:32:2"},{"expression":{"id":1006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":983,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":962,"src":"3544:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":987,"name":"k","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"3581:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":985,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"3553:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3569:11:2","memberName":"FCL_nModInv","nodeType":"MemberAccess","referencedDeclaration":1517,"src":"3553:27:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3553:30:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"arguments":[{"id":992,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":953,"src":"3600:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":991,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3592:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":990,"name":"uint256","nodeType":"ElementaryTypeName","src":"3592:7:2","typeDescriptions":{}}},"id":993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3592:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":995,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":960,"src":"3617:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":996,"name":"kpriv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":957,"src":"3620:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":997,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"3627:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":998,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3643:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"3627:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":994,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"3610:6:2","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3610:35:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":1000,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"3646:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1001,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3662:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"3646:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":989,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"3585:6:2","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3585:79:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":1003,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"3665:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1004,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3681:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"3665:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":984,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"3546:6:2","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3546:137:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3544:139:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1007,"nodeType":"ExpressionStatement","src":"3544:139:2"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1008,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":960,"src":"3726:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3729:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3726:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1011,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":962,"src":"3732:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3735:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3732:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3726:10:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1019,"nodeType":"IfStatement","src":"3723:47:2","trueBody":{"id":1018,"nodeType":"Block","src":"3737:33:2","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1015,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"3751:6:2","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$__$returns$__$","typeString":"function () pure"}},"id":1016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3751:8:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1017,"nodeType":"ExpressionStatement","src":"3751:8:2"}]}}]},"id":1021,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_sign","nameLocation":"3267:10:2","nodeType":"FunctionDefinition","parameters":{"id":958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":953,"mutability":"mutable","name":"message","nameLocation":"3286:7:2","nodeType":"VariableDeclaration","scope":1021,"src":"3278:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":952,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3278:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":955,"mutability":"mutable","name":"k","nameLocation":"3303:1:2","nodeType":"VariableDeclaration","scope":1021,"src":"3295:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":954,"name":"uint256","nodeType":"ElementaryTypeName","src":"3295:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":957,"mutability":"mutable","name":"kpriv","nameLocation":"3315:5:2","nodeType":"VariableDeclaration","scope":1021,"src":"3307:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":956,"name":"uint256","nodeType":"ElementaryTypeName","src":"3307:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3277:44:2"},"returnParameters":{"id":963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":960,"mutability":"mutable","name":"r","nameLocation":"3352:1:2","nodeType":"VariableDeclaration","scope":1021,"src":"3344:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":959,"name":"uint256","nodeType":"ElementaryTypeName","src":"3344:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":962,"mutability":"mutable","name":"s","nameLocation":"3363:1:2","nodeType":"VariableDeclaration","scope":1021,"src":"3355:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":961,"name":"uint256","nodeType":"ElementaryTypeName","src":"3355:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3343:22:2"},"scope":1466,"src":"3258:520:2","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1069,"nodeType":"Block","src":"3972:377:2","statements":[{"expression":{"id":1038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1030,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1026,"src":"3991:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":1033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4030:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":1034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4032:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":1035,"name":"kpriv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1023,"src":"4035:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":1036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4042:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":1031,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"3993:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4009:20:2","memberName":"ecZZ_mulmuladd_S_asm","nodeType":"MemberAccess","referencedDeclaration":2355,"src":"3993:36:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256)"}},"id":1037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3993:51:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3991:53:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1039,"nodeType":"ExpressionStatement","src":"3991:53:2"},{"expression":{"id":1046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1040,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1028,"src":"4116:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1043,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1026,"src":"4148:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":1044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4151:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":1041,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"4118:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4134:13:2","memberName":"ec_Decompress","nodeType":"MemberAccess","referencedDeclaration":1914,"src":"4118:29:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":1045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4118:35:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4116:37:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1047,"nodeType":"ExpressionStatement","src":"4116:37:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1050,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1026,"src":"4212:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1051,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1028,"src":"4215:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1052,"name":"kpriv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1023,"src":"4218:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1056,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":1053,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"4225:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1054,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4241:1:2","memberName":"n","nodeType":"MemberAccess","referencedDeclaration":1489,"src":"4225:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":1055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4245:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4225:21:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1048,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"4175:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4191:20:2","memberName":"ecZZ_mulmuladd_S_asm","nodeType":"MemberAccess","referencedDeclaration":2355,"src":"4175:36:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256)"}},"id":1057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4175:72:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":1058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4251:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4175:77:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1068,"nodeType":"IfStatement","src":"4171:163:2","trueBody":{"id":1067,"nodeType":"Block","src":"4288:46:2","statements":[{"expression":{"id":1065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1060,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1028,"src":"4302:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1061,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"4304:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4320:1:2","memberName":"p","nodeType":"MemberAccess","referencedDeclaration":1474,"src":"4304:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1063,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1028,"src":"4322:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4304:19:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4302:21:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1066,"nodeType":"ExpressionStatement","src":"4302:21:2"}]}}]},"id":1070,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_derivKpub","nameLocation":"3893:15:2","nodeType":"FunctionDefinition","parameters":{"id":1024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1023,"mutability":"mutable","name":"kpriv","nameLocation":"3917:5:2","nodeType":"VariableDeclaration","scope":1070,"src":"3909:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1022,"name":"uint256","nodeType":"ElementaryTypeName","src":"3909:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3908:15:2"},"returnParameters":{"id":1029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1026,"mutability":"mutable","name":"x","nameLocation":"3954:1:2","nodeType":"VariableDeclaration","scope":1070,"src":"3946:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1025,"name":"uint256","nodeType":"ElementaryTypeName","src":"3946:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1028,"mutability":"mutable","name":"y","nameLocation":"3965:1:2","nodeType":"VariableDeclaration","scope":1070,"src":"3957:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1027,"name":"uint256","nodeType":"ElementaryTypeName","src":"3957:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3945:22:2"},"scope":1466,"src":"3884:465:2","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1464,"nodeType":"Block","src":"4502:1697:2","statements":[{"assignments":[1090],"declarations":[{"constant":false,"id":1090,"mutability":"mutable","name":"Pow64_PQ","nameLocation":"4532:8:2","nodeType":"VariableDeclaration","scope":1464,"src":"4514:26:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2][8]"},"typeName":{"baseType":{"baseType":{"id":1087,"name":"uint","nodeType":"ElementaryTypeName","src":"4514:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1088,"length":{"hexValue":"32","id":1085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4519:1:2","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"4514:7:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"id":1089,"length":{"hexValue":"38","id":1086,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4522:1:2","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"ArrayTypeName","src":"4514:10:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_storage_$8_storage_ptr","typeString":"uint256[2][8]"}},"visibility":"internal"}],"id":1091,"nodeType":"VariableDeclarationStatement","src":"4514:26:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1092,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1072,"src":"4658:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":1093,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"4662:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1094,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4678:2:2","memberName":"gx","nodeType":"MemberAccess","referencedDeclaration":1483,"src":"4662:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4658:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1100,"nodeType":"IfStatement","src":"4655:58:2","trueBody":{"id":1099,"nodeType":"Block","src":"4687:26:2","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1096,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4697:6:2","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$__$returns$__$","typeString":"function () pure"}},"id":1097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4697:8:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1098,"nodeType":"ExpressionStatement","src":"4697:8:2"}]}},{"expression":{"id":1108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1101,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"4719:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1104,"indexExpression":{"hexValue":"30","id":1102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4728:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4719:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1105,"indexExpression":{"hexValue":"30","id":1103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4731:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4719:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":1106,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"4734:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1107,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4750:2:2","memberName":"gx","nodeType":"MemberAccess","referencedDeclaration":1483,"src":"4734:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4719:33:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1109,"nodeType":"ExpressionStatement","src":"4719:33:2"},{"expression":{"id":1117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1110,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"4759:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1113,"indexExpression":{"hexValue":"30","id":1111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4768:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4759:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1114,"indexExpression":{"hexValue":"31","id":1112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4771:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4759:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":1115,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"4774:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4790:2:2","memberName":"gy","nodeType":"MemberAccess","referencedDeclaration":1486,"src":"4774:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4759:33:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1118,"nodeType":"ExpressionStatement","src":"4759:33:2"},{"expression":{"id":1125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1119,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"4804:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1122,"indexExpression":{"hexValue":"34","id":1120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4813:1:2","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4804:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1123,"indexExpression":{"hexValue":"30","id":1121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4816:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4804:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1124,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1072,"src":"4819:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4804:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1126,"nodeType":"ExpressionStatement","src":"4804:17:2"},{"expression":{"id":1133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1127,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"4828:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1130,"indexExpression":{"hexValue":"34","id":1128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4837:1:2","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4828:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1131,"indexExpression":{"hexValue":"31","id":1129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4840:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4828:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1132,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1074,"src":"4843:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4828:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1134,"nodeType":"ExpressionStatement","src":"4828:17:2"},{"body":{"id":1357,"nodeType":"Block","src":"4945:827:2","statements":[{"assignments":[1146],"declarations":[{"constant":false,"id":1146,"mutability":"mutable","name":"x","nameLocation":"4963:1:2","nodeType":"VariableDeclaration","scope":1357,"src":"4955:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1145,"name":"uint256","nodeType":"ElementaryTypeName","src":"4955:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1147,"nodeType":"VariableDeclarationStatement","src":"4955:9:2"},{"assignments":[1149],"declarations":[{"constant":false,"id":1149,"mutability":"mutable","name":"y","nameLocation":"4982:1:2","nodeType":"VariableDeclaration","scope":1357,"src":"4974:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1148,"name":"uint256","nodeType":"ElementaryTypeName","src":"4974:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1150,"nodeType":"VariableDeclarationStatement","src":"4974:9:2"},{"assignments":[1152],"declarations":[{"constant":false,"id":1152,"mutability":"mutable","name":"zz","nameLocation":"5001:2:2","nodeType":"VariableDeclaration","scope":1357,"src":"4993:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1151,"name":"uint256","nodeType":"ElementaryTypeName","src":"4993:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1153,"nodeType":"VariableDeclarationStatement","src":"4993:10:2"},{"assignments":[1155],"declarations":[{"constant":false,"id":1155,"mutability":"mutable","name":"zzz","nameLocation":"5021:3:2","nodeType":"VariableDeclaration","scope":1357,"src":"5013:11:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1154,"name":"uint256","nodeType":"ElementaryTypeName","src":"5013:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1156,"nodeType":"VariableDeclarationStatement","src":"5013:11:2"},{"expression":{"id":1181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":1157,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"5043:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1158,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1149,"src":"5045:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1159,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1152,"src":"5047:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1160,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"5050:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1161,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5042:12:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"baseExpression":{"id":1164,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5080:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1168,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1165,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5089:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":1166,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5091:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5089:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5080:13:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1170,"indexExpression":{"hexValue":"30","id":1169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5094:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5080:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1171,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5100:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1175,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1172,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5109:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":1173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5111:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5109:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5100:13:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1177,"indexExpression":{"hexValue":"31","id":1176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5114:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5100:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":1178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5118:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"31","id":1179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5121:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":1162,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5055:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5071:8:2","memberName":"ecZZ_Dbl","nodeType":"MemberAccess","referencedDeclaration":1998,"src":"5055:24:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256)"}},"id":1180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5055:68:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"5042:81:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1182,"nodeType":"ExpressionStatement","src":"5042:81:2"},{"expression":{"id":1201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"baseExpression":{"id":1183,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5133:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1186,"indexExpression":{"id":1184,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5142:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5133:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1187,"indexExpression":{"hexValue":"30","id":1185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5133:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1188,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5151:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1190,"indexExpression":{"id":1189,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5160:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5151:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1192,"indexExpression":{"hexValue":"31","id":1191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5163:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5151:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1193,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5132:34:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1196,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"5195:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1197,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1149,"src":"5197:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1198,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1152,"src":"5199:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1199,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"5202:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1194,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5167:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5183:11:2","memberName":"ecZZ_SetAff","nodeType":"MemberAccess","referencedDeclaration":1969,"src":"5167:27:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":1200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5167:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"5132:74:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1202,"nodeType":"ExpressionStatement","src":"5132:74:2"},{"expression":{"id":1227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":1203,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"5217:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1204,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1149,"src":"5219:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1205,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1152,"src":"5221:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1206,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"5224:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1207,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5216:12:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"baseExpression":{"id":1210,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5254:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1214,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1211,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5263:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"33","id":1212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5265:1:2","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"5263:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5254:13:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1216,"indexExpression":{"hexValue":"30","id":1215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5268:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5254:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1217,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5274:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1221,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1218,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5283:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"33","id":1219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5285:1:2","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"5283:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5274:13:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1223,"indexExpression":{"hexValue":"31","id":1222,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5288:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5274:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":1224,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5292:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"31","id":1225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5295:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":1208,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5229:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5245:8:2","memberName":"ecZZ_Dbl","nodeType":"MemberAccess","referencedDeclaration":1998,"src":"5229:24:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256)"}},"id":1226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5229:68:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"5216:81:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1228,"nodeType":"ExpressionStatement","src":"5216:81:2"},{"expression":{"id":1251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"baseExpression":{"id":1229,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5306:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1234,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1230,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5315:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"34","id":1231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5317:1:2","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"5315:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5306:13:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1235,"indexExpression":{"hexValue":"30","id":1233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5320:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5306:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1236,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5326:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1240,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1237,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5335:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"34","id":1238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5337:1:2","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"5335:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5326:13:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1242,"indexExpression":{"hexValue":"31","id":1241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5340:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5326:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1243,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5305:38:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1246,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"5372:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1247,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1149,"src":"5374:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1248,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1152,"src":"5376:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1249,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"5379:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1244,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5344:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5360:11:2","memberName":"ecZZ_SetAff","nodeType":"MemberAccess","referencedDeclaration":1969,"src":"5344:27:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":1250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5344:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"5305:78:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1252,"nodeType":"ExpressionStatement","src":"5305:78:2"},{"body":{"id":1355,"nodeType":"Block","src":"5414:351:2","statements":[{"expression":{"id":1283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":1263,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"5423:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1264,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1149,"src":"5425:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1265,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1152,"src":"5427:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1266,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"5430:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1267,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5422:12:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"baseExpression":{"id":1270,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5460:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1272,"indexExpression":{"id":1271,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5469:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5460:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1274,"indexExpression":{"hexValue":"30","id":1273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5472:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5460:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1275,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5478:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1277,"indexExpression":{"id":1276,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5487:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5478:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1279,"indexExpression":{"hexValue":"31","id":1278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5490:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5478:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":1280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5493:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"31","id":1281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5495:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":1268,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5435:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5451:8:2","memberName":"ecZZ_Dbl","nodeType":"MemberAccess","referencedDeclaration":1998,"src":"5435:24:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256)"}},"id":1282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5435:62:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"5422:75:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1284,"nodeType":"ExpressionStatement","src":"5422:75:2"},{"expression":{"id":1303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"baseExpression":{"id":1285,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5508:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1288,"indexExpression":{"id":1286,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5517:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5508:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1289,"indexExpression":{"hexValue":"30","id":1287,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5520:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5508:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1290,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5526:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1292,"indexExpression":{"id":1291,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5535:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5526:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1294,"indexExpression":{"hexValue":"31","id":1293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5538:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5526:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1295,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5507:34:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1298,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"5570:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1299,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1149,"src":"5572:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1300,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1152,"src":"5574:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1301,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"5577:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1296,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5542:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5558:11:2","memberName":"ecZZ_SetAff","nodeType":"MemberAccess","referencedDeclaration":1969,"src":"5542:27:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":1302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5542:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"5507:74:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1304,"nodeType":"ExpressionStatement","src":"5507:74:2"},{"expression":{"id":1329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":1305,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"5590:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1306,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1149,"src":"5592:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1307,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1152,"src":"5594:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1308,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"5597:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1309,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5589:12:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"baseExpression":{"id":1312,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5627:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1316,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1313,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5636:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"34","id":1314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5638:1:2","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"5636:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5627:13:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1318,"indexExpression":{"hexValue":"30","id":1317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5641:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5627:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1319,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5647:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1323,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1320,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5656:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"34","id":1321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5658:1:2","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"5656:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5647:13:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1325,"indexExpression":{"hexValue":"31","id":1324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5661:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5647:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":1326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5664:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"31","id":1327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5666:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":1310,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5602:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5618:8:2","memberName":"ecZZ_Dbl","nodeType":"MemberAccess","referencedDeclaration":1998,"src":"5602:24:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256)"}},"id":1328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5602:66:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"5589:79:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1330,"nodeType":"ExpressionStatement","src":"5589:79:2"},{"expression":{"id":1353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"baseExpression":{"id":1331,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5679:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1336,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1332,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5688:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"34","id":1333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5690:1:2","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"5688:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5679:13:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1337,"indexExpression":{"hexValue":"30","id":1335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5693:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5679:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1338,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"5699:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1342,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1339,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"5708:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"34","id":1340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5710:1:2","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"5708:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5699:13:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1344,"indexExpression":{"hexValue":"31","id":1343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5713:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5699:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1345,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5678:38:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1348,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"5745:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1349,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1149,"src":"5747:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1350,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1152,"src":"5749:2:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1351,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"5752:3:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1346,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5717:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5733:11:2","memberName":"ecZZ_SetAff","nodeType":"MemberAccess","referencedDeclaration":1969,"src":"5717:27:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":1352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5717:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"5678:78:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1354,"nodeType":"ExpressionStatement","src":"5678:78:2"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1257,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1254,"src":"5405:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3633","id":1258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5407:2:2","typeDescriptions":{"typeIdentifier":"t_rational_63_by_1","typeString":"int_const 63"},"value":"63"},"src":"5405:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1356,"initializationExpression":{"assignments":[1254],"declarations":[{"constant":false,"id":1254,"mutability":"mutable","name":"i","nameLocation":"5401:1:2","nodeType":"VariableDeclaration","scope":1356,"src":"5396:6:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1253,"name":"uint","nodeType":"ElementaryTypeName","src":"5396:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1256,"initialValue":{"hexValue":"30","id":1255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5403:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5396:8:2"},"loopExpression":{"expression":{"id":1261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5410:3:2","subExpression":{"id":1260,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1254,"src":"5410:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1262,"nodeType":"ExpressionStatement","src":"5410:3:2"},"nodeType":"ForStatement","src":"5392:373:2"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1139,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"4937:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"34","id":1140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4939:1:2","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"4937:3:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1358,"initializationExpression":{"assignments":[1136],"declarations":[{"constant":false,"id":1136,"mutability":"mutable","name":"j","nameLocation":"4933:1:2","nodeType":"VariableDeclaration","scope":1358,"src":"4928:6:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1135,"name":"uint","nodeType":"ElementaryTypeName","src":"4928:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1138,"initialValue":{"hexValue":"31","id":1137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4935:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"4928:8:2"},"loopExpression":{"expression":{"id":1143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4941:3:2","subExpression":{"id":1142,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"4941:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1144,"nodeType":"ExpressionStatement","src":"4941:3:2"},"nodeType":"ForStatement","src":"4924:848:2"},{"expression":{"id":1365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1359,"name":"Prec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1081,"src":"5809:4:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$256_memory_ptr","typeString":"uint256[2] memory[256] memory"}},"id":1362,"indexExpression":{"hexValue":"30","id":1360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5814:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5809:7:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1363,"indexExpression":{"hexValue":"30","id":1361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5817:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5809:10:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":1364,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5820:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5809:12:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1366,"nodeType":"ExpressionStatement","src":"5809:12:2"},{"expression":{"id":1373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1367,"name":"Prec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1081,"src":"5828:4:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$256_memory_ptr","typeString":"uint256[2] memory[256] memory"}},"id":1370,"indexExpression":{"hexValue":"30","id":1368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5833:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5828:7:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1371,"indexExpression":{"hexValue":"31","id":1369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5836:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5828:10:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":1372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5839:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5828:12:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1374,"nodeType":"ExpressionStatement","src":"5828:12:2"},{"body":{"id":1460,"nodeType":"Block","src":"5889:286:2","statements":[{"expression":{"id":1391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1385,"name":"Prec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1081,"src":"5906:4:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$256_memory_ptr","typeString":"uint256[2] memory[256] memory"}},"id":1388,"indexExpression":{"id":1386,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1376,"src":"5911:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5906:7:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1389,"indexExpression":{"hexValue":"30","id":1387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5914:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5906:10:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":1390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5917:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5906:12:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1392,"nodeType":"ExpressionStatement","src":"5906:12:2"},{"expression":{"id":1399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1393,"name":"Prec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1081,"src":"5928:4:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$256_memory_ptr","typeString":"uint256[2] memory[256] memory"}},"id":1396,"indexExpression":{"id":1394,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1376,"src":"5933:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5928:7:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1397,"indexExpression":{"hexValue":"31","id":1395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5936:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5928:10:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":1398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5939:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5928:12:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1400,"nodeType":"ExpressionStatement","src":"5928:12:2"},{"body":{"id":1458,"nodeType":"Block","src":"5989:169:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1411,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1376,"src":"6005:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":1412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6008:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":1413,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1402,"src":"6011:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6008:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1415,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6007:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6005:8:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1417,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6004:10:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":1418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6016:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6004:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1457,"nodeType":"IfStatement","src":"6000:148:2","trueBody":{"id":1456,"nodeType":"Block","src":"6018:130:2","statements":[{"expression":{"id":1454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"baseExpression":{"id":1420,"name":"Prec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1081,"src":"6031:4:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$256_memory_ptr","typeString":"uint256[2] memory[256] memory"}},"id":1423,"indexExpression":{"id":1421,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1376,"src":"6036:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6031:7:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1424,"indexExpression":{"hexValue":"30","id":1422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6039:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6031:10:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1425,"name":"Prec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1081,"src":"6043:4:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$256_memory_ptr","typeString":"uint256[2] memory[256] memory"}},"id":1427,"indexExpression":{"id":1426,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1376,"src":"6048:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6043:7:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1429,"indexExpression":{"hexValue":"31","id":1428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6051:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6043:10:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1430,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6030:24:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"baseExpression":{"id":1433,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"6081:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1435,"indexExpression":{"id":1434,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1402,"src":"6090:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6081:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1437,"indexExpression":{"hexValue":"30","id":1436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6093:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6081:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1438,"name":"Pow64_PQ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"6097:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$8_memory_ptr","typeString":"uint256[2] memory[8] memory"}},"id":1440,"indexExpression":{"id":1439,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1402,"src":"6106:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6097:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1442,"indexExpression":{"hexValue":"31","id":1441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6109:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6097:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1443,"name":"Prec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1081,"src":"6113:4:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$256_memory_ptr","typeString":"uint256[2] memory[256] memory"}},"id":1445,"indexExpression":{"id":1444,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1376,"src":"6118:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6113:7:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1447,"indexExpression":{"hexValue":"30","id":1446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6121:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6113:10:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"baseExpression":{"id":1448,"name":"Prec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1081,"src":"6125:4:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$256_memory_ptr","typeString":"uint256[2] memory[256] memory"}},"id":1450,"indexExpression":{"id":1449,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1376,"src":"6130:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6125:7:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1452,"indexExpression":{"hexValue":"31","id":1451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6133:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6125:10:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1431,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"6055:15:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$2797_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":1432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6071:9:2","memberName":"ecAff_add","nodeType":"MemberAccess","referencedDeclaration":2271,"src":"6055:25:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":1453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6055:81:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"6030:106:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1455,"nodeType":"ExpressionStatement","src":"6030:106:2"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1405,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1402,"src":"5972:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"38","id":1406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5974:1:2","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"5972:3:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1459,"initializationExpression":{"assignments":[1402],"declarations":[{"constant":false,"id":1402,"mutability":"mutable","name":"j","nameLocation":"5968:1:2","nodeType":"VariableDeclaration","scope":1459,"src":"5963:6:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1401,"name":"uint","nodeType":"ElementaryTypeName","src":"5963:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1404,"initialValue":{"hexValue":"30","id":1403,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5970:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5963:8:2"},"loopExpression":{"expression":{"id":1409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5976:3:2","subExpression":{"id":1408,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1402,"src":"5976:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1410,"nodeType":"ExpressionStatement","src":"5976:3:2"},"nodeType":"ForStatement","src":"5959:199:2"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1379,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1376,"src":"5873:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"323536","id":1380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5875:3:2","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"src":"5873:5:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1461,"initializationExpression":{"assignments":[1376],"declarations":[{"constant":false,"id":1376,"mutability":"mutable","name":"i","nameLocation":"5869:1:2","nodeType":"VariableDeclaration","scope":1461,"src":"5864:6:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1375,"name":"uint","nodeType":"ElementaryTypeName","src":"5864:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1378,"initialValue":{"hexValue":"31","id":1377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5871:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"5864:8:2"},"loopExpression":{"expression":{"id":1383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5879:3:2","subExpression":{"id":1382,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1376,"src":"5879:1:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1384,"nodeType":"ExpressionStatement","src":"5879:3:2"},"nodeType":"ForStatement","src":"5860:315:2"},{"expression":{"id":1462,"name":"Prec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1081,"src":"6188:4:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$256_memory_ptr","typeString":"uint256[2] memory[256] memory"}},"functionReturnParameters":1082,"id":1463,"nodeType":"Return","src":"6181:11:2"}]},"id":1465,"implemented":true,"kind":"function","modifiers":[],"name":"Precalc_8dim","nameLocation":"4411:12:2","nodeType":"FunctionDefinition","parameters":{"id":1075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1072,"mutability":"mutable","name":"Qx","nameLocation":"4433:2:2","nodeType":"VariableDeclaration","scope":1465,"src":"4425:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1071,"name":"uint256","nodeType":"ElementaryTypeName","src":"4425:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1074,"mutability":"mutable","name":"Qy","nameLocation":"4445:2:2","nodeType":"VariableDeclaration","scope":1465,"src":"4437:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1073,"name":"uint256","nodeType":"ElementaryTypeName","src":"4437:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4423:25:2"},"returnParameters":{"id":1082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1081,"mutability":"mutable","name":"Prec","nameLocation":"4492:4:2","nodeType":"VariableDeclaration","scope":1465,"src":"4472:24:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_memory_ptr_$256_memory_ptr","typeString":"uint256[2][256]"},"typeName":{"baseType":{"baseType":{"id":1076,"name":"uint","nodeType":"ElementaryTypeName","src":"4472:4:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1078,"length":{"hexValue":"32","id":1077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4477:1:2","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"4472:7:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"id":1080,"length":{"hexValue":"323536","id":1079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4480:3:2","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"ArrayTypeName","src":"4472:12:2","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_uint256_$2_storage_$256_storage_ptr","typeString":"uint256[2][256]"}},"visibility":"internal"}],"src":"4470:27:2"},"scope":1466,"src":"4402:1797:2","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":1467,"src":"1218:4984:2","usedErrors":[],"usedEvents":[]}],"src":"1128:5075:2"},"id":2},"FreshCryptoLib/FCL_elliptic.sol":{"ast":{"absolutePath":"FreshCryptoLib/FCL_elliptic.sol","exportedSymbols":{"FCL_Elliptic_ZZ":[2797]},"id":2798,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1468,"literals":["solidity",">=","0.8",".19","<","0.9",".0"],"nodeType":"PragmaDirective","src":"1186:32:3"},{"abstract":false,"baseContracts":[],"canonicalName":"FCL_Elliptic_ZZ","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":2797,"linearizedBaseContracts":[2797],"name":"FCL_Elliptic_ZZ","nameLocation":"1228:15:3","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":1471,"mutability":"constant","name":"MODEXP_PRECOMPILE","nameLocation":"1410:17:3","nodeType":"VariableDeclaration","scope":2797,"src":"1393:79:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1469,"name":"address","nodeType":"ElementaryTypeName","src":"1393:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303035","id":1470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1430:42:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x0000000000000000000000000000000000000005"},"visibility":"internal"},{"constant":true,"id":1474,"mutability":"constant","name":"p","nameLocation":"1527:1:3","nodeType":"VariableDeclaration","scope":2797,"src":"1510:87:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1472,"name":"uint256","nodeType":"ElementaryTypeName","src":"1510:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303031303030303030303030303030303030303030303030303030464646464646464646464646464646464646464646464646","id":1473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1531:66:3","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248762697446949407573530086143415290314195533631308867097853951_by_1","typeString":"int_const 1157...(70 digits omitted)...3951"},"value":"0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":1477,"mutability":"constant","name":"a","nameLocation":"1662:1:3","nodeType":"VariableDeclaration","scope":2797,"src":"1645:87:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1475,"name":"uint256","nodeType":"ElementaryTypeName","src":"1645:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303031303030303030303030303030303030303030303030303030464646464646464646464646464646464646464646464643","id":1476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1666:66:3","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248762697446949407573530086143415290314195533631308867097853948_by_1","typeString":"int_const 1157...(70 digits omitted)...3948"},"value":"0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"},"visibility":"internal"},{"constant":true,"id":1480,"mutability":"constant","name":"b","nameLocation":"1798:1:3","nodeType":"VariableDeclaration","scope":2797,"src":"1781:87:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1478,"name":"uint256","nodeType":"ElementaryTypeName","src":"1781:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307835414336333544384141334139334537423345424244353537363938383642433635314430364230434335334230463633424345334333453237443236303442","id":1479,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1802:66:3","typeDescriptions":{"typeIdentifier":"t_rational_41058363725152142129326129780047268409114441015993725554835256314039467401291_by_1","typeString":"int_const 4105...(69 digits omitted)...1291"},"value":"0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"},"visibility":"internal"},{"constant":true,"id":1483,"mutability":"constant","name":"gx","nameLocation":"1933:2:3","nodeType":"VariableDeclaration","scope":2797,"src":"1916:88:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1481,"name":"uint256","nodeType":"ElementaryTypeName","src":"1916:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307836423137443146324531324334323437463842434536453536334134343046323737303337443831324445423333413046344131333934354438393843323936","id":1482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1938:66:3","typeDescriptions":{"typeIdentifier":"t_rational_48439561293906451759052585252797914202762949526041747995844080717082404635286_by_1","typeString":"int_const 4843...(69 digits omitted)...5286"},"value":"0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296"},"visibility":"internal"},{"constant":true,"id":1486,"mutability":"constant","name":"gy","nameLocation":"2027:2:3","nodeType":"VariableDeclaration","scope":2797,"src":"2010:88:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1484,"name":"uint256","nodeType":"ElementaryTypeName","src":"2010:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307834464533343245324645314137463942384545374542344137433046394531363242434533333537364233313545434543424236343036383337424635314635","id":1485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2032:66:3","typeDescriptions":{"typeIdentifier":"t_rational_36134250956749795798585127919587881956611106672985015071877198253568414405109_by_1","typeString":"int_const 3613...(69 digits omitted)...5109"},"value":"0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5"},"visibility":"internal"},{"constant":true,"id":1489,"mutability":"constant","name":"n","nameLocation":"2158:1:3","nodeType":"VariableDeclaration","scope":2797,"src":"2141:87:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1487,"name":"uint256","nodeType":"ElementaryTypeName","src":"2141:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303030464646464646464646464646464646464243453646414144413731373945383446334239434143324643363332353531","id":1488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2162:66:3","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248762697446949407573529996955224135760342422259061068512044369_by_1","typeString":"int_const 1157...(70 digits omitted)...4369"},"value":"0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"},"visibility":"internal"},{"constant":true,"id":1492,"mutability":"constant","name":"minus_2","nameLocation":"2336:7:3","nodeType":"VariableDeclaration","scope":2797,"src":"2319:93:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1490,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303031303030303030303030303030303030303030303030303030464646464646464646464646464646464646464646464644","id":1491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2346:66:3","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248762697446949407573530086143415290314195533631308867097853949_by_1","typeString":"int_const 1157...(70 digits omitted)...3949"},"value":"0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD"},"visibility":"internal"},{"constant":true,"id":1495,"mutability":"constant","name":"minus_2modn","nameLocation":"2490:11:3","nodeType":"VariableDeclaration","scope":2797,"src":"2473:97:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1493,"name":"uint256","nodeType":"ElementaryTypeName","src":"2473:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303030464646464646464646464646464646464243453646414144413731373945383446334239434143324643363332353446","id":1494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2504:66:3","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248762697446949407573529996955224135760342422259061068512044367_by_1","typeString":"int_const 1157...(70 digits omitted)...4367"},"value":"0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F"},"visibility":"internal"},{"constant":true,"id":1498,"mutability":"constant","name":"minus_1","nameLocation":"2594:7:3","nodeType":"VariableDeclaration","scope":2797,"src":"2577:93:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1496,"name":"uint256","nodeType":"ElementaryTypeName","src":"2577:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646","id":1497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2604:66:3","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1","typeString":"int_const 1157...(70 digits omitted)...9935"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":1501,"mutability":"constant","name":"pp1div4","nameLocation":"2709:7:3","nodeType":"VariableDeclaration","scope":2797,"src":"2692:91:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1499,"name":"uint256","nodeType":"ElementaryTypeName","src":"2692:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307833666666666666666330303030303030343030303030303030303030303030303030303030303030343030303030303030303030303030303030303030303030","id":1500,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2717:66:3","typeDescriptions":{"typeIdentifier":"t_rational_28948022302589062190674361737351893382521535853822578548883407827216774463488_by_1","typeString":"int_const 2894...(69 digits omitted)...3488"},"value":"0x3fffffffc0000000400000000000000000000000400000000000000000000000"},"visibility":"internal"},{"constant":true,"id":1504,"mutability":"constant","name":"_NOTSQUARE","nameLocation":"2867:10:3","nodeType":"VariableDeclaration","scope":2797,"src":"2850:94:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1502,"name":"uint256","nodeType":"ElementaryTypeName","src":"2850:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303032303030303030303030303030303030303030303030303030464646464646464646464646464646464646464646464646","id":1503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2878:66:3","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248768974548684794254293921932838497980611635986753331132366847_by_1","typeString":"int_const 1157...(70 digits omitted)...6847"},"value":"0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":1507,"mutability":"constant","name":"_NOTONCURVE","nameLocation":"2967:11:3","nodeType":"VariableDeclaration","scope":2797,"src":"2950:95:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1505,"name":"uint256","nodeType":"ElementaryTypeName","src":"2950:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303033303030303030303030303030303030303030303030303030464646464646464646464646464646464646464646464646","id":1506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2979:66:3","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248775251650420180935057757722261705647027738342197795166879743_by_1","typeString":"int_const 1157...(70 digits omitted)...9743"},"value":"0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"body":{"id":1516,"nodeType":"Block","src":"3225:663:3","statements":[{"AST":{"nodeType":"YulBlock","src":"3244:638:3","statements":[{"nodeType":"YulVariableDeclaration","src":"3258:26:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3279:4:3","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3273:5:3"},"nodeType":"YulFunctionCall","src":"3273:11:3"},"variables":[{"name":"pointer","nodeType":"YulTypedName","src":"3262:7:3","type":""}]},{"expression":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3381:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"3390:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3374:6:3"},"nodeType":"YulFunctionCall","src":"3374:21:3"},"nodeType":"YulExpressionStatement","src":"3374:21:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3419:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"3428:4:3","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3415:3:3"},"nodeType":"YulFunctionCall","src":"3415:18:3"},{"kind":"number","nodeType":"YulLiteral","src":"3435:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3408:6:3"},"nodeType":"YulFunctionCall","src":"3408:32:3"},"nodeType":"YulExpressionStatement","src":"3408:32:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3464:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"3473:4:3","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3460:3:3"},"nodeType":"YulFunctionCall","src":"3460:18:3"},{"kind":"number","nodeType":"YulLiteral","src":"3480:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3453:6:3"},"nodeType":"YulFunctionCall","src":"3453:32:3"},"nodeType":"YulExpressionStatement","src":"3453:32:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3568:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"3577:4:3","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3564:3:3"},"nodeType":"YulFunctionCall","src":"3564:18:3"},{"name":"u","nodeType":"YulIdentifier","src":"3584:1:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3557:6:3"},"nodeType":"YulFunctionCall","src":"3557:29:3"},"nodeType":"YulExpressionStatement","src":"3557:29:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3610:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"3619:4:3","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3606:3:3"},"nodeType":"YulFunctionCall","src":"3606:18:3"},{"name":"minus_2modn","nodeType":"YulIdentifier","src":"3626:11:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3599:6:3"},"nodeType":"YulFunctionCall","src":"3599:39:3"},"nodeType":"YulExpressionStatement","src":"3599:39:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3662:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"3671:4:3","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3658:3:3"},"nodeType":"YulFunctionCall","src":"3658:18:3"},{"name":"n","nodeType":"YulIdentifier","src":"3678:1:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3651:6:3"},"nodeType":"YulFunctionCall","src":"3651:29:3"},"nodeType":"YulExpressionStatement","src":"3651:29:3"},{"body":{"nodeType":"YulBlock","src":"3819:16:3","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3828:1:3","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3831:1:3","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3821:6:3"},"nodeType":"YulFunctionCall","src":"3821:12:3"},"nodeType":"YulExpressionStatement","src":"3821:12:3"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3778:1:3","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3774:3:3"},"nodeType":"YulFunctionCall","src":"3774:6:3"},{"kind":"number","nodeType":"YulLiteral","src":"3782:4:3","type":"","value":"0x05"},{"name":"pointer","nodeType":"YulIdentifier","src":"3788:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"3797:4:3","type":"","value":"0xc0"},{"name":"pointer","nodeType":"YulIdentifier","src":"3803:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"3812:4:3","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"3763:10:3"},"nodeType":"YulFunctionCall","src":"3763:54:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3756:6:3"},"nodeType":"YulFunctionCall","src":"3756:62:3"},"nodeType":"YulIf","src":"3753:82:3"},{"nodeType":"YulAssignment","src":"3848:24:3","value":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3864:7:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3858:5:3"},"nodeType":"YulFunctionCall","src":"3858:14:3"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"3848:6:3"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1495,"isOffset":false,"isSlot":false,"src":"3626:11:3","valueSize":1},{"declaration":1489,"isOffset":false,"isSlot":false,"src":"3678:1:3","valueSize":1},{"declaration":1513,"isOffset":false,"isSlot":false,"src":"3848:6:3","valueSize":1},{"declaration":1510,"isOffset":false,"isSlot":false,"src":"3584:1:3","valueSize":1}],"id":1515,"nodeType":"InlineAssembly","src":"3235:647:3"}]},"documentation":{"id":1508,"nodeType":"StructuredDocumentation","src":"3052:97:3","text":" /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem"},"id":1517,"implemented":true,"kind":"function","modifiers":[],"name":"FCL_nModInv","nameLocation":"3163:11:3","nodeType":"FunctionDefinition","parameters":{"id":1511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1510,"mutability":"mutable","name":"u","nameLocation":"3183:1:3","nodeType":"VariableDeclaration","scope":1517,"src":"3175:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1509,"name":"uint256","nodeType":"ElementaryTypeName","src":"3175:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3174:11:3"},"returnParameters":{"id":1514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1513,"mutability":"mutable","name":"result","nameLocation":"3217:6:3","nodeType":"VariableDeclaration","scope":1517,"src":"3209:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1512,"name":"uint256","nodeType":"ElementaryTypeName","src":"3209:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3208:16:3"},"scope":2797,"src":"3154:734:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1526,"nodeType":"Block","src":"4071:659:3","statements":[{"AST":{"nodeType":"YulBlock","src":"4090:634:3","statements":[{"nodeType":"YulVariableDeclaration","src":"4104:26:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4125:4:3","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4119:5:3"},"nodeType":"YulFunctionCall","src":"4119:11:3"},"variables":[{"name":"pointer","nodeType":"YulTypedName","src":"4108:7:3","type":""}]},{"expression":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4227:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"4236:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4220:6:3"},"nodeType":"YulFunctionCall","src":"4220:21:3"},"nodeType":"YulExpressionStatement","src":"4220:21:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4265:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"4274:4:3","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4261:3:3"},"nodeType":"YulFunctionCall","src":"4261:18:3"},{"kind":"number","nodeType":"YulLiteral","src":"4281:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4254:6:3"},"nodeType":"YulFunctionCall","src":"4254:32:3"},"nodeType":"YulExpressionStatement","src":"4254:32:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4310:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"4319:4:3","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4306:3:3"},"nodeType":"YulFunctionCall","src":"4306:18:3"},{"kind":"number","nodeType":"YulLiteral","src":"4326:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4299:6:3"},"nodeType":"YulFunctionCall","src":"4299:32:3"},"nodeType":"YulExpressionStatement","src":"4299:32:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4414:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"4423:4:3","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4410:3:3"},"nodeType":"YulFunctionCall","src":"4410:18:3"},{"name":"u","nodeType":"YulIdentifier","src":"4430:1:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4403:6:3"},"nodeType":"YulFunctionCall","src":"4403:29:3"},"nodeType":"YulExpressionStatement","src":"4403:29:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4456:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"4465:4:3","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4452:3:3"},"nodeType":"YulFunctionCall","src":"4452:18:3"},{"name":"minus_2","nodeType":"YulIdentifier","src":"4472:7:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4445:6:3"},"nodeType":"YulFunctionCall","src":"4445:35:3"},"nodeType":"YulExpressionStatement","src":"4445:35:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4504:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"4513:4:3","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4500:3:3"},"nodeType":"YulFunctionCall","src":"4500:18:3"},{"name":"p","nodeType":"YulIdentifier","src":"4520:1:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4493:6:3"},"nodeType":"YulFunctionCall","src":"4493:29:3"},"nodeType":"YulExpressionStatement","src":"4493:29:3"},{"body":{"nodeType":"YulBlock","src":"4661:16:3","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4670:1:3","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4673:1:3","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4663:6:3"},"nodeType":"YulFunctionCall","src":"4663:12:3"},"nodeType":"YulExpressionStatement","src":"4663:12:3"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4620:1:3","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4616:3:3"},"nodeType":"YulFunctionCall","src":"4616:6:3"},{"kind":"number","nodeType":"YulLiteral","src":"4624:4:3","type":"","value":"0x05"},{"name":"pointer","nodeType":"YulIdentifier","src":"4630:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"4639:4:3","type":"","value":"0xc0"},{"name":"pointer","nodeType":"YulIdentifier","src":"4645:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"4654:4:3","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"4605:10:3"},"nodeType":"YulFunctionCall","src":"4605:54:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4598:6:3"},"nodeType":"YulFunctionCall","src":"4598:62:3"},"nodeType":"YulIf","src":"4595:82:3"},{"nodeType":"YulAssignment","src":"4690:24:3","value":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4706:7:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4700:5:3"},"nodeType":"YulFunctionCall","src":"4700:14:3"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"4690:6:3"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1492,"isOffset":false,"isSlot":false,"src":"4472:7:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"4520:1:3","valueSize":1},{"declaration":1523,"isOffset":false,"isSlot":false,"src":"4690:6:3","valueSize":1},{"declaration":1520,"isOffset":false,"isSlot":false,"src":"4430:1:3","valueSize":1}],"id":1525,"nodeType":"InlineAssembly","src":"4081:643:3"}]},"documentation":{"id":1518,"nodeType":"StructuredDocumentation","src":"3893:101:3","text":" /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled"},"id":1527,"implemented":true,"kind":"function","modifiers":[],"name":"FCL_pModInv","nameLocation":"4009:11:3","nodeType":"FunctionDefinition","parameters":{"id":1521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1520,"mutability":"mutable","name":"u","nameLocation":"4029:1:3","nodeType":"VariableDeclaration","scope":1527,"src":"4021:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1519,"name":"uint256","nodeType":"ElementaryTypeName","src":"4021:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4020:11:3"},"returnParameters":{"id":1524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1523,"mutability":"mutable","name":"result","nameLocation":"4063:6:3","nodeType":"VariableDeclaration","scope":1527,"src":"4055:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1522,"name":"uint256","nodeType":"ElementaryTypeName","src":"4055:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4054:16:3"},"scope":2797,"src":"4000:730:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1602,"nodeType":"Block","src":"4972:318:3","statements":[{"assignments":[1549],"declarations":[{"constant":false,"id":1549,"mutability":"mutable","name":"alpha2","nameLocation":"4998:6:3","nodeType":"VariableDeclaration","scope":1602,"src":"4990:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1548,"name":"uint256","nodeType":"ElementaryTypeName","src":"4990:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1555,"initialValue":{"arguments":[{"id":1551,"name":"alpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1529,"src":"5012:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1552,"name":"alpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1529,"src":"5018:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1553,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5024:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1550,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5005:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5005:21:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4990:36:3"},{"expression":{"id":1562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1556,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1540,"src":"5044:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1558,"name":"alpha2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1549,"src":"5054:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1559,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1531,"src":"5062:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1560,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5064:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1557,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5047:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5047:19:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5044:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1563,"nodeType":"ExpressionStatement","src":"5044:22:3"},{"expression":{"id":1574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1564,"name":"y3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1542,"src":"5089:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":1567,"name":"alpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1529,"src":"5106:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1568,"name":"alpha2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1549,"src":"5113:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1569,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5120:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1566,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5099:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5099:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1571,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1533,"src":"5124:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1572,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5126:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1565,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5092:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5092:36:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5089:39:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1575,"nodeType":"ExpressionStatement","src":"5089:39:3"},{"expression":{"id":1582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1576,"name":"zz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1544,"src":"5139:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1578,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1535,"src":"5150:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1579,"name":"alpha2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1549,"src":"5153:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1580,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5160:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1577,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5143:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5143:19:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5139:23:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1583,"nodeType":"ExpressionStatement","src":"5139:23:3"},{"expression":{"id":1594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1584,"name":"zzz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1546,"src":"5184:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1586,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1537,"src":"5196:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":1588,"name":"alpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1529,"src":"5207:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1589,"name":"alpha2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1549,"src":"5214:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1590,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5221:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1587,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5200:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5200:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1592,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5224:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1585,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5189:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5189:37:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5184:42:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1595,"nodeType":"ExpressionStatement","src":"5184:42:3"},{"expression":{"components":[{"id":1596,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1540,"src":"5266:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1597,"name":"y3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1542,"src":"5270:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1598,"name":"zz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1544,"src":"5274:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1599,"name":"zzz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1546,"src":"5279:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1600,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5265:19:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"functionReturnParameters":1547,"id":1601,"nodeType":"Return","src":"5258:26:3"}]},"id":1603,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_Coronize","nameLocation":"4817:13:3","nodeType":"FunctionDefinition","parameters":{"id":1538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1529,"mutability":"mutable","name":"alpha","nameLocation":"4839:5:3","nodeType":"VariableDeclaration","scope":1603,"src":"4831:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1528,"name":"uint256","nodeType":"ElementaryTypeName","src":"4831:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1531,"mutability":"mutable","name":"x","nameLocation":"4854:1:3","nodeType":"VariableDeclaration","scope":1603,"src":"4846:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1530,"name":"uint256","nodeType":"ElementaryTypeName","src":"4846:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1533,"mutability":"mutable","name":"y","nameLocation":"4865:1:3","nodeType":"VariableDeclaration","scope":1603,"src":"4857:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1532,"name":"uint256","nodeType":"ElementaryTypeName","src":"4857:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1535,"mutability":"mutable","name":"zz","nameLocation":"4877:2:3","nodeType":"VariableDeclaration","scope":1603,"src":"4869:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1534,"name":"uint256","nodeType":"ElementaryTypeName","src":"4869:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1537,"mutability":"mutable","name":"zzz","nameLocation":"4889:3:3","nodeType":"VariableDeclaration","scope":1603,"src":"4881:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1536,"name":"uint256","nodeType":"ElementaryTypeName","src":"4881:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4830:63:3"},"returnParameters":{"id":1547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1540,"mutability":"mutable","name":"x3","nameLocation":"4926:2:3","nodeType":"VariableDeclaration","scope":1603,"src":"4918:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1539,"name":"uint256","nodeType":"ElementaryTypeName","src":"4918:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1542,"mutability":"mutable","name":"y3","nameLocation":"4938:2:3","nodeType":"VariableDeclaration","scope":1603,"src":"4930:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1541,"name":"uint256","nodeType":"ElementaryTypeName","src":"4930:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1544,"mutability":"mutable","name":"zz3","nameLocation":"4950:3:3","nodeType":"VariableDeclaration","scope":1603,"src":"4942:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1543,"name":"uint256","nodeType":"ElementaryTypeName","src":"4942:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1546,"mutability":"mutable","name":"zzz3","nameLocation":"4963:4:3","nodeType":"VariableDeclaration","scope":1603,"src":"4955:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1545,"name":"uint256","nodeType":"ElementaryTypeName","src":"4955:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4917:51:3"},"scope":2797,"src":"4808:482:3","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1782,"nodeType":"Block","src":"5491:757:3","statements":[{"assignments":[1631],"declarations":[{"constant":false,"id":1631,"mutability":"mutable","name":"u1","nameLocation":"5505:2:3","nodeType":"VariableDeclaration","scope":1782,"src":"5497:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1630,"name":"uint256","nodeType":"ElementaryTypeName","src":"5497:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1637,"initialValue":{"arguments":[{"id":1633,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1605,"src":"5515:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1634,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"5518:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1635,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5522:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1632,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5508:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5508:16:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5497:27:3"},{"assignments":[1639],"declarations":[{"constant":false,"id":1639,"mutability":"mutable","name":"u2","nameLocation":"5553:2:3","nodeType":"VariableDeclaration","scope":1782,"src":"5545:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1638,"name":"uint256","nodeType":"ElementaryTypeName","src":"5545:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1645,"initialValue":{"arguments":[{"id":1641,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1613,"src":"5563:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1642,"name":"zz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1609,"src":"5567:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1643,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5571:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1640,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5556:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5556:17:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5545:28:3"},{"expression":{"id":1654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1646,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1639,"src":"5609:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1648,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1639,"src":"5619:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1649,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5623:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1650,"name":"u1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1631,"src":"5625:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5623:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1652,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5629:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1647,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"5612:6:3","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5612:19:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5609:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1655,"nodeType":"ExpressionStatement","src":"5609:22:3"},{"expression":{"id":1662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1656,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1605,"src":"5650:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1658,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1639,"src":"5660:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1659,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1639,"src":"5664:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1660,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5668:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1657,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5653:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5653:17:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5650:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1663,"nodeType":"ExpressionStatement","src":"5650:20:3"},{"expression":{"id":1670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1664,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1613,"src":"5680:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1666,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1605,"src":"5690:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1667,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1639,"src":"5694:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1668,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5698:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1665,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5683:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5683:17:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5680:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1671,"nodeType":"ExpressionStatement","src":"5680:20:3"},{"expression":{"id":1682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1672,"name":"zz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"5716:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1674,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1605,"src":"5727:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":1676,"name":"zz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1609,"src":"5738:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1677,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"5743:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1678,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5748:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1675,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5731:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5731:19:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1680,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5751:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1673,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5720:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5720:33:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5716:37:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1683,"nodeType":"ExpressionStatement","src":"5716:37:3"},{"expression":{"id":1694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1684,"name":"zzz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1628,"src":"5779:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1686,"name":"zzz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1611,"src":"5791:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":1688,"name":"zzz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1619,"src":"5804:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1689,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1613,"src":"5810:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1690,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5814:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1687,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5797:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5797:19:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1692,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5817:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1685,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5784:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5784:35:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5779:40:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1695,"nodeType":"ExpressionStatement","src":"5779:40:3"},{"expression":{"id":1702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1696,"name":"zz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1609,"src":"5848:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1698,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1607,"src":"5859:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1699,"name":"zzz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1619,"src":"5863:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1700,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5868:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1697,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5852:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5852:18:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5848:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1703,"nodeType":"ExpressionStatement","src":"5848:22:3"},{"expression":{"id":1710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1704,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"5893:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1706,"name":"y2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1615,"src":"5904:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1707,"name":"zzz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1611,"src":"5908:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1708,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5914:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1705,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5897:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5897:19:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5893:23:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1711,"nodeType":"ExpressionStatement","src":"5893:23:3"},{"expression":{"id":1720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1712,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"5942:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1714,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"5953:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1715,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5958:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1716,"name":"zz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1609,"src":"5960:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5958:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1718,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"5965:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1713,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"5946:6:3","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5946:21:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5942:25:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1721,"nodeType":"ExpressionStatement","src":"5942:25:3"},{"expression":{"id":1728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1722,"name":"zzz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1611,"src":"5984:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1724,"name":"u1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1631,"src":"5996:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1725,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1605,"src":"6000:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1726,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6003:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1723,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5989:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5989:16:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5984:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1729,"nodeType":"ExpressionStatement","src":"5984:21:3"},{"expression":{"id":1750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1730,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1622,"src":"6023:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":1734,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"6048:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1735,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"6053:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1736,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6058:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1733,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"6041:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6041:19:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1738,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6062:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1739,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1613,"src":"6064:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6062:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1741,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6067:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1732,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"6034:6:3","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6034:35:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":1744,"name":"minus_2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1492,"src":"6078:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1745,"name":"zzz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1611,"src":"6087:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1746,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6092:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1743,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"6071:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6071:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1748,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6095:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1731,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"6027:6:3","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6027:70:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6023:74:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1751,"nodeType":"ExpressionStatement","src":"6023:74:3"},{"expression":{"id":1774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1752,"name":"y3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1624,"src":"6121:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":1755,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"6139:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":1757,"name":"zzz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1611,"src":"6151:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1758,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6157:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1759,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1622,"src":"6159:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6157:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1761,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6163:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1756,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"6144:6:3","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6144:21:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1763,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6166:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1754,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"6132:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6132:36:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1765,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6170:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":1767,"name":"zz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1609,"src":"6179:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1768,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1613,"src":"6184:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1769,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6188:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1766,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"6172:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6172:18:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6170:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1772,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"6191:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1753,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"6124:6:3","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6124:69:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6121:72:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1775,"nodeType":"ExpressionStatement","src":"6121:72:3"},{"expression":{"components":[{"id":1776,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1622,"src":"6225:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1777,"name":"y3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1624,"src":"6229:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1778,"name":"zz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"6233:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1779,"name":"zzz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1628,"src":"6238:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1780,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6224:19:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"functionReturnParameters":1629,"id":1781,"nodeType":"Return","src":"6217:26:3"}]},"id":1783,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_Add","nameLocation":"5303:8:3","nodeType":"FunctionDefinition","parameters":{"id":1620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1605,"mutability":"mutable","name":"x1","nameLocation":"5320:2:3","nodeType":"VariableDeclaration","scope":1783,"src":"5312:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1604,"name":"uint256","nodeType":"ElementaryTypeName","src":"5312:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1607,"mutability":"mutable","name":"y1","nameLocation":"5332:2:3","nodeType":"VariableDeclaration","scope":1783,"src":"5324:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1606,"name":"uint256","nodeType":"ElementaryTypeName","src":"5324:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1609,"mutability":"mutable","name":"zz1","nameLocation":"5344:3:3","nodeType":"VariableDeclaration","scope":1783,"src":"5336:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1608,"name":"uint256","nodeType":"ElementaryTypeName","src":"5336:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1611,"mutability":"mutable","name":"zzz1","nameLocation":"5357:4:3","nodeType":"VariableDeclaration","scope":1783,"src":"5349:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1610,"name":"uint256","nodeType":"ElementaryTypeName","src":"5349:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1613,"mutability":"mutable","name":"x2","nameLocation":"5371:2:3","nodeType":"VariableDeclaration","scope":1783,"src":"5363:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1612,"name":"uint256","nodeType":"ElementaryTypeName","src":"5363:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1615,"mutability":"mutable","name":"y2","nameLocation":"5383:2:3","nodeType":"VariableDeclaration","scope":1783,"src":"5375:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1614,"name":"uint256","nodeType":"ElementaryTypeName","src":"5375:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1617,"mutability":"mutable","name":"zz2","nameLocation":"5395:3:3","nodeType":"VariableDeclaration","scope":1783,"src":"5387:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1616,"name":"uint256","nodeType":"ElementaryTypeName","src":"5387:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1619,"mutability":"mutable","name":"zzz2","nameLocation":"5408:4:3","nodeType":"VariableDeclaration","scope":1783,"src":"5400:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1618,"name":"uint256","nodeType":"ElementaryTypeName","src":"5400:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5311:102:3"},"returnParameters":{"id":1629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1622,"mutability":"mutable","name":"x3","nameLocation":"5446:2:3","nodeType":"VariableDeclaration","scope":1783,"src":"5438:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1621,"name":"uint256","nodeType":"ElementaryTypeName","src":"5438:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1624,"mutability":"mutable","name":"y3","nameLocation":"5458:2:3","nodeType":"VariableDeclaration","scope":1783,"src":"5450:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1623,"name":"uint256","nodeType":"ElementaryTypeName","src":"5450:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1626,"mutability":"mutable","name":"zz3","nameLocation":"5470:3:3","nodeType":"VariableDeclaration","scope":1783,"src":"5462:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1625,"name":"uint256","nodeType":"ElementaryTypeName","src":"5462:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1628,"mutability":"mutable","name":"zzz3","nameLocation":"5483:4:3","nodeType":"VariableDeclaration","scope":1783,"src":"5475:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1627,"name":"uint256","nodeType":"ElementaryTypeName","src":"5475:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5437:51:3"},"scope":2797,"src":"5294:954:3","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1807,"nodeType":"Block","src":"6701:1432:3","statements":[{"AST":{"nodeType":"YulBlock","src":"6729:1314:3","statements":[{"nodeType":"YulVariableDeclaration","src":"6785:26:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6806:4:3","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6800:5:3"},"nodeType":"YulFunctionCall","src":"6800:11:3"},"variables":[{"name":"pointer","nodeType":"YulTypedName","src":"6789:7:3","type":""}]},{"expression":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"6869:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"6878:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6862:6:3"},"nodeType":"YulFunctionCall","src":"6862:21:3"},"nodeType":"YulExpressionStatement","src":"6862:21:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"6947:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"6956:4:3","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6943:3:3"},"nodeType":"YulFunctionCall","src":"6943:18:3"},{"kind":"number","nodeType":"YulLiteral","src":"6963:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6936:6:3"},"nodeType":"YulFunctionCall","src":"6936:32:3"},"nodeType":"YulExpressionStatement","src":"6936:32:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"7031:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"7040:4:3","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7027:3:3"},"nodeType":"YulFunctionCall","src":"7027:18:3"},{"kind":"number","nodeType":"YulLiteral","src":"7047:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7020:6:3"},"nodeType":"YulFunctionCall","src":"7020:32:3"},"nodeType":"YulExpressionStatement","src":"7020:32:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"7109:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"7118:4:3","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7105:3:3"},"nodeType":"YulFunctionCall","src":"7105:18:3"},{"name":"self","nodeType":"YulIdentifier","src":"7125:4:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7098:6:3"},"nodeType":"YulFunctionCall","src":"7098:32:3"},"nodeType":"YulExpressionStatement","src":"7098:32:3"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"7185:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"7194:4:3","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7181:3:3"},"nodeType":"YulFunctionCall","src":"7181:18:3"},{"name":"pp1div4","nodeType":"YulIdentifier","src":"7201:7:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7174:6:3"},"nodeType":"YulFunctionCall","src":"7174:35:3"},"nodeType":"YulExpressionStatement","src":"7174:35:3"},{"nodeType":"YulVariableDeclaration","src":"7396:33:3","value":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"7415:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"7424:4:3","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7411:3:3"},"nodeType":"YulFunctionCall","src":"7411:18:3"},"variables":[{"name":"_result","nodeType":"YulTypedName","src":"7400:7:3","type":""}]},{"expression":{"arguments":[{"name":"_result","nodeType":"YulIdentifier","src":"7479:7:3"},{"name":"p","nodeType":"YulIdentifier","src":"7488:1:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7472:6:3"},"nodeType":"YulFunctionCall","src":"7472:18:3"},"nodeType":"YulExpressionStatement","src":"7472:18:3"},{"body":{"nodeType":"YulBlock","src":"7964:16:3","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7973:1:3","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7976:1:3","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7966:6:3"},"nodeType":"YulFunctionCall","src":"7966:12:3"},"nodeType":"YulExpressionStatement","src":"7966:12:3"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7640:1:3","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7636:3:3"},"nodeType":"YulFunctionCall","src":"7636:6:3"},{"name":"MODEXP_PRECOMPILE","nodeType":"YulIdentifier","src":"7685:17:3"},{"name":"pointer","nodeType":"YulIdentifier","src":"7730:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"7769:4:3","type":"","value":"0xc0"},{"name":"_result","nodeType":"YulIdentifier","src":"7818:7:3"},{"kind":"number","nodeType":"YulLiteral","src":"7913:4:3","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"7608:10:3"},"nodeType":"YulFunctionCall","src":"7608:345:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7588:6:3"},"nodeType":"YulFunctionCall","src":"7588:375:3"},"nodeType":"YulIf","src":"7585:395:3"},{"nodeType":"YulAssignment","src":"7984:24:3","value":{"arguments":[{"name":"_result","nodeType":"YulIdentifier","src":"8000:7:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7994:5:3"},"nodeType":"YulFunctionCall","src":"7994:14:3"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"7984:6:3"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1471,"isOffset":false,"isSlot":false,"src":"7685:17:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"7488:1:3","valueSize":1},{"declaration":1501,"isOffset":false,"isSlot":false,"src":"7201:7:3","valueSize":1},{"declaration":1789,"isOffset":false,"isSlot":false,"src":"7984:6:3","valueSize":1},{"declaration":1786,"isOffset":false,"isSlot":false,"src":"7125:4:3","valueSize":1}],"flags":["memory-safe"],"id":1791,"nodeType":"InlineAssembly","src":"6704:1339:3"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1793,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1789,"src":"8057:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1794,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1789,"src":"8064:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1795,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"8071:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1792,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"8050:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8050:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":1797,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1786,"src":"8075:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8050:29:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1804,"nodeType":"IfStatement","src":"8047:63:3","trueBody":{"id":1803,"nodeType":"Block","src":"8080:30:3","statements":[{"expression":{"id":1801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1799,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1789,"src":"8087:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1800,"name":"_NOTSQUARE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1504,"src":"8094:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8087:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1802,"nodeType":"ExpressionStatement","src":"8087:17:3"}]}},{"expression":{"id":1805,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1789,"src":"8124:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1790,"id":1806,"nodeType":"Return","src":"8117:13:3"}]},"documentation":{"id":1784,"nodeType":"StructuredDocumentation","src":"6250:381:3","text":"@notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\n @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\n @param self The integer of which to find the modular inverse\n @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx"},"id":1808,"implemented":true,"kind":"function","modifiers":[],"name":"SqrtMod","nameLocation":"6641:7:3","nodeType":"FunctionDefinition","parameters":{"id":1787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1786,"mutability":"mutable","name":"self","nameLocation":"6657:4:3","nodeType":"VariableDeclaration","scope":1808,"src":"6649:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1785,"name":"uint256","nodeType":"ElementaryTypeName","src":"6649:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6648:14:3"},"returnParameters":{"id":1790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1789,"mutability":"mutable","name":"result","nameLocation":"6694:6:3","nodeType":"VariableDeclaration","scope":1808,"src":"6686:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1788,"name":"uint256","nodeType":"ElementaryTypeName","src":"6686:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6685:16:3"},"scope":2797,"src":"6632:1501:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1845,"nodeType":"Block","src":"8294:138:3","statements":[{"id":1844,"nodeType":"UncheckedBlock","src":"8304:122:3","statements":[{"expression":{"id":1824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1820,"name":"P","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1818,"src":"8328:1:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":1822,"indexExpression":{"hexValue":"32","id":1821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8330:1:3","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8328:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":1823,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8335:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8328:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1825,"nodeType":"ExpressionStatement","src":"8328:8:3"},{"expression":{"id":1830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1826,"name":"P","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1818,"src":"8355:1:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":1828,"indexExpression":{"hexValue":"33","id":1827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8357:1:3","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8355:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":1829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8362:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8355:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1831,"nodeType":"ExpressionStatement","src":"8355:8:3"},{"expression":{"id":1836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1832,"name":"P","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1818,"src":"8383:1:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":1834,"indexExpression":{"hexValue":"30","id":1833,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8385:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8383:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1835,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1811,"src":"8390:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8383:9:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1837,"nodeType":"ExpressionStatement","src":"8383:9:3"},{"expression":{"id":1842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1838,"name":"P","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1818,"src":"8406:1:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":1840,"indexExpression":{"hexValue":"31","id":1839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8408:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8406:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1841,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1813,"src":"8413:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8406:9:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1843,"nodeType":"ExpressionStatement","src":"8406:9:3"}]}]},"documentation":{"id":1809,"nodeType":"StructuredDocumentation","src":"8138:62:3","text":" /* @dev Convert from affine rep to XYZZ rep"},"id":1846,"implemented":true,"kind":"function","modifiers":[],"name":"ecAff_SetZZ","nameLocation":"8214:11:3","nodeType":"FunctionDefinition","parameters":{"id":1814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1811,"mutability":"mutable","name":"x0","nameLocation":"8234:2:3","nodeType":"VariableDeclaration","scope":1846,"src":"8226:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1810,"name":"uint256","nodeType":"ElementaryTypeName","src":"8226:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1813,"mutability":"mutable","name":"y0","nameLocation":"8246:2:3","nodeType":"VariableDeclaration","scope":1846,"src":"8238:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1812,"name":"uint256","nodeType":"ElementaryTypeName","src":"8238:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8225:24:3"},"returnParameters":{"id":1819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1818,"mutability":"mutable","name":"P","nameLocation":"8291:1:3","nodeType":"VariableDeclaration","scope":1846,"src":"8273:19:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4]"},"typeName":{"baseType":{"id":1815,"name":"uint256","nodeType":"ElementaryTypeName","src":"8273:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1817,"length":{"hexValue":"34","id":1816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8281:1:3","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"ArrayTypeName","src":"8273:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_storage_ptr","typeString":"uint256[4]"}},"visibility":"internal"}],"src":"8272:21:3"},"scope":2797,"src":"8205:227:3","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1913,"nodeType":"Block","src":"8520:271:3","statements":[{"assignments":[1856],"declarations":[{"constant":false,"id":1856,"mutability":"mutable","name":"y2","nameLocation":"8540:2:3","nodeType":"VariableDeclaration","scope":1913,"src":"8532:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1855,"name":"uint256","nodeType":"ElementaryTypeName","src":"8532:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1866,"initialValue":{"arguments":[{"id":1858,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1848,"src":"8550:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":1860,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1848,"src":"8559:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1861,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1848,"src":"8561:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1862,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"8563:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1859,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"8552:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8552:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1864,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"8566:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1857,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"8543:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8543:25:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8532:36:3"},{"expression":{"id":1881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1867,"name":"y2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1856,"src":"8582:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1869,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1480,"src":"8592:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":1871,"name":"y2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1856,"src":"8601:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":1873,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1848,"src":"8611:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1874,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1477,"src":"8613:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1875,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"8615:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1872,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"8604:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8604:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1877,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"8618:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1870,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"8594:6:3","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8594:26:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1879,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"8621:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1868,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"8585:6:3","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8585:38:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8582:41:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1882,"nodeType":"ExpressionStatement","src":"8582:41:3"},{"expression":{"id":1887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1883,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1853,"src":"8643:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1885,"name":"y2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1856,"src":"8653:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1884,"name":"SqrtMod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1808,"src":"8645:7:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":1886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8645:11:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8643:13:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1888,"nodeType":"ExpressionStatement","src":"8643:13:3"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1889,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1853,"src":"8669:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1890,"name":"_NOTSQUARE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1504,"src":"8672:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8669:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1895,"nodeType":"IfStatement","src":"8666:59:3","trueBody":{"id":1894,"nodeType":"Block","src":"8683:42:3","statements":[{"expression":{"id":1892,"name":"_NOTONCURVE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1507,"src":"8703:11:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1854,"id":1893,"nodeType":"Return","src":"8696:18:3"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1896,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1853,"src":"8738:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8740:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8738:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1899,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8737:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1900,"name":"parity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1850,"src":"8745:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1901,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8752:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8745:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1903,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8744:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8737:17:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1912,"nodeType":"IfStatement","src":"8734:51:3","trueBody":{"id":1911,"nodeType":"Block","src":"8755:30:3","statements":[{"expression":{"id":1909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1905,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1853,"src":"8769:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1906,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"8771:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1907,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1853,"src":"8773:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8771:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8769:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1910,"nodeType":"ExpressionStatement","src":"8769:5:3"}]}}]},"id":1914,"implemented":true,"kind":"function","modifiers":[],"name":"ec_Decompress","nameLocation":"8447:13:3","nodeType":"FunctionDefinition","parameters":{"id":1851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1848,"mutability":"mutable","name":"x","nameLocation":"8469:1:3","nodeType":"VariableDeclaration","scope":1914,"src":"8461:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1847,"name":"uint256","nodeType":"ElementaryTypeName","src":"8461:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1850,"mutability":"mutable","name":"parity","nameLocation":"8480:6:3","nodeType":"VariableDeclaration","scope":1914,"src":"8472:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1849,"name":"uint256","nodeType":"ElementaryTypeName","src":"8472:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8460:27:3"},"returnParameters":{"id":1854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1853,"mutability":"mutable","name":"y","nameLocation":"8518:1:3","nodeType":"VariableDeclaration","scope":1914,"src":"8510:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1852,"name":"uint256","nodeType":"ElementaryTypeName","src":"8510:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8509:11:3"},"scope":2797,"src":"8438:353:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1968,"nodeType":"Block","src":"9069:236:3","statements":[{"assignments":[1931],"declarations":[{"constant":false,"id":1931,"mutability":"mutable","name":"zzzInv","nameLocation":"9087:6:3","nodeType":"VariableDeclaration","scope":1968,"src":"9079:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1930,"name":"uint256","nodeType":"ElementaryTypeName","src":"9079:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1935,"initialValue":{"arguments":[{"id":1933,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1923,"src":"9108:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1932,"name":"FCL_pModInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1527,"src":"9096:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":1934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9096:16:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9079:33:3"},{"expression":{"id":1942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1936,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1928,"src":"9130:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1938,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1919,"src":"9142:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1939,"name":"zzzInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1931,"src":"9145:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1940,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"9153:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1937,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"9135:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9135:20:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9130:25:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1943,"nodeType":"ExpressionStatement","src":"9130:25:3"},{"assignments":[1945],"declarations":[{"constant":false,"id":1945,"mutability":"mutable","name":"_b","nameLocation":"9181:2:3","nodeType":"VariableDeclaration","scope":1968,"src":"9173:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1944,"name":"uint256","nodeType":"ElementaryTypeName","src":"9173:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1951,"initialValue":{"arguments":[{"id":1947,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1921,"src":"9193:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1948,"name":"zzzInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1931,"src":"9197:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1949,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"9205:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1946,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"9186:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9186:21:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9173:34:3"},{"expression":{"id":1958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1952,"name":"zzzInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1931,"src":"9223:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1954,"name":"_b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1945,"src":"9239:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1955,"name":"_b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1945,"src":"9243:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1956,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"9247:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1953,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"9232:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9232:17:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9223:26:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1959,"nodeType":"ExpressionStatement","src":"9223:26:3"},{"expression":{"id":1966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1960,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1926,"src":"9266:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1962,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1917,"src":"9278:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1963,"name":"zzzInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1931,"src":"9281:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1964,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"9289:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1961,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"9271:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9271:20:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9266:25:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1967,"nodeType":"ExpressionStatement","src":"9266:25:3"}]},"documentation":{"id":1915,"nodeType":"StructuredDocumentation","src":"8797:62:3","text":" /* @dev Convert from XYZZ rep to affine rep"},"id":1969,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_SetAff","nameLocation":"8963:11:3","nodeType":"FunctionDefinition","parameters":{"id":1924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1917,"mutability":"mutable","name":"x","nameLocation":"8983:1:3","nodeType":"VariableDeclaration","scope":1969,"src":"8975:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1916,"name":"uint256","nodeType":"ElementaryTypeName","src":"8975:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1919,"mutability":"mutable","name":"y","nameLocation":"8994:1:3","nodeType":"VariableDeclaration","scope":1969,"src":"8986:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1918,"name":"uint256","nodeType":"ElementaryTypeName","src":"8986:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1921,"mutability":"mutable","name":"zz","nameLocation":"9005:2:3","nodeType":"VariableDeclaration","scope":1969,"src":"8997:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1920,"name":"uint256","nodeType":"ElementaryTypeName","src":"8997:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1923,"mutability":"mutable","name":"zzz","nameLocation":"9017:3:3","nodeType":"VariableDeclaration","scope":1969,"src":"9009:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1922,"name":"uint256","nodeType":"ElementaryTypeName","src":"9009:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8974:47:3"},"returnParameters":{"id":1929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1926,"mutability":"mutable","name":"x1","nameLocation":"9053:2:3","nodeType":"VariableDeclaration","scope":1969,"src":"9045:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1925,"name":"uint256","nodeType":"ElementaryTypeName","src":"9045:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1928,"mutability":"mutable","name":"y1","nameLocation":"9065:2:3","nodeType":"VariableDeclaration","scope":1969,"src":"9057:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1927,"name":"uint256","nodeType":"ElementaryTypeName","src":"9057:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9044:24:3"},"scope":2797,"src":"8954:351:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1997,"nodeType":"Block","src":"9578:764:3","statements":[{"id":1990,"nodeType":"UncheckedBlock","src":"9588:715:3","statements":[{"AST":{"nodeType":"YulBlock","src":"9621:672:3","statements":[{"nodeType":"YulAssignment","src":"9639:21:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9652:1:3","type":"","value":"2"},{"name":"y","nodeType":"YulIdentifier","src":"9655:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"9658:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9645:6:3"},"nodeType":"YulFunctionCall","src":"9645:15:3"},"variableNames":[{"name":"P0","nodeType":"YulIdentifier","src":"9639:2:3"}]},{"nodeType":"YulAssignment","src":"9688:23:3","value":{"arguments":[{"name":"P0","nodeType":"YulIdentifier","src":"9701:2:3"},{"name":"P0","nodeType":"YulIdentifier","src":"9705:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"9709:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9694:6:3"},"nodeType":"YulFunctionCall","src":"9694:17:3"},"variableNames":[{"name":"P2","nodeType":"YulIdentifier","src":"9688:2:3"}]},{"nodeType":"YulAssignment","src":"9737:22:3","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9750:1:3"},{"name":"P2","nodeType":"YulIdentifier","src":"9753:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"9757:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9743:6:3"},"nodeType":"YulFunctionCall","src":"9743:16:3"},"variableNames":[{"name":"P3","nodeType":"YulIdentifier","src":"9737:2:3"}]},{"nodeType":"YulAssignment","src":"9788:23:3","value":{"arguments":[{"name":"P0","nodeType":"YulIdentifier","src":"9801:2:3"},{"name":"P2","nodeType":"YulIdentifier","src":"9805:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"9809:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9794:6:3"},"nodeType":"YulFunctionCall","src":"9794:17:3"},"variableNames":[{"name":"P1","nodeType":"YulIdentifier","src":"9788:2:3"}]},{"nodeType":"YulAssignment","src":"9836:23:3","value":{"arguments":[{"name":"P2","nodeType":"YulIdentifier","src":"9849:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"9853:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"9857:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9842:6:3"},"nodeType":"YulFunctionCall","src":"9842:17:3"},"variableNames":[{"name":"P2","nodeType":"YulIdentifier","src":"9836:2:3"}]},{"nodeType":"YulAssignment","src":"9888:73:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9901:1:3","type":"","value":"3"},{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9918:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"9925:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"9928:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9921:3:3"},"nodeType":"YulFunctionCall","src":"9921:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"9933:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"9911:6:3"},"nodeType":"YulFunctionCall","src":"9911:24:3"},{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9944:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"9947:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"9951:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"9937:6:3"},"nodeType":"YulFunctionCall","src":"9937:16:3"},{"name":"p","nodeType":"YulIdentifier","src":"9955:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9904:6:3"},"nodeType":"YulFunctionCall","src":"9904:53:3"},{"name":"p","nodeType":"YulIdentifier","src":"9959:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9894:6:3"},"nodeType":"YulFunctionCall","src":"9894:67:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"9888:2:3"}]},{"nodeType":"YulAssignment","src":"10002:58:3","value":{"arguments":[{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"10022:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"10026:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"10030:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10015:6:3"},"nodeType":"YulFunctionCall","src":"10015:17:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"10041:7:3"},{"name":"P3","nodeType":"YulIdentifier","src":"10050:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"10054:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10034:6:3"},"nodeType":"YulFunctionCall","src":"10034:22:3"},{"name":"p","nodeType":"YulIdentifier","src":"10058:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"10008:6:3"},"nodeType":"YulFunctionCall","src":"10008:52:3"},"variableNames":[{"name":"P0","nodeType":"YulIdentifier","src":"10002:2:3"}]},{"nodeType":"YulAssignment","src":"10089:45:3","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"10101:2:3"},{"arguments":[{"name":"P3","nodeType":"YulIdentifier","src":"10112:2:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"10120:1:3"},{"name":"P0","nodeType":"YulIdentifier","src":"10123:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10116:3:3"},"nodeType":"YulFunctionCall","src":"10116:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"10128:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"10105:6:3"},"nodeType":"YulFunctionCall","src":"10105:25:3"},{"name":"p","nodeType":"YulIdentifier","src":"10132:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10094:6:3"},"nodeType":"YulFunctionCall","src":"10094:40:3"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"10089:1:3"}]},{"nodeType":"YulAssignment","src":"10161:24:3","value":{"arguments":[{"name":"P1","nodeType":"YulIdentifier","src":"10174:2:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"10178:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"10183:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10167:6:3"},"nodeType":"YulFunctionCall","src":"10167:18:3"},"variableNames":[{"name":"P3","nodeType":"YulIdentifier","src":"10161:2:3"}]},{"nodeType":"YulAssignment","src":"10216:44:3","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10229:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"10236:1:3"},{"arguments":[{"name":"P1","nodeType":"YulIdentifier","src":"10246:2:3"},{"name":"y","nodeType":"YulIdentifier","src":"10250:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"10253:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10239:6:3"},"nodeType":"YulFunctionCall","src":"10239:16:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10232:3:3"},"nodeType":"YulFunctionCall","src":"10232:24:3"},{"name":"p","nodeType":"YulIdentifier","src":"10258:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"10222:6:3"},"nodeType":"YulFunctionCall","src":"10222:38:3"},"variableNames":[{"name":"P1","nodeType":"YulIdentifier","src":"10216:2:3"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1981,"isOffset":false,"isSlot":false,"src":"10002:2:3","valueSize":1},{"declaration":1981,"isOffset":false,"isSlot":false,"src":"10123:2:3","valueSize":1},{"declaration":1981,"isOffset":false,"isSlot":false,"src":"9639:2:3","valueSize":1},{"declaration":1981,"isOffset":false,"isSlot":false,"src":"9701:2:3","valueSize":1},{"declaration":1981,"isOffset":false,"isSlot":false,"src":"9705:2:3","valueSize":1},{"declaration":1981,"isOffset":false,"isSlot":false,"src":"9801:2:3","valueSize":1},{"declaration":1983,"isOffset":false,"isSlot":false,"src":"10174:2:3","valueSize":1},{"declaration":1983,"isOffset":false,"isSlot":false,"src":"10216:2:3","valueSize":1},{"declaration":1983,"isOffset":false,"isSlot":false,"src":"10246:2:3","valueSize":1},{"declaration":1983,"isOffset":false,"isSlot":false,"src":"9788:2:3","valueSize":1},{"declaration":1985,"isOffset":false,"isSlot":false,"src":"9688:2:3","valueSize":1},{"declaration":1985,"isOffset":false,"isSlot":false,"src":"9753:2:3","valueSize":1},{"declaration":1985,"isOffset":false,"isSlot":false,"src":"9805:2:3","valueSize":1},{"declaration":1985,"isOffset":false,"isSlot":false,"src":"9836:2:3","valueSize":1},{"declaration":1985,"isOffset":false,"isSlot":false,"src":"9849:2:3","valueSize":1},{"declaration":1987,"isOffset":false,"isSlot":false,"src":"10050:2:3","valueSize":1},{"declaration":1987,"isOffset":false,"isSlot":false,"src":"10112:2:3","valueSize":1},{"declaration":1987,"isOffset":false,"isSlot":false,"src":"10161:2:3","valueSize":1},{"declaration":1987,"isOffset":false,"isSlot":false,"src":"9737:2:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"10041:7:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10030:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10054:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10058:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10120:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10128:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10132:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10183:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10236:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10253:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10258:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"9658:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"9709:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"9757:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"9809:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"9857:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"9925:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"9933:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"9951:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"9955:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"9959:1:3","valueSize":1},{"declaration":1972,"isOffset":false,"isSlot":false,"src":"10089:1:3","valueSize":1},{"declaration":1972,"isOffset":false,"isSlot":false,"src":"10229:1:3","valueSize":1},{"declaration":1972,"isOffset":false,"isSlot":false,"src":"9750:1:3","valueSize":1},{"declaration":1972,"isOffset":false,"isSlot":false,"src":"9918:1:3","valueSize":1},{"declaration":1972,"isOffset":false,"isSlot":false,"src":"9944:1:3","valueSize":1},{"declaration":1974,"isOffset":false,"isSlot":false,"src":"10250:1:3","valueSize":1},{"declaration":1974,"isOffset":false,"isSlot":false,"src":"9655:1:3","valueSize":1},{"declaration":1976,"isOffset":false,"isSlot":false,"src":"10022:2:3","valueSize":1},{"declaration":1976,"isOffset":false,"isSlot":false,"src":"10026:2:3","valueSize":1},{"declaration":1976,"isOffset":false,"isSlot":false,"src":"10101:2:3","valueSize":1},{"declaration":1976,"isOffset":false,"isSlot":false,"src":"9853:2:3","valueSize":1},{"declaration":1976,"isOffset":false,"isSlot":false,"src":"9888:2:3","valueSize":1},{"declaration":1976,"isOffset":false,"isSlot":false,"src":"9928:2:3","valueSize":1},{"declaration":1976,"isOffset":false,"isSlot":false,"src":"9947:2:3","valueSize":1},{"declaration":1978,"isOffset":false,"isSlot":false,"src":"10178:3:3","valueSize":1}],"id":1989,"nodeType":"InlineAssembly","src":"9612:681:3"}]},{"expression":{"components":[{"id":1991,"name":"P0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1981,"src":"10320:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1992,"name":"P1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1983,"src":"10324:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1993,"name":"P2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1985,"src":"10328:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1994,"name":"P3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1987,"src":"10332:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1995,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10319:16:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"functionReturnParameters":1988,"id":1996,"nodeType":"Return","src":"10312:23:3"}]},"documentation":{"id":1970,"nodeType":"StructuredDocumentation","src":"9311:50:3","text":" /* @dev Sutherland2008 doubling"},"id":1998,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_Dbl","nameLocation":"9423:8:3","nodeType":"FunctionDefinition","parameters":{"id":1979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1972,"mutability":"mutable","name":"x","nameLocation":"9440:1:3","nodeType":"VariableDeclaration","scope":1998,"src":"9432:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1971,"name":"uint256","nodeType":"ElementaryTypeName","src":"9432:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1974,"mutability":"mutable","name":"y","nameLocation":"9451:1:3","nodeType":"VariableDeclaration","scope":1998,"src":"9443:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1973,"name":"uint256","nodeType":"ElementaryTypeName","src":"9443:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1976,"mutability":"mutable","name":"zz","nameLocation":"9462:2:3","nodeType":"VariableDeclaration","scope":1998,"src":"9454:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1975,"name":"uint256","nodeType":"ElementaryTypeName","src":"9454:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1978,"mutability":"mutable","name":"zzz","nameLocation":"9474:3:3","nodeType":"VariableDeclaration","scope":1998,"src":"9466:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1977,"name":"uint256","nodeType":"ElementaryTypeName","src":"9466:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9431:47:3"},"returnParameters":{"id":1988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1981,"mutability":"mutable","name":"P0","nameLocation":"9534:2:3","nodeType":"VariableDeclaration","scope":1998,"src":"9526:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1980,"name":"uint256","nodeType":"ElementaryTypeName","src":"9526:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1983,"mutability":"mutable","name":"P1","nameLocation":"9546:2:3","nodeType":"VariableDeclaration","scope":1998,"src":"9538:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1982,"name":"uint256","nodeType":"ElementaryTypeName","src":"9538:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1985,"mutability":"mutable","name":"P2","nameLocation":"9558:2:3","nodeType":"VariableDeclaration","scope":1998,"src":"9550:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1984,"name":"uint256","nodeType":"ElementaryTypeName","src":"9550:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1987,"mutability":"mutable","name":"P3","nameLocation":"9570:2:3","nodeType":"VariableDeclaration","scope":1998,"src":"9562:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1986,"name":"uint256","nodeType":"ElementaryTypeName","src":"9562:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9525:48:3"},"scope":2797,"src":"9414:928:3","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2041,"nodeType":"Block","src":"10752:880:3","statements":[{"id":2034,"nodeType":"UncheckedBlock","src":"10762:815:3","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2022,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2003,"src":"10790:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10796:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10790:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2032,"nodeType":"IfStatement","src":"10786:67:3","trueBody":{"id":2031,"nodeType":"Block","src":"10799:54:3","statements":[{"expression":{"components":[{"id":2025,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2009,"src":"10825:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2026,"name":"y2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2011,"src":"10829:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":2027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10833:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"31","id":2028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10836:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"id":2029,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10824:14:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_rational_1_by_1_$_t_rational_1_by_1_$","typeString":"tuple(uint256,uint256,int_const 1,int_const 1)"}},"functionReturnParameters":2021,"id":2030,"nodeType":"Return","src":"10817:21:3"}]}},{"AST":{"nodeType":"YulBlock","src":"10876:664:3","statements":[{"nodeType":"YulAssignment","src":"10894:16:3","value":{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"10904:1:3"},{"name":"y1","nodeType":"YulIdentifier","src":"10907:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10900:3:3"},"nodeType":"YulFunctionCall","src":"10900:10:3"},"variableNames":[{"name":"y1","nodeType":"YulIdentifier","src":"10894:2:3"}]},{"nodeType":"YulAssignment","src":"10927:40:3","value":{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"10947:2:3"},{"name":"zzz1","nodeType":"YulIdentifier","src":"10951:4:3"},{"name":"p","nodeType":"YulIdentifier","src":"10957:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10940:6:3"},"nodeType":"YulFunctionCall","src":"10940:19:3"},{"name":"y1","nodeType":"YulIdentifier","src":"10961:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"10965:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"10933:6:3"},"nodeType":"YulFunctionCall","src":"10933:34:3"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"10927:2:3"}]},{"nodeType":"YulAssignment","src":"10984:47:3","value":{"arguments":[{"arguments":[{"name":"x2","nodeType":"YulIdentifier","src":"11004:2:3"},{"name":"zz1","nodeType":"YulIdentifier","src":"11008:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"11013:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10997:6:3"},"nodeType":"YulFunctionCall","src":"10997:18:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"11021:1:3"},{"name":"x1","nodeType":"YulIdentifier","src":"11024:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11017:3:3"},"nodeType":"YulFunctionCall","src":"11017:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"11029:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"10990:6:3"},"nodeType":"YulFunctionCall","src":"10990:41:3"},"variableNames":[{"name":"x2","nodeType":"YulIdentifier","src":"10984:2:3"}]},{"nodeType":"YulAssignment","src":"11048:23:3","value":{"arguments":[{"name":"x2","nodeType":"YulIdentifier","src":"11061:2:3"},{"name":"x2","nodeType":"YulIdentifier","src":"11065:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"11069:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11054:6:3"},"nodeType":"YulFunctionCall","src":"11054:17:3"},"variableNames":[{"name":"P0","nodeType":"YulIdentifier","src":"11048:2:3"}]},{"nodeType":"YulAssignment","src":"11099:23:3","value":{"arguments":[{"name":"P0","nodeType":"YulIdentifier","src":"11112:2:3"},{"name":"x2","nodeType":"YulIdentifier","src":"11116:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"11120:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11105:6:3"},"nodeType":"YulFunctionCall","src":"11105:17:3"},"variableNames":[{"name":"P1","nodeType":"YulIdentifier","src":"11099:2:3"}]},{"nodeType":"YulAssignment","src":"11152:24:3","value":{"arguments":[{"name":"zz1","nodeType":"YulIdentifier","src":"11165:3:3"},{"name":"P0","nodeType":"YulIdentifier","src":"11170:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"11174:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11158:6:3"},"nodeType":"YulFunctionCall","src":"11158:18:3"},"variableNames":[{"name":"P2","nodeType":"YulIdentifier","src":"11152:2:3"}]},{"nodeType":"YulAssignment","src":"11210:25:3","value":{"arguments":[{"name":"zzz1","nodeType":"YulIdentifier","src":"11223:4:3"},{"name":"P1","nodeType":"YulIdentifier","src":"11229:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"11233:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11216:6:3"},"nodeType":"YulFunctionCall","src":"11216:19:3"},"variableNames":[{"name":"P3","nodeType":"YulIdentifier","src":"11210:2:3"}]},{"nodeType":"YulAssignment","src":"11272:24:3","value":{"arguments":[{"name":"x1","nodeType":"YulIdentifier","src":"11286:2:3"},{"name":"P0","nodeType":"YulIdentifier","src":"11290:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"11294:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11279:6:3"},"nodeType":"YulFunctionCall","src":"11279:17:3"},"variableNames":[{"name":"zz1","nodeType":"YulIdentifier","src":"11272:3:3"}]},{"nodeType":"YulAssignment","src":"11325:82:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"11352:2:3"},{"name":"y2","nodeType":"YulIdentifier","src":"11356:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"11360:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11345:6:3"},"nodeType":"YulFunctionCall","src":"11345:17:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"11368:1:3"},{"name":"P1","nodeType":"YulIdentifier","src":"11371:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11364:3:3"},"nodeType":"YulFunctionCall","src":"11364:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"11376:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"11338:6:3"},"nodeType":"YulFunctionCall","src":"11338:40:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"11387:7:3"},{"name":"zz1","nodeType":"YulIdentifier","src":"11396:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"11401:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11380:6:3"},"nodeType":"YulFunctionCall","src":"11380:23:3"},{"name":"p","nodeType":"YulIdentifier","src":"11405:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"11331:6:3"},"nodeType":"YulFunctionCall","src":"11331:76:3"},"variableNames":[{"name":"P0","nodeType":"YulIdentifier","src":"11325:2:3"}]},{"nodeType":"YulAssignment","src":"11438:77:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"zz1","nodeType":"YulIdentifier","src":"11465:3:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"11474:1:3"},{"name":"P0","nodeType":"YulIdentifier","src":"11477:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11470:3:3"},"nodeType":"YulFunctionCall","src":"11470:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"11482:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"11458:6:3"},"nodeType":"YulFunctionCall","src":"11458:26:3"},{"name":"y2","nodeType":"YulIdentifier","src":"11486:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"11490:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11451:6:3"},"nodeType":"YulFunctionCall","src":"11451:41:3"},{"arguments":[{"name":"y1","nodeType":"YulIdentifier","src":"11501:2:3"},{"name":"P1","nodeType":"YulIdentifier","src":"11505:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"11509:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11494:6:3"},"nodeType":"YulFunctionCall","src":"11494:17:3"},{"name":"p","nodeType":"YulIdentifier","src":"11513:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"11444:6:3"},"nodeType":"YulFunctionCall","src":"11444:71:3"},"variableNames":[{"name":"P1","nodeType":"YulIdentifier","src":"11438:2:3"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2014,"isOffset":false,"isSlot":false,"src":"11048:2:3","valueSize":1},{"declaration":2014,"isOffset":false,"isSlot":false,"src":"11112:2:3","valueSize":1},{"declaration":2014,"isOffset":false,"isSlot":false,"src":"11170:2:3","valueSize":1},{"declaration":2014,"isOffset":false,"isSlot":false,"src":"11290:2:3","valueSize":1},{"declaration":2014,"isOffset":false,"isSlot":false,"src":"11325:2:3","valueSize":1},{"declaration":2014,"isOffset":false,"isSlot":false,"src":"11477:2:3","valueSize":1},{"declaration":2016,"isOffset":false,"isSlot":false,"src":"11099:2:3","valueSize":1},{"declaration":2016,"isOffset":false,"isSlot":false,"src":"11229:2:3","valueSize":1},{"declaration":2016,"isOffset":false,"isSlot":false,"src":"11371:2:3","valueSize":1},{"declaration":2016,"isOffset":false,"isSlot":false,"src":"11438:2:3","valueSize":1},{"declaration":2016,"isOffset":false,"isSlot":false,"src":"11505:2:3","valueSize":1},{"declaration":2018,"isOffset":false,"isSlot":false,"src":"11152:2:3","valueSize":1},{"declaration":2020,"isOffset":false,"isSlot":false,"src":"11210:2:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"11387:7:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10904:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10957:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"10965:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11013:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11021:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11029:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11069:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11120:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11174:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11233:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11294:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11360:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11368:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11376:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11401:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11405:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11474:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11482:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11490:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11509:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"11513:1:3","valueSize":1},{"declaration":2001,"isOffset":false,"isSlot":false,"src":"11024:2:3","valueSize":1},{"declaration":2001,"isOffset":false,"isSlot":false,"src":"11286:2:3","valueSize":1},{"declaration":2009,"isOffset":false,"isSlot":false,"src":"10984:2:3","valueSize":1},{"declaration":2009,"isOffset":false,"isSlot":false,"src":"11004:2:3","valueSize":1},{"declaration":2009,"isOffset":false,"isSlot":false,"src":"11061:2:3","valueSize":1},{"declaration":2009,"isOffset":false,"isSlot":false,"src":"11065:2:3","valueSize":1},{"declaration":2009,"isOffset":false,"isSlot":false,"src":"11116:2:3","valueSize":1},{"declaration":2003,"isOffset":false,"isSlot":false,"src":"10894:2:3","valueSize":1},{"declaration":2003,"isOffset":false,"isSlot":false,"src":"10907:2:3","valueSize":1},{"declaration":2003,"isOffset":false,"isSlot":false,"src":"10961:2:3","valueSize":1},{"declaration":2003,"isOffset":false,"isSlot":false,"src":"11501:2:3","valueSize":1},{"declaration":2011,"isOffset":false,"isSlot":false,"src":"10927:2:3","valueSize":1},{"declaration":2011,"isOffset":false,"isSlot":false,"src":"10947:2:3","valueSize":1},{"declaration":2011,"isOffset":false,"isSlot":false,"src":"11352:2:3","valueSize":1},{"declaration":2011,"isOffset":false,"isSlot":false,"src":"11356:2:3","valueSize":1},{"declaration":2011,"isOffset":false,"isSlot":false,"src":"11486:2:3","valueSize":1},{"declaration":2005,"isOffset":false,"isSlot":false,"src":"11008:3:3","valueSize":1},{"declaration":2005,"isOffset":false,"isSlot":false,"src":"11165:3:3","valueSize":1},{"declaration":2005,"isOffset":false,"isSlot":false,"src":"11272:3:3","valueSize":1},{"declaration":2005,"isOffset":false,"isSlot":false,"src":"11396:3:3","valueSize":1},{"declaration":2005,"isOffset":false,"isSlot":false,"src":"11465:3:3","valueSize":1},{"declaration":2007,"isOffset":false,"isSlot":false,"src":"10951:4:3","valueSize":1},{"declaration":2007,"isOffset":false,"isSlot":false,"src":"11223:4:3","valueSize":1}],"id":2033,"nodeType":"InlineAssembly","src":"10867:673:3"}]},{"expression":{"components":[{"id":2035,"name":"P0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2014,"src":"11610:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2036,"name":"P1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2016,"src":"11614:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2037,"name":"P2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2018,"src":"11618:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2038,"name":"P3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2020,"src":"11622:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2039,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11609:16:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"functionReturnParameters":2021,"id":2040,"nodeType":"Return","src":"11602:23:3"}]},"documentation":{"id":1999,"nodeType":"StructuredDocumentation","src":"10348:205:3","text":" @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\n warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)"},"id":2042,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_AddN","nameLocation":"10568:9:3","nodeType":"FunctionDefinition","parameters":{"id":2012,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2001,"mutability":"mutable","name":"x1","nameLocation":"10586:2:3","nodeType":"VariableDeclaration","scope":2042,"src":"10578:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2000,"name":"uint256","nodeType":"ElementaryTypeName","src":"10578:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2003,"mutability":"mutable","name":"y1","nameLocation":"10598:2:3","nodeType":"VariableDeclaration","scope":2042,"src":"10590:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2002,"name":"uint256","nodeType":"ElementaryTypeName","src":"10590:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2005,"mutability":"mutable","name":"zz1","nameLocation":"10610:3:3","nodeType":"VariableDeclaration","scope":2042,"src":"10602:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2004,"name":"uint256","nodeType":"ElementaryTypeName","src":"10602:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2007,"mutability":"mutable","name":"zzz1","nameLocation":"10623:4:3","nodeType":"VariableDeclaration","scope":2042,"src":"10615:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2006,"name":"uint256","nodeType":"ElementaryTypeName","src":"10615:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2009,"mutability":"mutable","name":"x2","nameLocation":"10637:2:3","nodeType":"VariableDeclaration","scope":2042,"src":"10629:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2008,"name":"uint256","nodeType":"ElementaryTypeName","src":"10629:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2011,"mutability":"mutable","name":"y2","nameLocation":"10649:2:3","nodeType":"VariableDeclaration","scope":2042,"src":"10641:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2010,"name":"uint256","nodeType":"ElementaryTypeName","src":"10641:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10577:75:3"},"returnParameters":{"id":2021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2014,"mutability":"mutable","name":"P0","nameLocation":"10708:2:3","nodeType":"VariableDeclaration","scope":2042,"src":"10700:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2013,"name":"uint256","nodeType":"ElementaryTypeName","src":"10700:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2016,"mutability":"mutable","name":"P1","nameLocation":"10720:2:3","nodeType":"VariableDeclaration","scope":2042,"src":"10712:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2015,"name":"uint256","nodeType":"ElementaryTypeName","src":"10712:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2018,"mutability":"mutable","name":"P2","nameLocation":"10732:2:3","nodeType":"VariableDeclaration","scope":2042,"src":"10724:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2017,"name":"uint256","nodeType":"ElementaryTypeName","src":"10724:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2020,"mutability":"mutable","name":"P3","nameLocation":"10744:2:3","nodeType":"VariableDeclaration","scope":2042,"src":"10736:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2019,"name":"uint256","nodeType":"ElementaryTypeName","src":"10736:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10699:48:3"},"scope":2797,"src":"10559:1073:3","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2060,"nodeType":"Block","src":"11803:36:3","statements":[{"expression":{"components":[{"hexValue":"30","id":2054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11821:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":2055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11824:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":2056,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11827:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":2057,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11830:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":2058,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"11820:12:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0,int_const 0,int_const 0)"}},"functionReturnParameters":2053,"id":2059,"nodeType":"Return","src":"11813:19:3"}]},"documentation":{"id":2043,"nodeType":"StructuredDocumentation","src":"11638:66:3","text":" @dev Return the zero curve in XYZZ coordinates."},"id":2061,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_SetZero","nameLocation":"11718:12:3","nodeType":"FunctionDefinition","parameters":{"id":2044,"nodeType":"ParameterList","parameters":[],"src":"11730:2:3"},"returnParameters":{"id":2053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2046,"mutability":"mutable","name":"x","nameLocation":"11764:1:3","nodeType":"VariableDeclaration","scope":2061,"src":"11756:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2045,"name":"uint256","nodeType":"ElementaryTypeName","src":"11756:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2048,"mutability":"mutable","name":"y","nameLocation":"11775:1:3","nodeType":"VariableDeclaration","scope":2061,"src":"11767:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2047,"name":"uint256","nodeType":"ElementaryTypeName","src":"11767:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2050,"mutability":"mutable","name":"zz","nameLocation":"11786:2:3","nodeType":"VariableDeclaration","scope":2061,"src":"11778:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2049,"name":"uint256","nodeType":"ElementaryTypeName","src":"11778:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2052,"mutability":"mutable","name":"zzz","nameLocation":"11798:3:3","nodeType":"VariableDeclaration","scope":2061,"src":"11790:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2051,"name":"uint256","nodeType":"ElementaryTypeName","src":"11790:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11755:47:3"},"scope":2797,"src":"11709:130:3","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2079,"nodeType":"Block","src":"12062:31:3","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2075,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2066,"src":"12079:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12085:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12079:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2074,"id":2078,"nodeType":"Return","src":"12072:14:3"}]},"documentation":{"id":2062,"nodeType":"StructuredDocumentation","src":"11844:66:3","text":" @dev Check if point is the neutral of the curve"},"id":2080,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_IsZero","nameLocation":"11982:11:3","nodeType":"FunctionDefinition","parameters":{"id":2071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2080,"src":"11994:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2063,"name":"uint256","nodeType":"ElementaryTypeName","src":"11994:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2066,"mutability":"mutable","name":"y0","nameLocation":"12011:2:3","nodeType":"VariableDeclaration","scope":2080,"src":"12003:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2065,"name":"uint256","nodeType":"ElementaryTypeName","src":"12003:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2068,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2080,"src":"12015:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2067,"name":"uint256","nodeType":"ElementaryTypeName","src":"12015:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2070,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2080,"src":"12024:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2069,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11993:39:3"},"returnParameters":{"id":2074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2073,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2080,"src":"12056:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2072,"name":"bool","nodeType":"ElementaryTypeName","src":"12056:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12055:6:3"},"scope":2797,"src":"11973:120:3","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2092,"nodeType":"Block","src":"12296:30:3","statements":[{"expression":{"components":[{"hexValue":"30","id":2088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12314:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":2089,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12317:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":2090,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"12313:6:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0)"}},"functionReturnParameters":2087,"id":2091,"nodeType":"Return","src":"12306:13:3"}]},"documentation":{"id":2081,"nodeType":"StructuredDocumentation","src":"12098:122:3","text":" @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)"},"id":2093,"implemented":true,"kind":"function","modifiers":[],"name":"ecAff_SetZero","nameLocation":"12235:13:3","nodeType":"FunctionDefinition","parameters":{"id":2082,"nodeType":"ParameterList","parameters":[],"src":"12248:2:3"},"returnParameters":{"id":2087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2084,"mutability":"mutable","name":"x","nameLocation":"12282:1:3","nodeType":"VariableDeclaration","scope":2093,"src":"12274:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2083,"name":"uint256","nodeType":"ElementaryTypeName","src":"12274:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2086,"mutability":"mutable","name":"y","nameLocation":"12293:1:3","nodeType":"VariableDeclaration","scope":2093,"src":"12285:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2085,"name":"uint256","nodeType":"ElementaryTypeName","src":"12285:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12273:22:3"},"scope":2797,"src":"12226:100:3","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2108,"nodeType":"Block","src":"12517:32:3","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2103,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2098,"src":"12535:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12540:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12535:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2106,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12534:8:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2102,"id":2107,"nodeType":"Return","src":"12527:15:3"}]},"documentation":{"id":2094,"nodeType":"StructuredDocumentation","src":"12332:75:3","text":" @dev Check if the curve is the zero curve in affine rep."},"id":2109,"implemented":true,"kind":"function","modifiers":[],"name":"ecAff_IsZero","nameLocation":"12450:12:3","nodeType":"FunctionDefinition","parameters":{"id":2099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2096,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2109,"src":"12463:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2095,"name":"uint256","nodeType":"ElementaryTypeName","src":"12463:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2098,"mutability":"mutable","name":"y","nameLocation":"12480:1:3","nodeType":"VariableDeclaration","scope":2109,"src":"12472:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2097,"name":"uint256","nodeType":"ElementaryTypeName","src":"12472:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12462:20:3"},"returnParameters":{"id":2102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2101,"mutability":"mutable","name":"flag","nameLocation":"12511:4:3","nodeType":"VariableDeclaration","scope":2109,"src":"12506:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2100,"name":"bool","nodeType":"ElementaryTypeName","src":"12506:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12505:11:3"},"scope":2797,"src":"12441:108:3","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2182,"nodeType":"Block","src":"12760:364:3","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"30","id":2119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12777:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2120,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2112,"src":"12782:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12777:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2122,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12776:8:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"30","id":2123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12788:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2124,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2114,"src":"12793:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12788:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2126,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12786:9:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12776:19:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2128,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12775:21:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2129,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2112,"src":"12800:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2130,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"12805:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12800:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12775:31:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2133,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2114,"src":"12812:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2134,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"12817:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12812:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12775:43:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2140,"nodeType":"IfStatement","src":"12770:87:3","trueBody":{"id":2139,"nodeType":"Block","src":"12820:37:3","statements":[{"expression":{"hexValue":"66616c7365","id":2137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12841:5:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":2118,"id":2138,"nodeType":"Return","src":"12834:12:3"}]}},{"id":2181,"nodeType":"UncheckedBlock","src":"12866:252:3","statements":[{"assignments":[2142],"declarations":[{"constant":false,"id":2142,"mutability":"mutable","name":"LHS","nameLocation":"12898:3:3","nodeType":"VariableDeclaration","scope":2181,"src":"12890:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2141,"name":"uint256","nodeType":"ElementaryTypeName","src":"12890:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2148,"initialValue":{"arguments":[{"id":2144,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2114,"src":"12911:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2145,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2114,"src":"12914:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2146,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"12917:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2143,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"12904:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12904:15:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12890:29:3"},{"assignments":[2150],"declarations":[{"constant":false,"id":2150,"mutability":"mutable","name":"RHS","nameLocation":"12948:3:3","nodeType":"VariableDeclaration","scope":2181,"src":"12940:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2149,"name":"uint256","nodeType":"ElementaryTypeName","src":"12940:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2168,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":2154,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2112,"src":"12975:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2155,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2112,"src":"12978:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2156,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"12981:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2153,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"12968:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12968:15:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2158,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2112,"src":"12985:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2159,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"12988:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2152,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"12961:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12961:29:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":2162,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2112,"src":"12999:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2163,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1477,"src":"13002:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2164,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"13005:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2161,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"12992:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12992:15:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2166,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"13009:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2151,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"12954:6:3","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12954:57:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12940:71:3"},{"expression":{"id":2175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2169,"name":"RHS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2150,"src":"13035:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2171,"name":"RHS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2150,"src":"13048:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2172,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1480,"src":"13053:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2173,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"13056:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2170,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"13041:6:3","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13041:17:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13035:23:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2176,"nodeType":"ExpressionStatement","src":"13035:23:3"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2177,"name":"LHS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2142,"src":"13097:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2178,"name":"RHS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2150,"src":"13104:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13097:10:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2118,"id":2180,"nodeType":"Return","src":"13090:17:3"}]}]},"documentation":{"id":2110,"nodeType":"StructuredDocumentation","src":"12555:124:3","text":" @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve)."},"id":2183,"implemented":true,"kind":"function","modifiers":[],"name":"ecAff_isOnCurve","nameLocation":"12693:15:3","nodeType":"FunctionDefinition","parameters":{"id":2115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2112,"mutability":"mutable","name":"x","nameLocation":"12717:1:3","nodeType":"VariableDeclaration","scope":2183,"src":"12709:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2111,"name":"uint256","nodeType":"ElementaryTypeName","src":"12709:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2114,"mutability":"mutable","name":"y","nameLocation":"12728:1:3","nodeType":"VariableDeclaration","scope":2183,"src":"12720:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2113,"name":"uint256","nodeType":"ElementaryTypeName","src":"12720:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12708:22:3"},"returnParameters":{"id":2118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2117,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2183,"src":"12754:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2116,"name":"bool","nodeType":"ElementaryTypeName","src":"12754:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12753:6:3"},"scope":2797,"src":"12684:440:3","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2270,"nodeType":"Block","src":"13334:391:3","statements":[{"assignments":[2200],"declarations":[{"constant":false,"id":2200,"mutability":"mutable","name":"zz0","nameLocation":"13352:3:3","nodeType":"VariableDeclaration","scope":2270,"src":"13344:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2199,"name":"uint256","nodeType":"ElementaryTypeName","src":"13344:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2201,"nodeType":"VariableDeclarationStatement","src":"13344:11:3"},{"assignments":[2203],"declarations":[{"constant":false,"id":2203,"mutability":"mutable","name":"zzz0","nameLocation":"13373:4:3","nodeType":"VariableDeclaration","scope":2270,"src":"13365:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2202,"name":"uint256","nodeType":"ElementaryTypeName","src":"13365:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2204,"nodeType":"VariableDeclarationStatement","src":"13365:12:3"},{"condition":{"arguments":[{"id":2206,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2186,"src":"13405:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2207,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2188,"src":"13409:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2205,"name":"ecAff_IsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2109,"src":"13392:12:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":2208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13392:20:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2213,"nodeType":"IfStatement","src":"13388:41:3","trueBody":{"expression":{"components":[{"id":2209,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2190,"src":"13422:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2210,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2192,"src":"13426:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2211,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13421:8:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":2198,"id":2212,"nodeType":"Return","src":"13414:15:3"}},{"condition":{"arguments":[{"id":2215,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2190,"src":"13456:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2216,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2192,"src":"13460:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2214,"name":"ecAff_IsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2109,"src":"13443:12:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":2217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13443:20:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2222,"nodeType":"IfStatement","src":"13439:41:3","trueBody":{"expression":{"components":[{"id":2218,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2186,"src":"13473:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2219,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2188,"src":"13477:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2220,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13472:8:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":2198,"id":2221,"nodeType":"Return","src":"13465:15:3"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2223,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2186,"src":"13494:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2224,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2190,"src":"13498:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13494:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2226,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13493:8:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2227,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2188,"src":"13504:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2228,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2192,"src":"13508:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13504:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2230,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13503:8:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13493:18:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2261,"nodeType":"Block","src":"13593:78:3","statements":[{"expression":{"id":2259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":2246,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2186,"src":"13608:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2247,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2188,"src":"13612:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2248,"name":"zz0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"13616:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2249,"name":"zzz0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"13621:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2250,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13607:19:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2252,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2186,"src":"13639:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2253,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2188,"src":"13643:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":2254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13647:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"31","id":2255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13650:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"id":2256,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2190,"src":"13653:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2257,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2192,"src":"13657:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2251,"name":"ecZZ_AddN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2042,"src":"13629:9:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256)"}},"id":2258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13629:31:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"13607:53:3","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2260,"nodeType":"ExpressionStatement","src":"13607:53:3"}]},"id":2262,"nodeType":"IfStatement","src":"13490:181:3","trueBody":{"id":2245,"nodeType":"Block","src":"13513:67:3","statements":[{"expression":{"id":2243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":2232,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2186,"src":"13528:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2233,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2188,"src":"13532:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2234,"name":"zz0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"13536:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2235,"name":"zzz0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"13541:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2236,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13527:19:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2238,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2186,"src":"13558:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2239,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2188,"src":"13562:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":2240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13565:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"31","id":2241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13567:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":2237,"name":"ecZZ_Dbl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1998,"src":"13549:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256)"}},"id":2242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13549:20:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"13527:42:3","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2244,"nodeType":"ExpressionStatement","src":"13527:42:3"}]}},{"expression":{"arguments":[{"id":2264,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2186,"src":"13700:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2265,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2188,"src":"13704:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2266,"name":"zz0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"13708:3:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2267,"name":"zzz0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"13713:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2263,"name":"ecZZ_SetAff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1969,"src":"13688:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":2268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13688:30:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":2198,"id":2269,"nodeType":"Return","src":"13681:37:3"}]},"documentation":{"id":2184,"nodeType":"StructuredDocumentation","src":"13130:90:3","text":" @dev Add two elliptic curve points in affine coordinates. Deal with P=Q"},"id":2271,"implemented":true,"kind":"function","modifiers":[],"name":"ecAff_add","nameLocation":"13235:9:3","nodeType":"FunctionDefinition","parameters":{"id":2193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2186,"mutability":"mutable","name":"x0","nameLocation":"13253:2:3","nodeType":"VariableDeclaration","scope":2271,"src":"13245:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2185,"name":"uint256","nodeType":"ElementaryTypeName","src":"13245:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2188,"mutability":"mutable","name":"y0","nameLocation":"13265:2:3","nodeType":"VariableDeclaration","scope":2271,"src":"13257:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2187,"name":"uint256","nodeType":"ElementaryTypeName","src":"13257:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2190,"mutability":"mutable","name":"x1","nameLocation":"13277:2:3","nodeType":"VariableDeclaration","scope":2271,"src":"13269:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2189,"name":"uint256","nodeType":"ElementaryTypeName","src":"13269:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2192,"mutability":"mutable","name":"y1","nameLocation":"13289:2:3","nodeType":"VariableDeclaration","scope":2271,"src":"13281:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2191,"name":"uint256","nodeType":"ElementaryTypeName","src":"13281:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13244:48:3"},"returnParameters":{"id":2198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2195,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2271,"src":"13316:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2194,"name":"uint256","nodeType":"ElementaryTypeName","src":"13316:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2197,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2271,"src":"13325:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2196,"name":"uint256","nodeType":"ElementaryTypeName","src":"13325:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13315:18:3"},"scope":2797,"src":"13226:499:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2354,"nodeType":"Block","src":"14090:6333:3","statements":[{"assignments":[2286],"declarations":[{"constant":false,"id":2286,"mutability":"mutable","name":"zz","nameLocation":"14108:2:3","nodeType":"VariableDeclaration","scope":2354,"src":"14100:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2285,"name":"uint256","nodeType":"ElementaryTypeName","src":"14100:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2287,"nodeType":"VariableDeclarationStatement","src":"14100:10:3"},{"assignments":[2289],"declarations":[{"constant":false,"id":2289,"mutability":"mutable","name":"zzz","nameLocation":"14128:3:3","nodeType":"VariableDeclaration","scope":2354,"src":"14120:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2288,"name":"uint256","nodeType":"ElementaryTypeName","src":"14120:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2290,"nodeType":"VariableDeclarationStatement","src":"14120:11:3"},{"assignments":[2292],"declarations":[{"constant":false,"id":2292,"mutability":"mutable","name":"Y","nameLocation":"14149:1:3","nodeType":"VariableDeclaration","scope":2354,"src":"14141:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2291,"name":"uint256","nodeType":"ElementaryTypeName","src":"14141:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2293,"nodeType":"VariableDeclarationStatement","src":"14141:9:3"},{"assignments":[2295],"declarations":[{"constant":false,"id":2295,"mutability":"mutable","name":"index","nameLocation":"14168:5:3","nodeType":"VariableDeclaration","scope":2354,"src":"14160:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2294,"name":"uint256","nodeType":"ElementaryTypeName","src":"14160:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2297,"initialValue":{"hexValue":"323535","id":2296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14176:3:3","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"nodeType":"VariableDeclarationStatement","src":"14160:19:3"},{"assignments":[2299],"declarations":[{"constant":false,"id":2299,"mutability":"mutable","name":"H0","nameLocation":"14197:2:3","nodeType":"VariableDeclaration","scope":2354,"src":"14189:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2298,"name":"uint256","nodeType":"ElementaryTypeName","src":"14189:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2300,"nodeType":"VariableDeclarationStatement","src":"14189:10:3"},{"assignments":[2302],"declarations":[{"constant":false,"id":2302,"mutability":"mutable","name":"H1","nameLocation":"14217:2:3","nodeType":"VariableDeclaration","scope":2354,"src":"14209:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2301,"name":"uint256","nodeType":"ElementaryTypeName","src":"14209:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2303,"nodeType":"VariableDeclarationStatement","src":"14209:10:3"},{"id":2351,"nodeType":"UncheckedBlock","src":"14230:6152:3","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2304,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2278,"src":"14258:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14270:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14258:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2307,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"14275:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2308,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14287:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14275:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14258:30:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2313,"nodeType":"IfStatement","src":"14254:44:3","trueBody":{"expression":{"hexValue":"30","id":2311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14297:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":2284,"id":2312,"nodeType":"Return","src":"14290:8:3"}},{"expression":{"id":2323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":2314,"name":"H0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2299,"src":"14314:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2315,"name":"H1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2302,"src":"14318:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2316,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"14313:8:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2318,"name":"gx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1483,"src":"14334:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2319,"name":"gy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1486,"src":"14338:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2320,"name":"Q0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2274,"src":"14342:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2321,"name":"Q1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2276,"src":"14346:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2317,"name":"ecAff_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2271,"src":"14324:9:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":2322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14324:25:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"14313:36:3","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2324,"nodeType":"ExpressionStatement","src":"14313:36:3"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2325,"name":"H0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2299,"src":"14368:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14372:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14368:5:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2328,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14367:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2329,"name":"H1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2302,"src":"14377:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14381:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14377:5:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2332,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14376:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14367:16:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2349,"nodeType":"IfStatement","src":"14364:150:3","trueBody":{"id":2348,"nodeType":"Block","src":"14412:102:3","statements":[{"expression":{"id":2342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2334,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2278,"src":"14430:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2336,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2278,"src":"14446:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2337,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1489,"src":"14456:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2338,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"14458:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14456:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2340,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1489,"src":"14468:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2335,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"14439:6:3","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14439:31:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14430:40:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2343,"nodeType":"ExpressionStatement","src":"14430:40:3"},{"expression":{"id":2346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2344,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"14488:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":2345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14497:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14488:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2347,"nodeType":"ExpressionStatement","src":"14488:10:3"}]}},{"AST":{"nodeType":"YulBlock","src":"14536:5821:3","statements":[{"body":{"nodeType":"YulBlock","src":"14815:2:3","statements":[]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"14647:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"14651:1:3","type":"","value":"0"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14644:2:3"},"nodeType":"YulFunctionCall","src":"14644:9:3"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"14654:160:3","statements":[{"nodeType":"YulAssignment","src":"14676:22:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14689:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"14696:1:3","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14685:3:3"},"nodeType":"YulFunctionCall","src":"14685:13:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"14676:5:3"}]},{"nodeType":"YulAssignment","src":"14719:77:3","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14733:1:3","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14744:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"14751:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14740:3:3"},"nodeType":"YulFunctionCall","src":"14740:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"14762:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14736:3:3"},"nodeType":"YulFunctionCall","src":"14736:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14729:3:3"},"nodeType":"YulFunctionCall","src":"14729:36:3"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14775:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"14782:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14771:3:3"},"nodeType":"YulFunctionCall","src":"14771:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"14793:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14767:3:3"},"nodeType":"YulFunctionCall","src":"14767:28:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14725:3:3"},"nodeType":"YulFunctionCall","src":"14725:71:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"14719:2:3"}]}]},"pre":{"nodeType":"YulBlock","src":"14558:85:3","statements":[{"nodeType":"YulVariableDeclaration","src":"14560:81:3","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14578:1:3","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14589:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"14596:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14585:3:3"},"nodeType":"YulFunctionCall","src":"14585:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"14607:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14581:3:3"},"nodeType":"YulFunctionCall","src":"14581:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14574:3:3"},"nodeType":"YulFunctionCall","src":"14574:36:3"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14620:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"14627:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14616:3:3"},"nodeType":"YulFunctionCall","src":"14616:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"14638:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14612:3:3"},"nodeType":"YulFunctionCall","src":"14612:28:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14570:3:3"},"nodeType":"YulFunctionCall","src":"14570:71:3"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"14564:2:3","type":""}]}]},"src":"14554:263:3"},{"nodeType":"YulAssignment","src":"14834:77:3","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14848:1:3","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14859:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"14866:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14855:3:3"},"nodeType":"YulFunctionCall","src":"14855:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"14877:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14851:3:3"},"nodeType":"YulFunctionCall","src":"14851:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14844:3:3"},"nodeType":"YulFunctionCall","src":"14844:36:3"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14890:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"14897:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14886:3:3"},"nodeType":"YulFunctionCall","src":"14886:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"14908:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14882:3:3"},"nodeType":"YulFunctionCall","src":"14882:28:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14840:3:3"},"nodeType":"YulFunctionCall","src":"14840:71:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"14834:2:3"}]},{"body":{"nodeType":"YulBlock","src":"14942:75:3","statements":[{"nodeType":"YulAssignment","src":"14964:7:3","value":{"name":"gx","nodeType":"YulIdentifier","src":"14969:2:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"14964:1:3"}]},{"nodeType":"YulAssignment","src":"14992:7:3","value":{"name":"gy","nodeType":"YulIdentifier","src":"14997:2:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"14992:1:3"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"14935:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"14939:1:3","type":"","value":"1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14932:2:3"},"nodeType":"YulFunctionCall","src":"14932:9:3"},"nodeType":"YulIf","src":"14929:88:3"},{"body":{"nodeType":"YulBlock","src":"15047:75:3","statements":[{"nodeType":"YulAssignment","src":"15069:7:3","value":{"name":"Q0","nodeType":"YulIdentifier","src":"15074:2:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"15069:1:3"}]},{"nodeType":"YulAssignment","src":"15097:7:3","value":{"name":"Q1","nodeType":"YulIdentifier","src":"15102:2:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"15097:1:3"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"15040:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"15044:1:3","type":"","value":"2"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"15037:2:3"},"nodeType":"YulFunctionCall","src":"15037:9:3"},"nodeType":"YulIf","src":"15034:88:3"},{"body":{"nodeType":"YulBlock","src":"15152:75:3","statements":[{"nodeType":"YulAssignment","src":"15174:7:3","value":{"name":"H0","nodeType":"YulIdentifier","src":"15179:2:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"15174:1:3"}]},{"nodeType":"YulAssignment","src":"15202:7:3","value":{"name":"H1","nodeType":"YulIdentifier","src":"15207:2:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"15202:1:3"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"15145:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"15149:1:3","type":"","value":"3"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"15142:2:3"},"nodeType":"YulFunctionCall","src":"15142:9:3"},"nodeType":"YulIf","src":"15139:88:3"},{"nodeType":"YulAssignment","src":"15245:22:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"15258:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"15265:1:3","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15254:3:3"},"nodeType":"YulFunctionCall","src":"15254:13:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"15245:5:3"}]},{"nodeType":"YulAssignment","src":"15284:7:3","value":{"kind":"number","nodeType":"YulLiteral","src":"15290:1:3","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"15284:2:3"}]},{"nodeType":"YulAssignment","src":"15308:8:3","value":{"kind":"number","nodeType":"YulLiteral","src":"15315:1:3","type":"","value":"1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"15308:3:3"}]},{"body":{"nodeType":"YulBlock","src":"15387:3972:3","statements":[{"nodeType":"YulVariableDeclaration","src":"15449:25:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15466:1:3","type":"","value":"2"},{"name":"Y","nodeType":"YulIdentifier","src":"15469:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"15472:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15459:6:3"},"nodeType":"YulFunctionCall","src":"15459:15:3"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"15453:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15514:27:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"15531:2:3"},{"name":"T1","nodeType":"YulIdentifier","src":"15535:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"15539:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15524:6:3"},"nodeType":"YulFunctionCall","src":"15524:17:3"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"15518:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15571:26:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"15588:1:3"},{"name":"T2","nodeType":"YulIdentifier","src":"15591:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"15595:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15581:6:3"},"nodeType":"YulFunctionCall","src":"15581:16:3"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"15575:2:3","type":""}]},{"nodeType":"YulAssignment","src":"15630:23:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"15643:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"15647:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"15651:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15636:6:3"},"nodeType":"YulFunctionCall","src":"15636:17:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"15630:2:3"}]},{"nodeType":"YulVariableDeclaration","src":"15682:77:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15699:1:3","type":"","value":"3"},{"arguments":[{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"15716:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"15723:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"15726:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15719:3:3"},"nodeType":"YulFunctionCall","src":"15719:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"15731:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"15709:6:3"},"nodeType":"YulFunctionCall","src":"15709:24:3"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"15742:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"15745:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"15749:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"15735:6:3"},"nodeType":"YulFunctionCall","src":"15735:16:3"},{"name":"p","nodeType":"YulIdentifier","src":"15753:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15702:6:3"},"nodeType":"YulFunctionCall","src":"15702:53:3"},{"name":"p","nodeType":"YulIdentifier","src":"15757:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15692:6:3"},"nodeType":"YulFunctionCall","src":"15692:67:3"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"15686:2:3","type":""}]},{"nodeType":"YulAssignment","src":"15804:25:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"15818:2:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"15822:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"15827:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15811:6:3"},"nodeType":"YulFunctionCall","src":"15811:18:3"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"15804:3:3"}]},{"nodeType":"YulAssignment","src":"15864:23:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"15877:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"15881:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"15885:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15870:6:3"},"nodeType":"YulFunctionCall","src":"15870:17:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"15864:2:3"}]},{"nodeType":"YulAssignment","src":"15929:57:3","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"15948:2:3"},{"name":"T4","nodeType":"YulIdentifier","src":"15952:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"15956:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15941:6:3"},"nodeType":"YulFunctionCall","src":"15941:17:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"15967:7:3"},{"name":"T3","nodeType":"YulIdentifier","src":"15976:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"15980:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15960:6:3"},"nodeType":"YulFunctionCall","src":"15960:22:3"},{"name":"p","nodeType":"YulIdentifier","src":"15984:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"15934:6:3"},"nodeType":"YulFunctionCall","src":"15934:52:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"15929:1:3"}]},{"nodeType":"YulAssignment","src":"16019:45:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"16032:2:3"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"16043:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"16050:1:3"},{"name":"T3","nodeType":"YulIdentifier","src":"16053:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16046:3:3"},"nodeType":"YulFunctionCall","src":"16046:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"16058:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"16036:6:3"},"nodeType":"YulFunctionCall","src":"16036:24:3"},{"name":"p","nodeType":"YulIdentifier","src":"16062:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"16025:6:3"},"nodeType":"YulFunctionCall","src":"16025:39:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"16019:2:3"}]},{"nodeType":"YulAssignment","src":"16104:36:3","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"16123:2:3"},{"name":"Y","nodeType":"YulIdentifier","src":"16127:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"16130:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"16116:6:3"},"nodeType":"YulFunctionCall","src":"16116:16:3"},{"name":"T2","nodeType":"YulIdentifier","src":"16134:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"16138:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"16109:6:3"},"nodeType":"YulFunctionCall","src":"16109:31:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"16104:1:3"}]},{"nodeType":"YulBlock","src":"16226:3115:3","statements":[{"nodeType":"YulAssignment","src":"16293:77:3","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16307:1:3","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"16318:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"16325:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"16314:3:3"},"nodeType":"YulFunctionCall","src":"16314:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"16336:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16310:3:3"},"nodeType":"YulFunctionCall","src":"16310:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16303:3:3"},"nodeType":"YulFunctionCall","src":"16303:36:3"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"16349:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"16356:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"16345:3:3"},"nodeType":"YulFunctionCall","src":"16345:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"16367:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16341:3:3"},"nodeType":"YulFunctionCall","src":"16341:28:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16299:3:3"},"nodeType":"YulFunctionCall","src":"16299:71:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"16293:2:3"}]},{"body":{"nodeType":"YulBlock","src":"16410:134:3","statements":[{"nodeType":"YulAssignment","src":"16440:14:3","value":{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"16449:1:3"},{"name":"Y","nodeType":"YulIdentifier","src":"16452:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16445:3:3"},"nodeType":"YulFunctionCall","src":"16445:9:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"16440:1:3"}]},{"nodeType":"YulContinue","src":"16510:8:3"}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"16406:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16399:6:3"},"nodeType":"YulFunctionCall","src":"16399:10:3"},"nodeType":"YulIf","src":"16396:148:3"},{"body":{"nodeType":"YulBlock","src":"16595:101:3","statements":[{"nodeType":"YulAssignment","src":"16625:8:3","value":{"name":"gx","nodeType":"YulIdentifier","src":"16631:2:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"16625:2:3"}]},{"nodeType":"YulAssignment","src":"16662:8:3","value":{"name":"gy","nodeType":"YulIdentifier","src":"16668:2:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"16662:2:3"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"16588:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"16592:1:3","type":"","value":"1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16585:2:3"},"nodeType":"YulFunctionCall","src":"16585:9:3"},"nodeType":"YulIf","src":"16582:114:3"},{"body":{"nodeType":"YulBlock","src":"16734:101:3","statements":[{"nodeType":"YulAssignment","src":"16764:8:3","value":{"name":"Q0","nodeType":"YulIdentifier","src":"16770:2:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"16764:2:3"}]},{"nodeType":"YulAssignment","src":"16801:8:3","value":{"name":"Q1","nodeType":"YulIdentifier","src":"16807:2:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"16801:2:3"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"16727:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"16731:1:3","type":"","value":"2"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16724:2:3"},"nodeType":"YulFunctionCall","src":"16724:9:3"},"nodeType":"YulIf","src":"16721:114:3"},{"body":{"nodeType":"YulBlock","src":"16873:101:3","statements":[{"nodeType":"YulAssignment","src":"16903:8:3","value":{"name":"H0","nodeType":"YulIdentifier","src":"16909:2:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"16903:2:3"}]},{"nodeType":"YulAssignment","src":"16940:8:3","value":{"name":"H1","nodeType":"YulIdentifier","src":"16946:2:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"16940:2:3"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"16866:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"16870:1:3","type":"","value":"3"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16863:2:3"},"nodeType":"YulFunctionCall","src":"16863:9:3"},"nodeType":"YulIf","src":"16860:114:3"},{"body":{"nodeType":"YulBlock","src":"17013:209:3","statements":[{"nodeType":"YulAssignment","src":"17043:7:3","value":{"name":"T1","nodeType":"YulIdentifier","src":"17048:2:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"17043:1:3"}]},{"nodeType":"YulAssignment","src":"17079:7:3","value":{"name":"T2","nodeType":"YulIdentifier","src":"17084:2:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"17079:1:3"}]},{"nodeType":"YulAssignment","src":"17115:7:3","value":{"kind":"number","nodeType":"YulLiteral","src":"17121:1:3","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"17115:2:3"}]},{"nodeType":"YulAssignment","src":"17151:8:3","value":{"kind":"number","nodeType":"YulLiteral","src":"17158:1:3","type":"","value":"1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"17151:3:3"}]},{"nodeType":"YulContinue","src":"17188:8:3"}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"17009:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17002:6:3"},"nodeType":"YulFunctionCall","src":"17002:10:3"},"nodeType":"YulIf","src":"16999:223:3"},{"nodeType":"YulVariableDeclaration","src":"17365:42:3","value":{"arguments":[{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"17389:2:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"17393:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"17398:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17382:6:3"},"nodeType":"YulFunctionCall","src":"17382:18:3"},{"name":"Y","nodeType":"YulIdentifier","src":"17402:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"17405:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"17375:6:3"},"nodeType":"YulFunctionCall","src":"17375:32:3"},"variables":[{"name":"y2","nodeType":"YulTypedName","src":"17369:2:3","type":""}]},{"nodeType":"YulAssignment","src":"17436:45:3","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"17456:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"17460:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"17464:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17449:6:3"},"nodeType":"YulFunctionCall","src":"17449:17:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"17472:1:3"},{"name":"X","nodeType":"YulIdentifier","src":"17475:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17468:3:3"},"nodeType":"YulFunctionCall","src":"17468:9:3"},{"name":"p","nodeType":"YulIdentifier","src":"17479:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"17442:6:3"},"nodeType":"YulFunctionCall","src":"17442:39:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"17436:2:3"}]},{"body":{"nodeType":"YulBlock","src":"17710:1029:3","statements":[{"body":{"nodeType":"YulBlock","src":"17754:959:3","statements":[{"nodeType":"YulAssignment","src":"17788:27:3","value":{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"17801:7:3"},{"name":"Y","nodeType":"YulIdentifier","src":"17810:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"17813:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17794:6:3"},"nodeType":"YulFunctionCall","src":"17794:21:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"17788:2:3"}]},{"nodeType":"YulAssignment","src":"17867:23:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"17880:2:3"},{"name":"T1","nodeType":"YulIdentifier","src":"17884:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"17888:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17873:6:3"},"nodeType":"YulFunctionCall","src":"17873:17:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"17867:2:3"}]},{"nodeType":"YulAssignment","src":"17932:22:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"17945:1:3"},{"name":"T2","nodeType":"YulIdentifier","src":"17948:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"17952:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17938:6:3"},"nodeType":"YulFunctionCall","src":"17938:16:3"},"variableNames":[{"name":"T3","nodeType":"YulIdentifier","src":"17932:2:3"}]},{"nodeType":"YulAssignment","src":"18000:23:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"18013:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"18017:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"18021:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18006:6:3"},"nodeType":"YulFunctionCall","src":"18006:17:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"18000:2:3"}]},{"nodeType":"YulAssignment","src":"18064:59:3","value":{"arguments":[{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"18084:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"18087:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"18091:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"18077:6:3"},"nodeType":"YulFunctionCall","src":"18077:16:3"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"18102:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"18109:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"18112:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18105:3:3"},"nodeType":"YulFunctionCall","src":"18105:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"18117:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"18095:6:3"},"nodeType":"YulFunctionCall","src":"18095:24:3"},{"name":"p","nodeType":"YulIdentifier","src":"18121:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18070:6:3"},"nodeType":"YulFunctionCall","src":"18070:53:3"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"18064:2:3"}]},{"nodeType":"YulAssignment","src":"18171:22:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18184:1:3","type":"","value":"3"},{"name":"y2","nodeType":"YulIdentifier","src":"18187:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"18191:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18177:6:3"},"nodeType":"YulFunctionCall","src":"18177:16:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"18171:2:3"}]},{"nodeType":"YulAssignment","src":"18246:25:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"18260:2:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"18264:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"18269:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18253:6:3"},"nodeType":"YulFunctionCall","src":"18253:18:3"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"18246:3:3"}]},{"nodeType":"YulAssignment","src":"18318:23:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"18331:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"18335:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"18339:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18324:6:3"},"nodeType":"YulFunctionCall","src":"18324:17:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"18318:2:3"}]},{"nodeType":"YulAssignment","src":"18395:57:3","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"18414:2:3"},{"name":"T4","nodeType":"YulIdentifier","src":"18418:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"18422:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18407:6:3"},"nodeType":"YulFunctionCall","src":"18407:17:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"18433:7:3"},{"name":"T3","nodeType":"YulIdentifier","src":"18442:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"18446:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18426:6:3"},"nodeType":"YulFunctionCall","src":"18426:22:3"},{"name":"p","nodeType":"YulIdentifier","src":"18450:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"18400:6:3"},"nodeType":"YulFunctionCall","src":"18400:52:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"18395:1:3"}]},{"nodeType":"YulAssignment","src":"18497:45:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"18510:2:3"},{"arguments":[{"name":"T3","nodeType":"YulIdentifier","src":"18521:2:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"18529:1:3"},{"name":"X","nodeType":"YulIdentifier","src":"18532:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18525:3:3"},"nodeType":"YulFunctionCall","src":"18525:9:3"},{"name":"p","nodeType":"YulIdentifier","src":"18536:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"18514:6:3"},"nodeType":"YulFunctionCall","src":"18514:24:3"},{"name":"p","nodeType":"YulIdentifier","src":"18540:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18503:6:3"},"nodeType":"YulFunctionCall","src":"18503:39:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"18497:2:3"}]},{"nodeType":"YulAssignment","src":"18586:36:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"18598:2:3"},{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"18609:2:3"},{"name":"Y","nodeType":"YulIdentifier","src":"18613:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"18616:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18602:6:3"},"nodeType":"YulFunctionCall","src":"18602:16:3"},{"name":"p","nodeType":"YulIdentifier","src":"18620:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"18591:6:3"},"nodeType":"YulFunctionCall","src":"18591:31:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"18586:1:3"}]},{"nodeType":"YulContinue","src":"18675:8:3"}]},"condition":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"17750:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17743:6:3"},"nodeType":"YulFunctionCall","src":"17743:10:3"},"nodeType":"YulIf","src":"17740:973:3"}]},"condition":{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"17706:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17699:6:3"},"nodeType":"YulFunctionCall","src":"17699:10:3"},"nodeType":"YulIf","src":"17696:1043:3"},{"nodeType":"YulAssignment","src":"18765:23:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"18778:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"18782:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"18786:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18771:6:3"},"nodeType":"YulFunctionCall","src":"18771:17:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"18765:2:3"}]},{"nodeType":"YulVariableDeclaration","src":"18818:28:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"18836:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"18840:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"18844:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18829:6:3"},"nodeType":"YulFunctionCall","src":"18829:17:3"},"variables":[{"name":"TT1","nodeType":"YulTypedName","src":"18822:3:3","type":""}]},{"nodeType":"YulAssignment","src":"18939:23:3","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"18952:2:3"},{"name":"T4","nodeType":"YulIdentifier","src":"18956:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"18960:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18945:6:3"},"nodeType":"YulFunctionCall","src":"18945:17:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"18939:2:3"}]},{"nodeType":"YulAssignment","src":"18987:26:3","value":{"arguments":[{"name":"zzz","nodeType":"YulIdentifier","src":"19001:3:3"},{"name":"TT1","nodeType":"YulIdentifier","src":"19006:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"19011:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18994:6:3"},"nodeType":"YulFunctionCall","src":"18994:19:3"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"18987:3:3"}]},{"nodeType":"YulVariableDeclaration","src":"19050:27:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"19068:1:3"},{"name":"T4","nodeType":"YulIdentifier","src":"19071:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"19075:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"19061:6:3"},"nodeType":"YulFunctionCall","src":"19061:16:3"},"variables":[{"name":"TT2","nodeType":"YulTypedName","src":"19054:3:3","type":""}]},{"nodeType":"YulAssignment","src":"19102:83:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"19129:2:3"},{"name":"y2","nodeType":"YulIdentifier","src":"19133:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"19137:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"19122:6:3"},"nodeType":"YulFunctionCall","src":"19122:17:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"19145:1:3"},{"name":"TT1","nodeType":"YulIdentifier","src":"19148:3:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19141:3:3"},"nodeType":"YulFunctionCall","src":"19141:11:3"},{"name":"p","nodeType":"YulIdentifier","src":"19154:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"19115:6:3"},"nodeType":"YulFunctionCall","src":"19115:41:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"19165:7:3"},{"name":"TT2","nodeType":"YulIdentifier","src":"19174:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"19179:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"19158:6:3"},"nodeType":"YulFunctionCall","src":"19158:23:3"},{"name":"p","nodeType":"YulIdentifier","src":"19183:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"19108:6:3"},"nodeType":"YulFunctionCall","src":"19108:77:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"19102:2:3"}]},{"nodeType":"YulAssignment","src":"19210:76:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"TT2","nodeType":"YulIdentifier","src":"19236:3:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"19245:1:3"},{"name":"T4","nodeType":"YulIdentifier","src":"19248:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19241:3:3"},"nodeType":"YulFunctionCall","src":"19241:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"19253:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"19229:6:3"},"nodeType":"YulFunctionCall","src":"19229:26:3"},{"name":"y2","nodeType":"YulIdentifier","src":"19257:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"19261:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"19222:6:3"},"nodeType":"YulFunctionCall","src":"19222:41:3"},{"arguments":[{"name":"Y","nodeType":"YulIdentifier","src":"19272:1:3"},{"name":"TT1","nodeType":"YulIdentifier","src":"19275:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"19280:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"19265:6:3"},"nodeType":"YulFunctionCall","src":"19265:17:3"},{"name":"p","nodeType":"YulIdentifier","src":"19284:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"19215:6:3"},"nodeType":"YulFunctionCall","src":"19215:71:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"19210:1:3"}]},{"nodeType":"YulAssignment","src":"19312:7:3","value":{"name":"T4","nodeType":"YulIdentifier","src":"19317:2:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"19312:1:3"}]}]}]},"condition":{"arguments":[{"name":"minus_1","nodeType":"YulIdentifier","src":"15344:7:3"},{"name":"index","nodeType":"YulIdentifier","src":"15353:5:3"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15341:2:3"},"nodeType":"YulFunctionCall","src":"15341:18:3"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"15360:26:3","statements":[{"nodeType":"YulAssignment","src":"15362:22:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"15375:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"15382:1:3","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15371:3:3"},"nodeType":"YulFunctionCall","src":"15371:13:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"15362:5:3"}]}]},"pre":{"nodeType":"YulBlock","src":"15338:2:3","statements":[]},"src":"15334:4025:3"},{"nodeType":"YulVariableDeclaration","src":"19387:20:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19402:4:3","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19396:5:3"},"nodeType":"YulFunctionCall","src":"19396:11:3"},"variables":[{"name":"T","nodeType":"YulTypedName","src":"19391:1:3","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19435:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"19438:4:3","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19431:3:3"},"nodeType":"YulFunctionCall","src":"19431:12:3"},{"name":"zz","nodeType":"YulIdentifier","src":"19445:2:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19424:6:3"},"nodeType":"YulFunctionCall","src":"19424:24:3"},"nodeType":"YulExpressionStatement","src":"19424:24:3"},{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19707:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"19710:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19700:6:3"},"nodeType":"YulFunctionCall","src":"19700:15:3"},"nodeType":"YulExpressionStatement","src":"19700:15:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19743:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"19746:4:3","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19739:3:3"},"nodeType":"YulFunctionCall","src":"19739:12:3"},{"kind":"number","nodeType":"YulLiteral","src":"19753:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19732:6:3"},"nodeType":"YulFunctionCall","src":"19732:26:3"},"nodeType":"YulExpressionStatement","src":"19732:26:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19786:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"19789:4:3","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19782:3:3"},"nodeType":"YulFunctionCall","src":"19782:12:3"},{"kind":"number","nodeType":"YulLiteral","src":"19796:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19775:6:3"},"nodeType":"YulFunctionCall","src":"19775:26:3"},"nodeType":"YulExpressionStatement","src":"19775:26:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19940:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"19943:4:3","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19936:3:3"},"nodeType":"YulFunctionCall","src":"19936:12:3"},{"name":"minus_2","nodeType":"YulIdentifier","src":"19950:7:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19929:6:3"},"nodeType":"YulFunctionCall","src":"19929:29:3"},"nodeType":"YulExpressionStatement","src":"19929:29:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19986:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"19989:4:3","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19982:3:3"},"nodeType":"YulFunctionCall","src":"19982:12:3"},{"name":"p","nodeType":"YulIdentifier","src":"19996:1:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19975:6:3"},"nodeType":"YulFunctionCall","src":"19975:23:3"},"nodeType":"YulExpressionStatement","src":"19975:23:3"},{"body":{"nodeType":"YulBlock","src":"20133:16:3","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20142:1:3","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20145:1:3","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20135:6:3"},"nodeType":"YulFunctionCall","src":"20135:12:3"},"nodeType":"YulExpressionStatement","src":"20135:12:3"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20104:1:3","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"20100:3:3"},"nodeType":"YulFunctionCall","src":"20100:6:3"},{"kind":"number","nodeType":"YulLiteral","src":"20108:4:3","type":"","value":"0x05"},{"name":"T","nodeType":"YulIdentifier","src":"20114:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"20117:4:3","type":"","value":"0xc0"},{"name":"T","nodeType":"YulIdentifier","src":"20123:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"20126:4:3","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"20089:10:3"},"nodeType":"YulFunctionCall","src":"20089:42:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20082:6:3"},"nodeType":"YulFunctionCall","src":"20082:50:3"},"nodeType":"YulIf","src":"20079:70:3"},{"nodeType":"YulAssignment","src":"20309:27:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"20321:1:3"},{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"20330:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20324:5:3"},"nodeType":"YulFunctionCall","src":"20324:8:3"},{"name":"p","nodeType":"YulIdentifier","src":"20334:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"20314:6:3"},"nodeType":"YulFunctionCall","src":"20314:22:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"20309:1:3"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2299,"isOffset":false,"isSlot":false,"src":"15179:2:3","valueSize":1},{"declaration":2299,"isOffset":false,"isSlot":false,"src":"16909:2:3","valueSize":1},{"declaration":2302,"isOffset":false,"isSlot":false,"src":"15207:2:3","valueSize":1},{"declaration":2302,"isOffset":false,"isSlot":false,"src":"16946:2:3","valueSize":1},{"declaration":2274,"isOffset":false,"isSlot":false,"src":"15074:2:3","valueSize":1},{"declaration":2274,"isOffset":false,"isSlot":false,"src":"16770:2:3","valueSize":1},{"declaration":2276,"isOffset":false,"isSlot":false,"src":"15102:2:3","valueSize":1},{"declaration":2276,"isOffset":false,"isSlot":false,"src":"16807:2:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"14964:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"15069:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"15174:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"15588:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"15716:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"15742:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"15929:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"16043:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"17043:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"17475:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"17945:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"18084:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"18102:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"18395:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"18532:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"19068:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"19312:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"20309:1:3","valueSize":1},{"declaration":2283,"isOffset":false,"isSlot":false,"src":"20321:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"14992:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"15097:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"15202:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"15469:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"16104:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"16127:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"16440:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"16452:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"17079:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"17402:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"17810:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"18586:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"18613:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"19210:1:3","valueSize":1},{"declaration":2292,"isOffset":false,"isSlot":false,"src":"19272:1:3","valueSize":1},{"declaration":1483,"isOffset":false,"isSlot":false,"src":"14969:2:3","valueSize":1},{"declaration":1483,"isOffset":false,"isSlot":false,"src":"16631:2:3","valueSize":1},{"declaration":1486,"isOffset":false,"isSlot":false,"src":"14997:2:3","valueSize":1},{"declaration":1486,"isOffset":false,"isSlot":false,"src":"16668:2:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"14589:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"14620:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"14676:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"14689:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"14744:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"14775:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"14859:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"14890:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"15245:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"15258:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"15353:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"15362:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"15375:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"16318:5:3","valueSize":1},{"declaration":2295,"isOffset":false,"isSlot":false,"src":"16349:5:3","valueSize":1},{"declaration":1498,"isOffset":false,"isSlot":false,"src":"15344:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"15967:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"17801:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"18433:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"19165:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"19950:7:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15472:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15539:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15595:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15651:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15723:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15731:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15749:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15753:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15757:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15827:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15885:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15956:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15980:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"15984:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"16050:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"16058:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"16062:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"16130:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"16138:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"16449:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"17398:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"17405:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"17464:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"17472:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"17479:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"17813:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"17888:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"17952:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18021:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18091:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18109:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18117:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18121:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18191:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18269:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18339:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18422:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18446:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18450:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18529:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18536:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18540:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18616:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18620:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18786:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18844:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"18960:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19011:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19075:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19137:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19145:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19154:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19179:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19183:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19245:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19253:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19261:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19280:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19284:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"19996:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"20334:1:3","valueSize":1},{"declaration":2278,"isOffset":false,"isSlot":false,"src":"14627:8:3","valueSize":1},{"declaration":2278,"isOffset":false,"isSlot":false,"src":"14782:8:3","valueSize":1},{"declaration":2278,"isOffset":false,"isSlot":false,"src":"14897:8:3","valueSize":1},{"declaration":2278,"isOffset":false,"isSlot":false,"src":"16356:8:3","valueSize":1},{"declaration":2280,"isOffset":false,"isSlot":false,"src":"14596:8:3","valueSize":1},{"declaration":2280,"isOffset":false,"isSlot":false,"src":"14751:8:3","valueSize":1},{"declaration":2280,"isOffset":false,"isSlot":false,"src":"14866:8:3","valueSize":1},{"declaration":2280,"isOffset":false,"isSlot":false,"src":"16325:8:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"14834:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"14935:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"15040:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"15145:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"15284:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"15726:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"15745:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"15864:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"15881:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"17009:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"17115:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"17460:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"18087:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"18112:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"18318:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"18335:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"18939:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"18952:2:3","valueSize":1},{"declaration":2286,"isOffset":false,"isSlot":false,"src":"19445:2:3","valueSize":1},{"declaration":2289,"isOffset":false,"isSlot":false,"src":"15308:3:3","valueSize":1},{"declaration":2289,"isOffset":false,"isSlot":false,"src":"15804:3:3","valueSize":1},{"declaration":2289,"isOffset":false,"isSlot":false,"src":"15822:3:3","valueSize":1},{"declaration":2289,"isOffset":false,"isSlot":false,"src":"17151:3:3","valueSize":1},{"declaration":2289,"isOffset":false,"isSlot":false,"src":"17393:3:3","valueSize":1},{"declaration":2289,"isOffset":false,"isSlot":false,"src":"18246:3:3","valueSize":1},{"declaration":2289,"isOffset":false,"isSlot":false,"src":"18264:3:3","valueSize":1},{"declaration":2289,"isOffset":false,"isSlot":false,"src":"18987:3:3","valueSize":1},{"declaration":2289,"isOffset":false,"isSlot":false,"src":"19001:3:3","valueSize":1}],"id":2350,"nodeType":"InlineAssembly","src":"14527:5830:3"}]},{"expression":{"id":2352,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"20415:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2284,"id":2353,"nodeType":"Return","src":"20408:8:3"}]},"documentation":{"id":2272,"nodeType":"StructuredDocumentation","src":"13731:161:3","text":" @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\n Returns only x for ECDSA use \n "},"id":2355,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_mulmuladd_S_asm","nameLocation":"13906:20:3","nodeType":"FunctionDefinition","parameters":{"id":2281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2274,"mutability":"mutable","name":"Q0","nameLocation":"13944:2:3","nodeType":"VariableDeclaration","scope":2355,"src":"13936:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2273,"name":"uint256","nodeType":"ElementaryTypeName","src":"13936:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2276,"mutability":"mutable","name":"Q1","nameLocation":"13964:2:3","nodeType":"VariableDeclaration","scope":2355,"src":"13956:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2275,"name":"uint256","nodeType":"ElementaryTypeName","src":"13956:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2278,"mutability":"mutable","name":"scalar_u","nameLocation":"14015:8:3","nodeType":"VariableDeclaration","scope":2355,"src":"14007:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2277,"name":"uint256","nodeType":"ElementaryTypeName","src":"14007:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2280,"mutability":"mutable","name":"scalar_v","nameLocation":"14041:8:3","nodeType":"VariableDeclaration","scope":2355,"src":"14033:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2279,"name":"uint256","nodeType":"ElementaryTypeName","src":"14033:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13926:129:3"},"returnParameters":{"id":2284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2283,"mutability":"mutable","name":"X","nameLocation":"14087:1:3","nodeType":"VariableDeclaration","scope":2355,"src":"14079:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2282,"name":"uint256","nodeType":"ElementaryTypeName","src":"14079:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14078:11:3"},"scope":2797,"src":"13897:6526:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2428,"nodeType":"Block","src":"20812:6321:3","statements":[{"assignments":[2372],"declarations":[{"constant":false,"id":2372,"mutability":"mutable","name":"zz","nameLocation":"20830:2:3","nodeType":"VariableDeclaration","scope":2428,"src":"20822:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2371,"name":"uint256","nodeType":"ElementaryTypeName","src":"20822:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2373,"nodeType":"VariableDeclarationStatement","src":"20822:10:3"},{"assignments":[2375],"declarations":[{"constant":false,"id":2375,"mutability":"mutable","name":"zzz","nameLocation":"20850:3:3","nodeType":"VariableDeclaration","scope":2428,"src":"20842:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2374,"name":"uint256","nodeType":"ElementaryTypeName","src":"20842:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2376,"nodeType":"VariableDeclarationStatement","src":"20842:11:3"},{"assignments":[2378],"declarations":[{"constant":false,"id":2378,"mutability":"mutable","name":"index","nameLocation":"20871:5:3","nodeType":"VariableDeclaration","scope":2428,"src":"20863:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2377,"name":"uint256","nodeType":"ElementaryTypeName","src":"20863:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2380,"initialValue":{"hexValue":"323535","id":2379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20879:3:3","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"nodeType":"VariableDeclarationStatement","src":"20863:19:3"},{"assignments":[2386],"declarations":[{"constant":false,"id":2386,"mutability":"mutable","name":"T","nameLocation":"20910:1:3","nodeType":"VariableDeclaration","scope":2428,"src":"20892:19:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6]"},"typeName":{"baseType":{"id":2384,"name":"uint256","nodeType":"ElementaryTypeName","src":"20892:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2385,"length":{"hexValue":"36","id":2383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20900:1:3","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"ArrayTypeName","src":"20892:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_storage_ptr","typeString":"uint256[6]"}},"visibility":"internal"}],"id":2387,"nodeType":"VariableDeclarationStatement","src":"20892:19:3"},{"assignments":[2393],"declarations":[{"constant":false,"id":2393,"mutability":"mutable","name":"H","nameLocation":"20939:1:3","nodeType":"VariableDeclaration","scope":2428,"src":"20921:19:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":2391,"name":"uint256","nodeType":"ElementaryTypeName","src":"20921:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2392,"length":{"hexValue":"32","id":2390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20929:1:3","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"20921:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"id":2394,"nodeType":"VariableDeclarationStatement","src":"20921:19:3"},{"id":2423,"nodeType":"UncheckedBlock","src":"20952:6136:3","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2395,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2362,"src":"20980:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20992:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20980:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2398,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2364,"src":"20997:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21009:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20997:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"20980:30:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2406,"nodeType":"IfStatement","src":"20976:48:3","trueBody":{"expression":{"components":[{"hexValue":"30","id":2402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21020:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":2403,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21022:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":2404,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"21019:5:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0)"}},"functionReturnParameters":2370,"id":2405,"nodeType":"Return","src":"21012:12:3"}},{"expression":{"id":2420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":2407,"name":"H","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2393,"src":"21040:1:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":2409,"indexExpression":{"hexValue":"30","id":2408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21042:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21040:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":2410,"name":"H","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2393,"src":"21046:1:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":2412,"indexExpression":{"hexValue":"31","id":2411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21048:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21046:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2413,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"21039:12:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2415,"name":"gx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1483,"src":"21064:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2416,"name":"gy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1486,"src":"21068:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2417,"name":"Q0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2358,"src":"21072:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2418,"name":"Q1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2360,"src":"21076:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2414,"name":"ecAff_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2271,"src":"21054:9:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":2419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21054:25:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"21039:40:3","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2421,"nodeType":"ExpressionStatement","src":"21039:40:3"},{"AST":{"nodeType":"YulBlock","src":"21157:5906:3","statements":[{"body":{"nodeType":"YulBlock","src":"21436:2:3","statements":[]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"21268:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"21272:1:3","type":"","value":"0"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"21265:2:3"},"nodeType":"YulFunctionCall","src":"21265:9:3"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"21275:160:3","statements":[{"nodeType":"YulAssignment","src":"21297:22:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21310:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"21317:1:3","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21306:3:3"},"nodeType":"YulFunctionCall","src":"21306:13:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"21297:5:3"}]},{"nodeType":"YulAssignment","src":"21340:77:3","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21354:1:3","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21365:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"21372:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21361:3:3"},"nodeType":"YulFunctionCall","src":"21361:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"21383:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21357:3:3"},"nodeType":"YulFunctionCall","src":"21357:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21350:3:3"},"nodeType":"YulFunctionCall","src":"21350:36:3"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21396:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"21403:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21392:3:3"},"nodeType":"YulFunctionCall","src":"21392:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"21414:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21388:3:3"},"nodeType":"YulFunctionCall","src":"21388:28:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21346:3:3"},"nodeType":"YulFunctionCall","src":"21346:71:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"21340:2:3"}]}]},"pre":{"nodeType":"YulBlock","src":"21179:85:3","statements":[{"nodeType":"YulVariableDeclaration","src":"21181:81:3","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21199:1:3","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21210:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"21217:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21206:3:3"},"nodeType":"YulFunctionCall","src":"21206:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"21228:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21202:3:3"},"nodeType":"YulFunctionCall","src":"21202:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21195:3:3"},"nodeType":"YulFunctionCall","src":"21195:36:3"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21241:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"21248:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21237:3:3"},"nodeType":"YulFunctionCall","src":"21237:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"21259:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21233:3:3"},"nodeType":"YulFunctionCall","src":"21233:28:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21191:3:3"},"nodeType":"YulFunctionCall","src":"21191:71:3"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"21185:2:3","type":""}]}]},"src":"21175:263:3"},{"nodeType":"YulAssignment","src":"21455:77:3","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21469:1:3","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21480:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"21487:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21476:3:3"},"nodeType":"YulFunctionCall","src":"21476:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"21498:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21472:3:3"},"nodeType":"YulFunctionCall","src":"21472:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21465:3:3"},"nodeType":"YulFunctionCall","src":"21465:36:3"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21511:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"21518:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21507:3:3"},"nodeType":"YulFunctionCall","src":"21507:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"21529:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21503:3:3"},"nodeType":"YulFunctionCall","src":"21503:28:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21461:3:3"},"nodeType":"YulFunctionCall","src":"21461:71:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"21455:2:3"}]},{"body":{"nodeType":"YulBlock","src":"21563:75:3","statements":[{"nodeType":"YulAssignment","src":"21585:7:3","value":{"name":"gx","nodeType":"YulIdentifier","src":"21590:2:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"21585:1:3"}]},{"nodeType":"YulAssignment","src":"21613:7:3","value":{"name":"gy","nodeType":"YulIdentifier","src":"21618:2:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"21613:1:3"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"21556:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"21560:1:3","type":"","value":"1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"21553:2:3"},"nodeType":"YulFunctionCall","src":"21553:9:3"},"nodeType":"YulIf","src":"21550:88:3"},{"body":{"nodeType":"YulBlock","src":"21668:75:3","statements":[{"nodeType":"YulAssignment","src":"21690:7:3","value":{"name":"Q0","nodeType":"YulIdentifier","src":"21695:2:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"21690:1:3"}]},{"nodeType":"YulAssignment","src":"21718:7:3","value":{"name":"Q1","nodeType":"YulIdentifier","src":"21723:2:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"21718:1:3"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"21661:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"21665:1:3","type":"","value":"2"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"21658:2:3"},"nodeType":"YulFunctionCall","src":"21658:9:3"},"nodeType":"YulIf","src":"21655:88:3"},{"body":{"nodeType":"YulBlock","src":"21773:95:3","statements":[{"nodeType":"YulAssignment","src":"21795:21:3","value":{"arguments":[{"arguments":[{"name":"H","nodeType":"YulIdentifier","src":"21810:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"21812:2:3","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21806:3:3"},"nodeType":"YulFunctionCall","src":"21806:9:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21800:5:3"},"nodeType":"YulFunctionCall","src":"21800:16:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"21795:1:3"}]},{"nodeType":"YulAssignment","src":"21837:13:3","value":{"arguments":[{"name":"H","nodeType":"YulIdentifier","src":"21848:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21842:5:3"},"nodeType":"YulFunctionCall","src":"21842:8:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"21837:1:3"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"21766:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"21770:1:3","type":"","value":"3"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"21763:2:3"},"nodeType":"YulFunctionCall","src":"21763:9:3"},"nodeType":"YulIf","src":"21760:108:3"},{"nodeType":"YulAssignment","src":"21886:22:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21899:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"21906:1:3","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21895:3:3"},"nodeType":"YulFunctionCall","src":"21895:13:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"21886:5:3"}]},{"nodeType":"YulAssignment","src":"21925:7:3","value":{"kind":"number","nodeType":"YulLiteral","src":"21931:1:3","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"21925:2:3"}]},{"nodeType":"YulAssignment","src":"21949:8:3","value":{"kind":"number","nodeType":"YulLiteral","src":"21956:1:3","type":"","value":"1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"21949:3:3"}]},{"body":{"nodeType":"YulBlock","src":"22028:4080:3","statements":[{"nodeType":"YulVariableDeclaration","src":"22090:25:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22107:1:3","type":"","value":"2"},{"name":"Y","nodeType":"YulIdentifier","src":"22110:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"22113:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22100:6:3"},"nodeType":"YulFunctionCall","src":"22100:15:3"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"22094:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"22155:27:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"22172:2:3"},{"name":"T1","nodeType":"YulIdentifier","src":"22176:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"22180:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22165:6:3"},"nodeType":"YulFunctionCall","src":"22165:17:3"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"22159:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"22212:26:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"22229:1:3"},{"name":"T2","nodeType":"YulIdentifier","src":"22232:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"22236:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22222:6:3"},"nodeType":"YulFunctionCall","src":"22222:16:3"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"22216:2:3","type":""}]},{"nodeType":"YulAssignment","src":"22271:23:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"22284:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"22288:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"22292:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22277:6:3"},"nodeType":"YulFunctionCall","src":"22277:17:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"22271:2:3"}]},{"nodeType":"YulVariableDeclaration","src":"22323:77:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22340:1:3","type":"","value":"3"},{"arguments":[{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"22357:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"22364:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"22367:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22360:3:3"},"nodeType":"YulFunctionCall","src":"22360:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"22372:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"22350:6:3"},"nodeType":"YulFunctionCall","src":"22350:24:3"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"22383:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"22386:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"22390:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"22376:6:3"},"nodeType":"YulFunctionCall","src":"22376:16:3"},{"name":"p","nodeType":"YulIdentifier","src":"22394:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22343:6:3"},"nodeType":"YulFunctionCall","src":"22343:53:3"},{"name":"p","nodeType":"YulIdentifier","src":"22398:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22333:6:3"},"nodeType":"YulFunctionCall","src":"22333:67:3"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"22327:2:3","type":""}]},{"nodeType":"YulAssignment","src":"22445:25:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"22459:2:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"22463:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"22468:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22452:6:3"},"nodeType":"YulFunctionCall","src":"22452:18:3"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"22445:3:3"}]},{"nodeType":"YulAssignment","src":"22505:23:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"22518:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"22522:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"22526:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22511:6:3"},"nodeType":"YulFunctionCall","src":"22511:17:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"22505:2:3"}]},{"nodeType":"YulAssignment","src":"22570:57:3","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"22589:2:3"},{"name":"T4","nodeType":"YulIdentifier","src":"22593:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"22597:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22582:6:3"},"nodeType":"YulFunctionCall","src":"22582:17:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"22608:7:3"},{"name":"T3","nodeType":"YulIdentifier","src":"22617:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"22621:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22601:6:3"},"nodeType":"YulFunctionCall","src":"22601:22:3"},{"name":"p","nodeType":"YulIdentifier","src":"22625:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"22575:6:3"},"nodeType":"YulFunctionCall","src":"22575:52:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"22570:1:3"}]},{"nodeType":"YulAssignment","src":"22660:45:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"22673:2:3"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"22684:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"22691:1:3"},{"name":"T3","nodeType":"YulIdentifier","src":"22694:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22687:3:3"},"nodeType":"YulFunctionCall","src":"22687:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"22699:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"22677:6:3"},"nodeType":"YulFunctionCall","src":"22677:24:3"},{"name":"p","nodeType":"YulIdentifier","src":"22703:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22666:6:3"},"nodeType":"YulFunctionCall","src":"22666:39:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"22660:2:3"}]},{"nodeType":"YulAssignment","src":"22745:36:3","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"22764:2:3"},{"name":"Y","nodeType":"YulIdentifier","src":"22768:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"22771:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22757:6:3"},"nodeType":"YulFunctionCall","src":"22757:16:3"},{"name":"T2","nodeType":"YulIdentifier","src":"22775:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"22779:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"22750:6:3"},"nodeType":"YulFunctionCall","src":"22750:31:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"22745:1:3"}]},{"nodeType":"YulBlock","src":"22867:3223:3","statements":[{"nodeType":"YulAssignment","src":"22934:77:3","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22948:1:3","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"22959:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"22966:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"22955:3:3"},"nodeType":"YulFunctionCall","src":"22955:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"22977:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22951:3:3"},"nodeType":"YulFunctionCall","src":"22951:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22944:3:3"},"nodeType":"YulFunctionCall","src":"22944:36:3"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"22990:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"22997:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"22986:3:3"},"nodeType":"YulFunctionCall","src":"22986:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"23008:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22982:3:3"},"nodeType":"YulFunctionCall","src":"22982:28:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22940:3:3"},"nodeType":"YulFunctionCall","src":"22940:71:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"22934:2:3"}]},{"body":{"nodeType":"YulBlock","src":"23051:134:3","statements":[{"nodeType":"YulAssignment","src":"23081:14:3","value":{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"23090:1:3"},{"name":"Y","nodeType":"YulIdentifier","src":"23093:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23086:3:3"},"nodeType":"YulFunctionCall","src":"23086:9:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"23081:1:3"}]},{"nodeType":"YulContinue","src":"23151:8:3"}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"23047:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23040:6:3"},"nodeType":"YulFunctionCall","src":"23040:10:3"},"nodeType":"YulIf","src":"23037:148:3"},{"body":{"nodeType":"YulBlock","src":"23236:101:3","statements":[{"nodeType":"YulAssignment","src":"23266:8:3","value":{"name":"gx","nodeType":"YulIdentifier","src":"23272:2:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"23266:2:3"}]},{"nodeType":"YulAssignment","src":"23303:8:3","value":{"name":"gy","nodeType":"YulIdentifier","src":"23309:2:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"23303:2:3"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"23229:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"23233:1:3","type":"","value":"1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"23226:2:3"},"nodeType":"YulFunctionCall","src":"23226:9:3"},"nodeType":"YulIf","src":"23223:114:3"},{"body":{"nodeType":"YulBlock","src":"23375:101:3","statements":[{"nodeType":"YulAssignment","src":"23405:8:3","value":{"name":"Q0","nodeType":"YulIdentifier","src":"23411:2:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"23405:2:3"}]},{"nodeType":"YulAssignment","src":"23442:8:3","value":{"name":"Q1","nodeType":"YulIdentifier","src":"23448:2:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"23442:2:3"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"23368:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"23372:1:3","type":"","value":"2"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"23365:2:3"},"nodeType":"YulFunctionCall","src":"23365:9:3"},"nodeType":"YulIf","src":"23362:114:3"},{"body":{"nodeType":"YulBlock","src":"23514:121:3","statements":[{"nodeType":"YulAssignment","src":"23544:14:3","value":{"arguments":[{"name":"H","nodeType":"YulIdentifier","src":"23556:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23550:5:3"},"nodeType":"YulFunctionCall","src":"23550:8:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"23544:2:3"}]},{"nodeType":"YulAssignment","src":"23587:22:3","value":{"arguments":[{"arguments":[{"name":"H","nodeType":"YulIdentifier","src":"23603:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"23605:2:3","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23599:3:3"},"nodeType":"YulFunctionCall","src":"23599:9:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23593:5:3"},"nodeType":"YulFunctionCall","src":"23593:16:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"23587:2:3"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"23507:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"23511:1:3","type":"","value":"3"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"23504:2:3"},"nodeType":"YulFunctionCall","src":"23504:9:3"},"nodeType":"YulIf","src":"23501:134:3"},{"body":{"nodeType":"YulBlock","src":"23674:209:3","statements":[{"nodeType":"YulAssignment","src":"23704:7:3","value":{"name":"T1","nodeType":"YulIdentifier","src":"23709:2:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"23704:1:3"}]},{"nodeType":"YulAssignment","src":"23740:7:3","value":{"name":"T2","nodeType":"YulIdentifier","src":"23745:2:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"23740:1:3"}]},{"nodeType":"YulAssignment","src":"23776:7:3","value":{"kind":"number","nodeType":"YulLiteral","src":"23782:1:3","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"23776:2:3"}]},{"nodeType":"YulAssignment","src":"23812:8:3","value":{"kind":"number","nodeType":"YulLiteral","src":"23819:1:3","type":"","value":"1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"23812:3:3"}]},{"nodeType":"YulContinue","src":"23849:8:3"}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"23670:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23663:6:3"},"nodeType":"YulFunctionCall","src":"23663:10:3"},"nodeType":"YulIf","src":"23660:223:3"},{"nodeType":"YulVariableDeclaration","src":"24026:42:3","value":{"arguments":[{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"24050:2:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"24054:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"24059:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24043:6:3"},"nodeType":"YulFunctionCall","src":"24043:18:3"},{"name":"Y","nodeType":"YulIdentifier","src":"24063:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"24066:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"24036:6:3"},"nodeType":"YulFunctionCall","src":"24036:32:3"},"variables":[{"name":"y2","nodeType":"YulTypedName","src":"24030:2:3","type":""}]},{"nodeType":"YulAssignment","src":"24097:45:3","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"24117:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"24121:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"24125:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24110:6:3"},"nodeType":"YulFunctionCall","src":"24110:17:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"24133:1:3"},{"name":"X","nodeType":"YulIdentifier","src":"24136:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24129:3:3"},"nodeType":"YulFunctionCall","src":"24129:9:3"},{"name":"p","nodeType":"YulIdentifier","src":"24140:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"24103:6:3"},"nodeType":"YulFunctionCall","src":"24103:39:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"24097:2:3"}]},{"body":{"nodeType":"YulBlock","src":"24371:1117:3","statements":[{"body":{"nodeType":"YulBlock","src":"24415:1047:3","statements":[{"nodeType":"YulAssignment","src":"24449:27:3","value":{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"24462:7:3"},{"name":"Y","nodeType":"YulIdentifier","src":"24471:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"24474:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24455:6:3"},"nodeType":"YulFunctionCall","src":"24455:21:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"24449:2:3"}]},{"nodeType":"YulAssignment","src":"24528:23:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"24541:2:3"},{"name":"T1","nodeType":"YulIdentifier","src":"24545:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"24549:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24534:6:3"},"nodeType":"YulFunctionCall","src":"24534:17:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"24528:2:3"}]},{"nodeType":"YulAssignment","src":"24593:22:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"24606:1:3"},{"name":"T2","nodeType":"YulIdentifier","src":"24609:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"24613:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24599:6:3"},"nodeType":"YulFunctionCall","src":"24599:16:3"},"variableNames":[{"name":"T3","nodeType":"YulIdentifier","src":"24593:2:3"}]},{"nodeType":"YulAssignment","src":"24661:23:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"24674:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"24678:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"24682:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24667:6:3"},"nodeType":"YulFunctionCall","src":"24667:17:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"24661:2:3"}]},{"nodeType":"YulAssignment","src":"24725:22:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"24738:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"24741:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"24745:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"24731:6:3"},"nodeType":"YulFunctionCall","src":"24731:16:3"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"24725:2:3"}]},{"nodeType":"YulVariableDeclaration","src":"24787:35:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"24805:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"24812:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"24815:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24808:3:3"},"nodeType":"YulFunctionCall","src":"24808:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"24820:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"24798:6:3"},"nodeType":"YulFunctionCall","src":"24798:24:3"},"variables":[{"name":"TT1","nodeType":"YulTypedName","src":"24791:3:3","type":""}]},{"nodeType":"YulAssignment","src":"24862:24:3","value":{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"24875:2:3"},{"name":"TT1","nodeType":"YulIdentifier","src":"24879:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"24884:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24868:6:3"},"nodeType":"YulFunctionCall","src":"24868:18:3"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"24862:2:3"}]},{"nodeType":"YulAssignment","src":"24934:22:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24947:1:3","type":"","value":"3"},{"name":"y2","nodeType":"YulIdentifier","src":"24950:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"24954:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24940:6:3"},"nodeType":"YulFunctionCall","src":"24940:16:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"24934:2:3"}]},{"nodeType":"YulAssignment","src":"24994:26:3","value":{"arguments":[{"name":"TT1","nodeType":"YulIdentifier","src":"25008:3:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"25013:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"25018:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25001:6:3"},"nodeType":"YulFunctionCall","src":"25001:19:3"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"24994:3:3"}]},{"nodeType":"YulAssignment","src":"25067:23:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"25080:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"25084:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"25088:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25073:6:3"},"nodeType":"YulFunctionCall","src":"25073:17:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"25067:2:3"}]},{"nodeType":"YulAssignment","src":"25144:57:3","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"25163:2:3"},{"name":"T4","nodeType":"YulIdentifier","src":"25167:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"25171:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25156:6:3"},"nodeType":"YulFunctionCall","src":"25156:17:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"25182:7:3"},{"name":"T3","nodeType":"YulIdentifier","src":"25191:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"25195:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25175:6:3"},"nodeType":"YulFunctionCall","src":"25175:22:3"},{"name":"p","nodeType":"YulIdentifier","src":"25199:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25149:6:3"},"nodeType":"YulFunctionCall","src":"25149:52:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"25144:1:3"}]},{"nodeType":"YulAssignment","src":"25246:45:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"25259:2:3"},{"arguments":[{"name":"T3","nodeType":"YulIdentifier","src":"25270:2:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"25278:1:3"},{"name":"X","nodeType":"YulIdentifier","src":"25281:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25274:3:3"},"nodeType":"YulFunctionCall","src":"25274:9:3"},{"name":"p","nodeType":"YulIdentifier","src":"25285:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25263:6:3"},"nodeType":"YulFunctionCall","src":"25263:24:3"},{"name":"p","nodeType":"YulIdentifier","src":"25289:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25252:6:3"},"nodeType":"YulFunctionCall","src":"25252:39:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"25246:2:3"}]},{"nodeType":"YulAssignment","src":"25335:36:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"25347:2:3"},{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"25358:2:3"},{"name":"Y","nodeType":"YulIdentifier","src":"25362:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"25365:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25351:6:3"},"nodeType":"YulFunctionCall","src":"25351:16:3"},{"name":"p","nodeType":"YulIdentifier","src":"25369:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25340:6:3"},"nodeType":"YulFunctionCall","src":"25340:31:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"25335:1:3"}]},{"nodeType":"YulContinue","src":"25424:8:3"}]},"condition":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"24411:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24404:6:3"},"nodeType":"YulFunctionCall","src":"24404:10:3"},"nodeType":"YulIf","src":"24401:1061:3"}]},"condition":{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"24367:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24360:6:3"},"nodeType":"YulFunctionCall","src":"24360:10:3"},"nodeType":"YulIf","src":"24357:1131:3"},{"nodeType":"YulAssignment","src":"25514:23:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"25527:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"25531:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"25535:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25520:6:3"},"nodeType":"YulFunctionCall","src":"25520:17:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"25514:2:3"}]},{"nodeType":"YulVariableDeclaration","src":"25567:28:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"25585:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"25589:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"25593:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25578:6:3"},"nodeType":"YulFunctionCall","src":"25578:17:3"},"variables":[{"name":"TT1","nodeType":"YulTypedName","src":"25571:3:3","type":""}]},{"nodeType":"YulAssignment","src":"25688:23:3","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"25701:2:3"},{"name":"T4","nodeType":"YulIdentifier","src":"25705:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"25709:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25694:6:3"},"nodeType":"YulFunctionCall","src":"25694:17:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"25688:2:3"}]},{"nodeType":"YulAssignment","src":"25736:26:3","value":{"arguments":[{"name":"zzz","nodeType":"YulIdentifier","src":"25750:3:3"},{"name":"TT1","nodeType":"YulIdentifier","src":"25755:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"25760:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25743:6:3"},"nodeType":"YulFunctionCall","src":"25743:19:3"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"25736:3:3"}]},{"nodeType":"YulVariableDeclaration","src":"25799:27:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"25817:1:3"},{"name":"T4","nodeType":"YulIdentifier","src":"25820:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"25824:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25810:6:3"},"nodeType":"YulFunctionCall","src":"25810:16:3"},"variables":[{"name":"TT2","nodeType":"YulTypedName","src":"25803:3:3","type":""}]},{"nodeType":"YulAssignment","src":"25851:83:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"25878:2:3"},{"name":"y2","nodeType":"YulIdentifier","src":"25882:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"25886:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25871:6:3"},"nodeType":"YulFunctionCall","src":"25871:17:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"25894:1:3"},{"name":"TT1","nodeType":"YulIdentifier","src":"25897:3:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25890:3:3"},"nodeType":"YulFunctionCall","src":"25890:11:3"},{"name":"p","nodeType":"YulIdentifier","src":"25903:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25864:6:3"},"nodeType":"YulFunctionCall","src":"25864:41:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"25914:7:3"},{"name":"TT2","nodeType":"YulIdentifier","src":"25923:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"25928:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25907:6:3"},"nodeType":"YulFunctionCall","src":"25907:23:3"},{"name":"p","nodeType":"YulIdentifier","src":"25932:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25857:6:3"},"nodeType":"YulFunctionCall","src":"25857:77:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"25851:2:3"}]},{"nodeType":"YulAssignment","src":"25959:76:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"TT2","nodeType":"YulIdentifier","src":"25985:3:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"25994:1:3"},{"name":"T4","nodeType":"YulIdentifier","src":"25997:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25990:3:3"},"nodeType":"YulFunctionCall","src":"25990:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"26002:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25978:6:3"},"nodeType":"YulFunctionCall","src":"25978:26:3"},{"name":"y2","nodeType":"YulIdentifier","src":"26006:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"26010:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25971:6:3"},"nodeType":"YulFunctionCall","src":"25971:41:3"},{"arguments":[{"name":"Y","nodeType":"YulIdentifier","src":"26021:1:3"},{"name":"TT1","nodeType":"YulIdentifier","src":"26024:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"26029:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"26014:6:3"},"nodeType":"YulFunctionCall","src":"26014:17:3"},{"name":"p","nodeType":"YulIdentifier","src":"26033:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25964:6:3"},"nodeType":"YulFunctionCall","src":"25964:71:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"25959:1:3"}]},{"nodeType":"YulAssignment","src":"26061:7:3","value":{"name":"T4","nodeType":"YulIdentifier","src":"26066:2:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"26061:1:3"}]}]}]},"condition":{"arguments":[{"name":"minus_1","nodeType":"YulIdentifier","src":"21985:7:3"},{"name":"index","nodeType":"YulIdentifier","src":"21994:5:3"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21982:2:3"},"nodeType":"YulFunctionCall","src":"21982:18:3"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"22001:26:3","statements":[{"nodeType":"YulAssignment","src":"22003:22:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"22016:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"22023:1:3","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22012:3:3"},"nodeType":"YulFunctionCall","src":"22012:13:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"22003:5:3"}]}]},"pre":{"nodeType":"YulBlock","src":"21979:2:3","statements":[]},"src":"21975:4133:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26147:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"26150:4:3","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26143:3:3"},"nodeType":"YulFunctionCall","src":"26143:12:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"26157:3:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26136:6:3"},"nodeType":"YulFunctionCall","src":"26136:25:3"},"nodeType":"YulExpressionStatement","src":"26136:25:3"},{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26420:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"26423:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26413:6:3"},"nodeType":"YulFunctionCall","src":"26413:15:3"},"nodeType":"YulExpressionStatement","src":"26413:15:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26456:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"26459:4:3","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26452:3:3"},"nodeType":"YulFunctionCall","src":"26452:12:3"},{"kind":"number","nodeType":"YulLiteral","src":"26466:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26445:6:3"},"nodeType":"YulFunctionCall","src":"26445:26:3"},"nodeType":"YulExpressionStatement","src":"26445:26:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26499:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"26502:4:3","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26495:3:3"},"nodeType":"YulFunctionCall","src":"26495:12:3"},{"kind":"number","nodeType":"YulLiteral","src":"26509:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26488:6:3"},"nodeType":"YulFunctionCall","src":"26488:26:3"},"nodeType":"YulExpressionStatement","src":"26488:26:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26653:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"26656:4:3","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26649:3:3"},"nodeType":"YulFunctionCall","src":"26649:12:3"},{"name":"minus_2","nodeType":"YulIdentifier","src":"26663:7:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26642:6:3"},"nodeType":"YulFunctionCall","src":"26642:29:3"},"nodeType":"YulExpressionStatement","src":"26642:29:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26699:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"26702:4:3","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26695:3:3"},"nodeType":"YulFunctionCall","src":"26695:12:3"},{"name":"p","nodeType":"YulIdentifier","src":"26709:1:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26688:6:3"},"nodeType":"YulFunctionCall","src":"26688:23:3"},"nodeType":"YulExpressionStatement","src":"26688:23:3"},{"body":{"nodeType":"YulBlock","src":"26846:16:3","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26855:1:3","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"26858:1:3","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"26848:6:3"},"nodeType":"YulFunctionCall","src":"26848:12:3"},"nodeType":"YulExpressionStatement","src":"26848:12:3"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26817:1:3","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"26813:3:3"},"nodeType":"YulFunctionCall","src":"26813:6:3"},{"kind":"number","nodeType":"YulLiteral","src":"26821:4:3","type":"","value":"0x05"},{"name":"T","nodeType":"YulIdentifier","src":"26827:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"26830:4:3","type":"","value":"0xc0"},{"name":"T","nodeType":"YulIdentifier","src":"26836:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"26839:4:3","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"26802:10:3"},"nodeType":"YulFunctionCall","src":"26802:42:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26795:6:3"},"nodeType":"YulFunctionCall","src":"26795:50:3"},"nodeType":"YulIf","src":"26792:70:3"},{"nodeType":"YulAssignment","src":"26880:23:3","value":{"arguments":[{"name":"Y","nodeType":"YulIdentifier","src":"26890:1:3"},{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26898:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26892:5:3"},"nodeType":"YulFunctionCall","src":"26892:8:3"},{"name":"p","nodeType":"YulIdentifier","src":"26901:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"26883:6:3"},"nodeType":"YulFunctionCall","src":"26883:20:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"26880:1:3"}]},{"nodeType":"YulAssignment","src":"26927:27:3","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"26939:2:3"},{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26949:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26943:5:3"},"nodeType":"YulFunctionCall","src":"26943:8:3"},{"name":"p","nodeType":"YulIdentifier","src":"26952:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"26932:6:3"},"nodeType":"YulFunctionCall","src":"26932:22:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"26927:2:3"}]},{"nodeType":"YulAssignment","src":"26977:20:3","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"26989:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"26992:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"26995:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"26982:6:3"},"nodeType":"YulFunctionCall","src":"26982:15:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"26977:2:3"}]},{"nodeType":"YulAssignment","src":"27021:21:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"27033:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"27036:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"27040:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"27026:6:3"},"nodeType":"YulFunctionCall","src":"27026:16:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"27021:1:3"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2393,"isOffset":false,"isSlot":false,"src":"21810:1:3","valueSize":1},{"declaration":2393,"isOffset":false,"isSlot":false,"src":"21848:1:3","valueSize":1},{"declaration":2393,"isOffset":false,"isSlot":false,"src":"23556:1:3","valueSize":1},{"declaration":2393,"isOffset":false,"isSlot":false,"src":"23603:1:3","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"21695:2:3","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"23411:2:3","valueSize":1},{"declaration":2360,"isOffset":false,"isSlot":false,"src":"21723:2:3","valueSize":1},{"declaration":2360,"isOffset":false,"isSlot":false,"src":"23448:2:3","valueSize":1},{"declaration":2386,"isOffset":false,"isSlot":false,"src":"26147:1:3","valueSize":1},{"declaration":2386,"isOffset":false,"isSlot":false,"src":"26420:1:3","valueSize":1},{"declaration":2386,"isOffset":false,"isSlot":false,"src":"26456:1:3","valueSize":1},{"declaration":2386,"isOffset":false,"isSlot":false,"src":"26499:1:3","valueSize":1},{"declaration":2386,"isOffset":false,"isSlot":false,"src":"26653:1:3","valueSize":1},{"declaration":2386,"isOffset":false,"isSlot":false,"src":"26699:1:3","valueSize":1},{"declaration":2386,"isOffset":false,"isSlot":false,"src":"26827:1:3","valueSize":1},{"declaration":2386,"isOffset":false,"isSlot":false,"src":"26836:1:3","valueSize":1},{"declaration":2386,"isOffset":false,"isSlot":false,"src":"26898:1:3","valueSize":1},{"declaration":2386,"isOffset":false,"isSlot":false,"src":"26949:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"21585:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"21690:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"21837:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"22229:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"22357:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"22383:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"22570:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"22684:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"23704:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"24136:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"24606:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"24738:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"24805:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"25144:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"25281:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"25817:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"26061:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"27021:1:3","valueSize":1},{"declaration":2367,"isOffset":false,"isSlot":false,"src":"27033:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"21613:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"21718:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"21795:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"22110:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"22745:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"22768:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"23081:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"23093:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"23740:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"24063:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"24471:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"25335:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"25362:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"25959:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"26021:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"26880:1:3","valueSize":1},{"declaration":2369,"isOffset":false,"isSlot":false,"src":"26890:1:3","valueSize":1},{"declaration":1483,"isOffset":false,"isSlot":false,"src":"21590:2:3","valueSize":1},{"declaration":1483,"isOffset":false,"isSlot":false,"src":"23272:2:3","valueSize":1},{"declaration":1486,"isOffset":false,"isSlot":false,"src":"21618:2:3","valueSize":1},{"declaration":1486,"isOffset":false,"isSlot":false,"src":"23309:2:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"21210:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"21241:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"21297:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"21310:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"21365:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"21396:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"21480:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"21511:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"21886:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"21899:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"21994:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"22003:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"22016:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"22959:5:3","valueSize":1},{"declaration":2378,"isOffset":false,"isSlot":false,"src":"22990:5:3","valueSize":1},{"declaration":1498,"isOffset":false,"isSlot":false,"src":"21985:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"22608:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"24462:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"25182:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"25914:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"26663:7:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22113:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22180:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22236:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22292:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22364:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22372:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22390:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22394:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22398:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22468:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22526:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22597:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22621:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22625:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22691:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22699:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22703:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22771:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"22779:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"23090:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24059:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24066:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24125:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24133:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24140:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24474:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24549:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24613:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24682:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24745:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24812:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24820:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24884:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"24954:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25018:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25088:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25171:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25195:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25199:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25278:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25285:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25289:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25365:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25369:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25535:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25593:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25709:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25760:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25824:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25886:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25894:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25903:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25928:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25932:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"25994:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"26002:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"26010:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"26029:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"26033:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"26709:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"26901:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"26952:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"26995:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"27040:1:3","valueSize":1},{"declaration":2362,"isOffset":false,"isSlot":false,"src":"21248:8:3","valueSize":1},{"declaration":2362,"isOffset":false,"isSlot":false,"src":"21403:8:3","valueSize":1},{"declaration":2362,"isOffset":false,"isSlot":false,"src":"21518:8:3","valueSize":1},{"declaration":2362,"isOffset":false,"isSlot":false,"src":"22997:8:3","valueSize":1},{"declaration":2364,"isOffset":false,"isSlot":false,"src":"21217:8:3","valueSize":1},{"declaration":2364,"isOffset":false,"isSlot":false,"src":"21372:8:3","valueSize":1},{"declaration":2364,"isOffset":false,"isSlot":false,"src":"21487:8:3","valueSize":1},{"declaration":2364,"isOffset":false,"isSlot":false,"src":"22966:8:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"21455:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"21556:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"21661:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"21766:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"21925:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"22367:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"22386:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"22505:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"22522:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"23670:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"23776:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"24121:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"24741:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"24815:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"25067:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"25084:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"25688:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"25701:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"26927:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"26939:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"26977:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"26989:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"26992:2:3","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"27036:2:3","valueSize":1},{"declaration":2375,"isOffset":false,"isSlot":false,"src":"21949:3:3","valueSize":1},{"declaration":2375,"isOffset":false,"isSlot":false,"src":"22445:3:3","valueSize":1},{"declaration":2375,"isOffset":false,"isSlot":false,"src":"22463:3:3","valueSize":1},{"declaration":2375,"isOffset":false,"isSlot":false,"src":"23812:3:3","valueSize":1},{"declaration":2375,"isOffset":false,"isSlot":false,"src":"24054:3:3","valueSize":1},{"declaration":2375,"isOffset":false,"isSlot":false,"src":"24994:3:3","valueSize":1},{"declaration":2375,"isOffset":false,"isSlot":false,"src":"25013:3:3","valueSize":1},{"declaration":2375,"isOffset":false,"isSlot":false,"src":"25736:3:3","valueSize":1},{"declaration":2375,"isOffset":false,"isSlot":false,"src":"25750:3:3","valueSize":1},{"declaration":2375,"isOffset":false,"isSlot":false,"src":"26157:3:3","valueSize":1}],"id":2422,"nodeType":"InlineAssembly","src":"21148:5915:3"}]},{"expression":{"components":[{"id":2424,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2367,"src":"27122:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2425,"name":"Y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2369,"src":"27124:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2426,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27121:5:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":2370,"id":2427,"nodeType":"Return","src":"27114:12:3"}]},"documentation":{"id":2356,"nodeType":"StructuredDocumentation","src":"20430:179:3","text":" @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\n Returns affine representation of point (normalized) \n "},"id":2429,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_mulmuladd","nameLocation":"20623:14:3","nodeType":"FunctionDefinition","parameters":{"id":2365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2358,"mutability":"mutable","name":"Q0","nameLocation":"20655:2:3","nodeType":"VariableDeclaration","scope":2429,"src":"20647:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2357,"name":"uint256","nodeType":"ElementaryTypeName","src":"20647:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2360,"mutability":"mutable","name":"Q1","nameLocation":"20675:2:3","nodeType":"VariableDeclaration","scope":2429,"src":"20667:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2359,"name":"uint256","nodeType":"ElementaryTypeName","src":"20667:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2362,"mutability":"mutable","name":"scalar_u","nameLocation":"20726:8:3","nodeType":"VariableDeclaration","scope":2429,"src":"20718:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2361,"name":"uint256","nodeType":"ElementaryTypeName","src":"20718:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2364,"mutability":"mutable","name":"scalar_v","nameLocation":"20752:8:3","nodeType":"VariableDeclaration","scope":2429,"src":"20744:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2363,"name":"uint256","nodeType":"ElementaryTypeName","src":"20744:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20637:129:3"},"returnParameters":{"id":2370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2367,"mutability":"mutable","name":"X","nameLocation":"20798:1:3","nodeType":"VariableDeclaration","scope":2429,"src":"20790:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2366,"name":"uint256","nodeType":"ElementaryTypeName","src":"20790:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2369,"mutability":"mutable","name":"Y","nameLocation":"20809:1:3","nodeType":"VariableDeclaration","scope":2429,"src":"20801:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2368,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20789:22:3"},"scope":2797,"src":"20614:6519:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2572,"nodeType":"Block","src":"27630:6599:3","statements":[{"id":2571,"nodeType":"UncheckedBlock","src":"27640:6567:3","statements":[{"assignments":[2441],"declarations":[{"constant":false,"id":2441,"mutability":"mutable","name":"zz","nameLocation":"27672:2:3","nodeType":"VariableDeclaration","scope":2571,"src":"27664:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2440,"name":"uint256","nodeType":"ElementaryTypeName","src":"27664:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2442,"nodeType":"VariableDeclarationStatement","src":"27664:10:3"},{"assignments":[2448],"declarations":[{"constant":false,"id":2448,"mutability":"mutable","name":"T","nameLocation":"27746:1:3","nodeType":"VariableDeclaration","scope":2571,"src":"27728:19:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6]"},"typeName":{"baseType":{"id":2446,"name":"uint256","nodeType":"ElementaryTypeName","src":"27728:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2447,"length":{"hexValue":"36","id":2445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27736:1:3","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"ArrayTypeName","src":"27728:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_storage_ptr","typeString":"uint256[6]"}},"visibility":"internal"}],"id":2449,"nodeType":"VariableDeclarationStatement","src":"27728:19:3"},{"expression":{"id":2452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2450,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"27761:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"323536","id":2451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27766:3:3","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"src":"27761:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2453,"nodeType":"ExpressionStatement","src":"27761:8:3"},{"body":{"id":2568,"nodeType":"Block","src":"27816:552:3","statements":[{"expression":{"id":2463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2459,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"27834:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2460,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"27839:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27844:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27839:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27834:11:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2464,"nodeType":"ExpressionStatement","src":"27834:11:3"},{"expression":{"id":2566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2465,"name":"T","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2448,"src":"27913:1:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6] memory"}},"id":2467,"indexExpression":{"hexValue":"30","id":2466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27915:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27913:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3634","id":2468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27920:2:3","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"313238","id":2469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27971:3:3","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2470,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2433,"src":"27979:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":2471,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"27991:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27979:14:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2473,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27978:16:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27997:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27978:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2476,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27977:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27971:28:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3634","id":2478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28002:2:3","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2479,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2433,"src":"28009:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2480,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"28022:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3634","id":2481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28027:2:3","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"28022:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2483,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28021:9:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28009:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2485,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28008:23:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28034:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28008:27:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2488,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28007:29:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28002:34:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27971:65:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3332","id":2491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28067:2:3","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2492,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2433,"src":"28074:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2493,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"28087:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313238","id":2494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28092:3:3","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"28087:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2496,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28086:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28074:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2498,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28073:24:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28100:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28073:28:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2501,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28072:30:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28067:35:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27971:131:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3136","id":2504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28105:2:3","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2505,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2433,"src":"28112:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2506,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"28125:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313932","id":2507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28130:3:3","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},"src":"28125:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2509,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28124:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28112:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2511,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28111:24:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28138:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28111:28:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2514,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28110:30:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28105:35:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27971:169:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":2517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28171:1:3","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2518,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2431,"src":"28177:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":2519,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"28189:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28177:14:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2521,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28176:16:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28195:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28176:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2524,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28175:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28171:26:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27971:226:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":2527,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28200:1:3","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2528,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2431,"src":"28206:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2529,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"28219:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3634","id":2530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28224:2:3","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"28219:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2532,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28218:9:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28206:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2534,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28205:23:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28231:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28205:27:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2537,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28204:29:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28200:33:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27971:262:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28264:1:3","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2541,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2431,"src":"28270:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2542,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"28283:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313238","id":2543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28288:3:3","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"28283:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2545,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28282:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28270:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2547,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28269:24:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28296:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28269:28:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2550,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28268:30:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28264:34:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27971:327:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2553,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2431,"src":"28303:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2554,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"28316:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313932","id":2555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28321:3:3","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},"src":"28316:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2557,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28315:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28303:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2559,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28302:24:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2560,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28329:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28302:28:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2562,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28301:30:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27971:360:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2564,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27945:408:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27920:433:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27913:440:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2567,"nodeType":"ExpressionStatement","src":"27913:440:3"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2454,"name":"T","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2448,"src":"27805:1:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6] memory"}},"id":2456,"indexExpression":{"hexValue":"30","id":2455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27807:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27805:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27813:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27805:9:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2569,"nodeType":"WhileStatement","src":"27798:570:3"},{"AST":{"nodeType":"YulBlock","src":"28390:5807:3","statements":[{"expression":{"arguments":[{"name":"dataPointer","nodeType":"YulIdentifier","src":"28420:11:3"},{"name":"T","nodeType":"YulIdentifier","src":"28433:1:3"},{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"28442:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28436:5:3"},"nodeType":"YulFunctionCall","src":"28436:8:3"},{"kind":"number","nodeType":"YulLiteral","src":"28446:2:3","type":"","value":"64"}],"functionName":{"name":"extcodecopy","nodeType":"YulIdentifier","src":"28408:11:3"},"nodeType":"YulFunctionCall","src":"28408:41:3"},"nodeType":"YulExpressionStatement","src":"28408:41:3"},{"nodeType":"YulVariableDeclaration","src":"28466:23:3","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"28483:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"28487:1:3","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28479:3:3"},"nodeType":"YulFunctionCall","src":"28479:10:3"},"variables":[{"name":"index","nodeType":"YulTypedName","src":"28470:5:3","type":""}]},{"nodeType":"YulAssignment","src":"28506:13:3","value":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"28517:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28511:5:3"},"nodeType":"YulFunctionCall","src":"28511:8:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"28506:1:3"}]},{"nodeType":"YulVariableDeclaration","src":"28536:26:3","value":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"28555:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"28558:2:3","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28551:3:3"},"nodeType":"YulFunctionCall","src":"28551:10:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28545:5:3"},"nodeType":"YulFunctionCall","src":"28545:17:3"},"variables":[{"name":"Y","nodeType":"YulTypedName","src":"28540:1:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"28579:12:3","value":{"kind":"number","nodeType":"YulLiteral","src":"28590:1:3","type":"","value":"1"},"variables":[{"name":"zzz","nodeType":"YulTypedName","src":"28583:3:3","type":""}]},{"nodeType":"YulAssignment","src":"28608:7:3","value":{"kind":"number","nodeType":"YulLiteral","src":"28614:1:3","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"28608:2:3"}]},{"body":{"nodeType":"YulBlock","src":"28763:4589:3","statements":[{"nodeType":"YulBlock","src":"28821:1095:3","statements":[{"nodeType":"YulVariableDeclaration","src":"28847:26:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28865:1:3","type":"","value":"2"},{"name":"Y","nodeType":"YulIdentifier","src":"28868:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"28871:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"28858:6:3"},"nodeType":"YulFunctionCall","src":"28858:15:3"},"variables":[{"name":"TT1","nodeType":"YulTypedName","src":"28851:3:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"28917:29:3","value":{"arguments":[{"name":"TT1","nodeType":"YulIdentifier","src":"28934:3:3"},{"name":"TT1","nodeType":"YulIdentifier","src":"28939:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"28944:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"28927:6:3"},"nodeType":"YulFunctionCall","src":"28927:19:3"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"28921:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"28980:26:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"28997:1:3"},{"name":"T2","nodeType":"YulIdentifier","src":"29000:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"29004:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"28990:6:3"},"nodeType":"YulFunctionCall","src":"28990:16:3"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"28984:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"29043:28:3","value":{"arguments":[{"name":"TT1","nodeType":"YulIdentifier","src":"29060:3:3"},{"name":"T2","nodeType":"YulIdentifier","src":"29065:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"29069:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29053:6:3"},"nodeType":"YulFunctionCall","src":"29053:18:3"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"29047:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"29104:77:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29121:1:3","type":"","value":"3"},{"arguments":[{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"29138:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"29145:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"29148:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29141:3:3"},"nodeType":"YulFunctionCall","src":"29141:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"29153:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"29131:6:3"},"nodeType":"YulFunctionCall","src":"29131:24:3"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"29164:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"29167:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"29171:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"29157:6:3"},"nodeType":"YulFunctionCall","src":"29157:16:3"},{"name":"p","nodeType":"YulIdentifier","src":"29175:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29124:6:3"},"nodeType":"YulFunctionCall","src":"29124:53:3"},{"name":"p","nodeType":"YulIdentifier","src":"29179:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29114:6:3"},"nodeType":"YulFunctionCall","src":"29114:67:3"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"29108:2:3","type":""}]},{"nodeType":"YulAssignment","src":"29230:25:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"29244:2:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"29248:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"29253:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29237:6:3"},"nodeType":"YulFunctionCall","src":"29237:18:3"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"29230:3:3"}]},{"nodeType":"YulAssignment","src":"29294:23:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"29307:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"29311:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"29315:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29300:6:3"},"nodeType":"YulFunctionCall","src":"29300:17:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"29294:2:3"}]},{"nodeType":"YulAssignment","src":"29363:57:3","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"29382:2:3"},{"name":"T4","nodeType":"YulIdentifier","src":"29386:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"29390:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29375:6:3"},"nodeType":"YulFunctionCall","src":"29375:17:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"29401:7:3"},{"name":"T3","nodeType":"YulIdentifier","src":"29410:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"29414:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29394:6:3"},"nodeType":"YulFunctionCall","src":"29394:22:3"},{"name":"p","nodeType":"YulIdentifier","src":"29418:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"29368:6:3"},"nodeType":"YulFunctionCall","src":"29368:52:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"29363:1:3"}]},{"nodeType":"YulVariableDeclaration","src":"29533:49:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"29550:2:3"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"29561:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"29568:1:3"},{"name":"T3","nodeType":"YulIdentifier","src":"29571:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29564:3:3"},"nodeType":"YulFunctionCall","src":"29564:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"29576:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"29554:6:3"},"nodeType":"YulFunctionCall","src":"29554:24:3"},{"name":"p","nodeType":"YulIdentifier","src":"29580:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29543:6:3"},"nodeType":"YulFunctionCall","src":"29543:39:3"},"variables":[{"name":"T5","nodeType":"YulTypedName","src":"29537:2:3","type":""}]},{"nodeType":"YulAssignment","src":"29716:36:3","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"29735:2:3"},{"name":"Y","nodeType":"YulIdentifier","src":"29739:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"29742:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29728:6:3"},"nodeType":"YulFunctionCall","src":"29728:16:3"},{"name":"T5","nodeType":"YulIdentifier","src":"29746:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"29750:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"29721:6:3"},"nodeType":"YulFunctionCall","src":"29721:31:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"29716:1:3"}]}]},{"nodeType":"YulBlock","src":"29937:1058:3","statements":[{"nodeType":"YulVariableDeclaration","src":"29963:90:3","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29981:2:3","type":"","value":"13"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"29993:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"30000:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"29989:3:3"},"nodeType":"YulFunctionCall","src":"29989:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"30011:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29985:3:3"},"nodeType":"YulFunctionCall","src":"29985:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29977:3:3"},"nodeType":"YulFunctionCall","src":"29977:37:3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30020:1:3","type":"","value":"9"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"30031:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"30038:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30027:3:3"},"nodeType":"YulFunctionCall","src":"30027:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"30049:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30023:3:3"},"nodeType":"YulFunctionCall","src":"30023:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30016:3:3"},"nodeType":"YulFunctionCall","src":"30016:36:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29973:3:3"},"nodeType":"YulFunctionCall","src":"29973:80:3"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"29967:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"30078:28:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"30096:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"30103:2:3","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30092:3:3"},"nodeType":"YulFunctionCall","src":"30092:14:3"},"variables":[{"name":"index2","nodeType":"YulTypedName","src":"30082:6:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"30131:129:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"30173:2:3"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30185:2:3","type":"","value":"12"},{"arguments":[{"arguments":[{"name":"index2","nodeType":"YulIdentifier","src":"30197:6:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"30205:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30193:3:3"},"nodeType":"YulFunctionCall","src":"30193:21:3"},{"kind":"number","nodeType":"YulLiteral","src":"30216:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30189:3:3"},"nodeType":"YulFunctionCall","src":"30189:29:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30181:3:3"},"nodeType":"YulFunctionCall","src":"30181:38:3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30225:1:3","type":"","value":"8"},{"arguments":[{"arguments":[{"name":"index2","nodeType":"YulIdentifier","src":"30236:6:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"30244:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30232:3:3"},"nodeType":"YulFunctionCall","src":"30232:21:3"},{"kind":"number","nodeType":"YulLiteral","src":"30255:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30228:3:3"},"nodeType":"YulFunctionCall","src":"30228:29:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30221:3:3"},"nodeType":"YulFunctionCall","src":"30221:37:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30177:3:3"},"nodeType":"YulFunctionCall","src":"30177:82:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30169:3:3"},"nodeType":"YulFunctionCall","src":"30169:91:3"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"30135:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"30285:29:3","value":{"arguments":[{"name":"index2","nodeType":"YulIdentifier","src":"30303:6:3"},{"kind":"number","nodeType":"YulLiteral","src":"30311:2:3","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30299:3:3"},"nodeType":"YulFunctionCall","src":"30299:15:3"},"variables":[{"name":"index3","nodeType":"YulTypedName","src":"30289:6:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"30339:129:3","value":{"arguments":[{"name":"T3","nodeType":"YulIdentifier","src":"30381:2:3"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30393:2:3","type":"","value":"11"},{"arguments":[{"arguments":[{"name":"index3","nodeType":"YulIdentifier","src":"30405:6:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"30413:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30401:3:3"},"nodeType":"YulFunctionCall","src":"30401:21:3"},{"kind":"number","nodeType":"YulLiteral","src":"30424:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30397:3:3"},"nodeType":"YulFunctionCall","src":"30397:29:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30389:3:3"},"nodeType":"YulFunctionCall","src":"30389:38:3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30433:1:3","type":"","value":"7"},{"arguments":[{"arguments":[{"name":"index3","nodeType":"YulIdentifier","src":"30444:6:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"30452:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30440:3:3"},"nodeType":"YulFunctionCall","src":"30440:21:3"},{"kind":"number","nodeType":"YulLiteral","src":"30463:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30436:3:3"},"nodeType":"YulFunctionCall","src":"30436:29:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30429:3:3"},"nodeType":"YulFunctionCall","src":"30429:37:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30385:3:3"},"nodeType":"YulFunctionCall","src":"30385:82:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30377:3:3"},"nodeType":"YulFunctionCall","src":"30377:91:3"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"30343:2:3","type":""}]},{"nodeType":"YulAssignment","src":"30493:24:3","value":{"arguments":[{"name":"index3","nodeType":"YulIdentifier","src":"30506:6:3"},{"kind":"number","nodeType":"YulLiteral","src":"30514:2:3","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30502:3:3"},"nodeType":"YulFunctionCall","src":"30502:15:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"30493:5:3"}]},{"nodeType":"YulVariableDeclaration","src":"30542:127:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"30584:2:3"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30596:2:3","type":"","value":"10"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"30608:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"30615:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30604:3:3"},"nodeType":"YulFunctionCall","src":"30604:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"30626:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30600:3:3"},"nodeType":"YulFunctionCall","src":"30600:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30592:3:3"},"nodeType":"YulFunctionCall","src":"30592:37:3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30635:1:3","type":"","value":"6"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"30646:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"30653:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30642:3:3"},"nodeType":"YulFunctionCall","src":"30642:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"30664:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30638:3:3"},"nodeType":"YulFunctionCall","src":"30638:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30631:3:3"},"nodeType":"YulFunctionCall","src":"30631:36:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30588:3:3"},"nodeType":"YulFunctionCall","src":"30588:80:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30580:3:3"},"nodeType":"YulFunctionCall","src":"30580:89:3"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"30546:2:3","type":""}]},{"body":{"nodeType":"YulBlock","src":"30805:108:3","statements":[{"nodeType":"YulAssignment","src":"30835:14:3","value":{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"30844:1:3"},{"name":"Y","nodeType":"YulIdentifier","src":"30847:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30840:3:3"},"nodeType":"YulFunctionCall","src":"30840:9:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"30835:1:3"}]},{"nodeType":"YulContinue","src":"30879:8:3"}]},"condition":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"30801:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"30794:6:3"},"nodeType":"YulFunctionCall","src":"30794:10:3"},"nodeType":"YulIf","src":"30791:122:3"},{"expression":{"arguments":[{"name":"dataPointer","nodeType":"YulIdentifier","src":"30950:11:3"},{"name":"T","nodeType":"YulIdentifier","src":"30963:1:3"},{"name":"T1","nodeType":"YulIdentifier","src":"30966:2:3"},{"kind":"number","nodeType":"YulLiteral","src":"30970:2:3","type":"","value":"64"}],"functionName":{"name":"extcodecopy","nodeType":"YulIdentifier","src":"30938:11:3"},"nodeType":"YulFunctionCall","src":"30938:35:3"},"nodeType":"YulExpressionStatement","src":"30938:35:3"}]},{"nodeType":"YulBlock","src":"31017:2317:3","statements":[{"body":{"nodeType":"YulBlock","src":"31184:231:3","statements":[{"nodeType":"YulAssignment","src":"31214:13:3","value":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"31225:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31219:5:3"},"nodeType":"YulFunctionCall","src":"31219:8:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"31214:1:3"}]},{"nodeType":"YulAssignment","src":"31256:22:3","value":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"31271:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"31274:2:3","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31267:3:3"},"nodeType":"YulFunctionCall","src":"31267:10:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31261:5:3"},"nodeType":"YulFunctionCall","src":"31261:17:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"31256:1:3"}]},{"nodeType":"YulAssignment","src":"31307:7:3","value":{"kind":"number","nodeType":"YulLiteral","src":"31313:1:3","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"31307:2:3"}]},{"nodeType":"YulAssignment","src":"31343:8:3","value":{"kind":"number","nodeType":"YulLiteral","src":"31350:1:3","type":"","value":"1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"31343:3:3"}]},{"nodeType":"YulContinue","src":"31381:8:3"}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"31180:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31173:6:3"},"nodeType":"YulFunctionCall","src":"31173:10:3"},"nodeType":"YulIf","src":"31170:245:3"},{"nodeType":"YulVariableDeclaration","src":"31441:57:3","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"31475:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"31478:2:3","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31471:3:3"},"nodeType":"YulFunctionCall","src":"31471:10:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31465:5:3"},"nodeType":"YulFunctionCall","src":"31465:17:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"31484:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"31489:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31458:6:3"},"nodeType":"YulFunctionCall","src":"31458:33:3"},{"name":"Y","nodeType":"YulIdentifier","src":"31493:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"31496:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"31451:6:3"},"nodeType":"YulFunctionCall","src":"31451:47:3"},"variables":[{"name":"y2","nodeType":"YulTypedName","src":"31445:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31523:55:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"31553:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31547:5:3"},"nodeType":"YulFunctionCall","src":"31547:8:3"},{"name":"zz","nodeType":"YulIdentifier","src":"31557:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"31561:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31540:6:3"},"nodeType":"YulFunctionCall","src":"31540:23:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"31569:1:3"},{"name":"X","nodeType":"YulIdentifier","src":"31572:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31565:3:3"},"nodeType":"YulFunctionCall","src":"31565:9:3"},{"name":"p","nodeType":"YulIdentifier","src":"31576:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"31533:6:3"},"nodeType":"YulFunctionCall","src":"31533:45:3"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"31527:2:3","type":""}]},{"body":{"nodeType":"YulBlock","src":"31674:1129:3","statements":[{"body":{"nodeType":"YulBlock","src":"31718:1059:3","statements":[{"nodeType":"YulVariableDeclaration","src":"31752:31:3","value":{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"31769:7:3"},{"name":"Y","nodeType":"YulIdentifier","src":"31778:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"31781:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31762:6:3"},"nodeType":"YulFunctionCall","src":"31762:21:3"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"31756:2:3","type":""}]},{"nodeType":"YulAssignment","src":"31835:23:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"31848:2:3"},{"name":"T1","nodeType":"YulIdentifier","src":"31852:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"31856:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31841:6:3"},"nodeType":"YulFunctionCall","src":"31841:17:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"31835:2:3"}]},{"nodeType":"YulVariableDeclaration","src":"31900:26:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"31917:1:3"},{"name":"T2","nodeType":"YulIdentifier","src":"31920:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"31924:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31910:6:3"},"nodeType":"YulFunctionCall","src":"31910:16:3"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"31904:2:3","type":""}]},{"nodeType":"YulAssignment","src":"31972:23:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"31985:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"31989:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"31993:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31978:6:3"},"nodeType":"YulFunctionCall","src":"31978:17:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"31972:2:3"}]},{"nodeType":"YulAssignment","src":"32036:22:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"32049:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"32052:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"32056:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"32042:6:3"},"nodeType":"YulFunctionCall","src":"32042:16:3"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"32036:2:3"}]},{"nodeType":"YulVariableDeclaration","src":"32098:35:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"32116:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"32123:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"32126:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32119:3:3"},"nodeType":"YulFunctionCall","src":"32119:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"32131:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"32109:6:3"},"nodeType":"YulFunctionCall","src":"32109:24:3"},"variables":[{"name":"TT1","nodeType":"YulTypedName","src":"32102:3:3","type":""}]},{"nodeType":"YulAssignment","src":"32173:24:3","value":{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"32186:2:3"},{"name":"TT1","nodeType":"YulIdentifier","src":"32190:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"32195:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32179:6:3"},"nodeType":"YulFunctionCall","src":"32179:18:3"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"32173:2:3"}]},{"nodeType":"YulVariableDeclaration","src":"32245:26:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32262:1:3","type":"","value":"3"},{"name":"y2","nodeType":"YulIdentifier","src":"32265:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"32269:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32255:6:3"},"nodeType":"YulFunctionCall","src":"32255:16:3"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"32249:2:3","type":""}]},{"nodeType":"YulAssignment","src":"32309:26:3","value":{"arguments":[{"name":"TT1","nodeType":"YulIdentifier","src":"32323:3:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"32328:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"32333:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32316:6:3"},"nodeType":"YulFunctionCall","src":"32316:19:3"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"32309:3:3"}]},{"nodeType":"YulAssignment","src":"32382:23:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"32395:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"32399:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"32403:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32388:6:3"},"nodeType":"YulFunctionCall","src":"32388:17:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"32382:2:3"}]},{"nodeType":"YulAssignment","src":"32459:57:3","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"32478:2:3"},{"name":"T4","nodeType":"YulIdentifier","src":"32482:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"32486:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32471:6:3"},"nodeType":"YulFunctionCall","src":"32471:17:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"32497:7:3"},{"name":"T3","nodeType":"YulIdentifier","src":"32506:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"32510:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32490:6:3"},"nodeType":"YulFunctionCall","src":"32490:22:3"},{"name":"p","nodeType":"YulIdentifier","src":"32514:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"32464:6:3"},"nodeType":"YulFunctionCall","src":"32464:52:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"32459:1:3"}]},{"nodeType":"YulAssignment","src":"32561:45:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"32574:2:3"},{"arguments":[{"name":"T3","nodeType":"YulIdentifier","src":"32585:2:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"32593:1:3"},{"name":"X","nodeType":"YulIdentifier","src":"32596:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32589:3:3"},"nodeType":"YulFunctionCall","src":"32589:9:3"},{"name":"p","nodeType":"YulIdentifier","src":"32600:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"32578:6:3"},"nodeType":"YulFunctionCall","src":"32578:24:3"},{"name":"p","nodeType":"YulIdentifier","src":"32604:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32567:6:3"},"nodeType":"YulFunctionCall","src":"32567:39:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"32561:2:3"}]},{"nodeType":"YulAssignment","src":"32650:36:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"32662:2:3"},{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"32673:2:3"},{"name":"Y","nodeType":"YulIdentifier","src":"32677:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"32680:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32666:6:3"},"nodeType":"YulFunctionCall","src":"32666:16:3"},{"name":"p","nodeType":"YulIdentifier","src":"32684:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"32655:6:3"},"nodeType":"YulFunctionCall","src":"32655:31:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"32650:1:3"}]},{"nodeType":"YulContinue","src":"32739:8:3"}]},"condition":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"31714:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31707:6:3"},"nodeType":"YulFunctionCall","src":"31707:10:3"},"nodeType":"YulIf","src":"31704:1073:3"}]},"condition":{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"31670:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31663:6:3"},"nodeType":"YulFunctionCall","src":"31663:10:3"},"nodeType":"YulIf","src":"31660:1143:3"},{"nodeType":"YulVariableDeclaration","src":"32829:27:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"32846:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"32850:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"32854:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32839:6:3"},"nodeType":"YulFunctionCall","src":"32839:17:3"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"32833:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"32881:27:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"32898:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"32902:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"32906:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32891:6:3"},"nodeType":"YulFunctionCall","src":"32891:17:3"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"32885:2:3","type":""}]},{"nodeType":"YulAssignment","src":"32936:23:3","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"32949:2:3"},{"name":"T4","nodeType":"YulIdentifier","src":"32953:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"32957:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32942:6:3"},"nodeType":"YulFunctionCall","src":"32942:17:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"32936:2:3"}]},{"nodeType":"YulAssignment","src":"33021:25:3","value":{"arguments":[{"name":"zzz","nodeType":"YulIdentifier","src":"33035:3:3"},{"name":"T1","nodeType":"YulIdentifier","src":"33040:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"33044:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"33028:6:3"},"nodeType":"YulFunctionCall","src":"33028:18:3"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"33021:3:3"}]},{"nodeType":"YulVariableDeclaration","src":"33080:27:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"33098:1:3"},{"name":"T4","nodeType":"YulIdentifier","src":"33101:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"33105:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"33091:6:3"},"nodeType":"YulFunctionCall","src":"33091:16:3"},"variables":[{"name":"zz1","nodeType":"YulTypedName","src":"33084:3:3","type":""}]},{"nodeType":"YulAssignment","src":"33132:81:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"33158:2:3"},{"name":"y2","nodeType":"YulIdentifier","src":"33162:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"33166:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"33151:6:3"},"nodeType":"YulFunctionCall","src":"33151:17:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"33174:1:3"},{"name":"T1","nodeType":"YulIdentifier","src":"33177:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"33170:3:3"},"nodeType":"YulFunctionCall","src":"33170:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"33182:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"33144:6:3"},"nodeType":"YulFunctionCall","src":"33144:40:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"33193:7:3"},{"name":"zz1","nodeType":"YulIdentifier","src":"33202:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"33207:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"33186:6:3"},"nodeType":"YulFunctionCall","src":"33186:23:3"},{"name":"p","nodeType":"YulIdentifier","src":"33211:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"33137:6:3"},"nodeType":"YulFunctionCall","src":"33137:76:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"33132:1:3"}]},{"nodeType":"YulAssignment","src":"33238:74:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"zz1","nodeType":"YulIdentifier","src":"33264:3:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"33273:1:3"},{"name":"X","nodeType":"YulIdentifier","src":"33276:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"33269:3:3"},"nodeType":"YulFunctionCall","src":"33269:9:3"},{"name":"p","nodeType":"YulIdentifier","src":"33280:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"33257:6:3"},"nodeType":"YulFunctionCall","src":"33257:25:3"},{"name":"y2","nodeType":"YulIdentifier","src":"33284:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"33288:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"33250:6:3"},"nodeType":"YulFunctionCall","src":"33250:40:3"},{"arguments":[{"name":"Y","nodeType":"YulIdentifier","src":"33299:1:3"},{"name":"T1","nodeType":"YulIdentifier","src":"33302:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"33306:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"33292:6:3"},"nodeType":"YulFunctionCall","src":"33292:16:3"},{"name":"p","nodeType":"YulIdentifier","src":"33310:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"33243:6:3"},"nodeType":"YulFunctionCall","src":"33243:69:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"33238:1:3"}]}]}]},"condition":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"28722:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"28729:3:3","type":"","value":"191"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"28719:2:3"},"nodeType":"YulFunctionCall","src":"28719:14:3"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"28734:28:3","statements":[{"nodeType":"YulAssignment","src":"28736:24:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"28749:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"28756:3:3","type":"","value":"191"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28745:3:3"},"nodeType":"YulFunctionCall","src":"28745:15:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"28736:5:3"}]}]},"pre":{"nodeType":"YulBlock","src":"28716:2:3","statements":[]},"src":"28712:4640:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33391:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"33394:4:3","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33387:3:3"},"nodeType":"YulFunctionCall","src":"33387:12:3"},{"name":"zz","nodeType":"YulIdentifier","src":"33401:2:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33380:6:3"},"nodeType":"YulFunctionCall","src":"33380:24:3"},"nodeType":"YulExpressionStatement","src":"33380:24:3"},{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33664:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"33667:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33657:6:3"},"nodeType":"YulFunctionCall","src":"33657:15:3"},"nodeType":"YulExpressionStatement","src":"33657:15:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33700:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"33703:4:3","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33696:3:3"},"nodeType":"YulFunctionCall","src":"33696:12:3"},{"kind":"number","nodeType":"YulLiteral","src":"33710:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33689:6:3"},"nodeType":"YulFunctionCall","src":"33689:26:3"},"nodeType":"YulExpressionStatement","src":"33689:26:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33743:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"33746:4:3","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33739:3:3"},"nodeType":"YulFunctionCall","src":"33739:12:3"},{"kind":"number","nodeType":"YulLiteral","src":"33753:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33732:6:3"},"nodeType":"YulFunctionCall","src":"33732:26:3"},"nodeType":"YulExpressionStatement","src":"33732:26:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33897:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"33900:4:3","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33893:3:3"},"nodeType":"YulFunctionCall","src":"33893:12:3"},{"name":"minus_2","nodeType":"YulIdentifier","src":"33907:7:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33886:6:3"},"nodeType":"YulFunctionCall","src":"33886:29:3"},"nodeType":"YulExpressionStatement","src":"33886:29:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33943:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"33946:4:3","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33939:3:3"},"nodeType":"YulFunctionCall","src":"33939:12:3"},{"name":"p","nodeType":"YulIdentifier","src":"33953:1:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33932:6:3"},"nodeType":"YulFunctionCall","src":"33932:23:3"},"nodeType":"YulExpressionStatement","src":"33932:23:3"},{"body":{"nodeType":"YulBlock","src":"34090:16:3","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34099:1:3","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"34102:1:3","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"34092:6:3"},"nodeType":"YulFunctionCall","src":"34092:12:3"},"nodeType":"YulExpressionStatement","src":"34092:12:3"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34061:1:3","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"34057:3:3"},"nodeType":"YulFunctionCall","src":"34057:6:3"},{"kind":"number","nodeType":"YulLiteral","src":"34065:4:3","type":"","value":"0x05"},{"name":"T","nodeType":"YulIdentifier","src":"34071:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"34074:4:3","type":"","value":"0xc0"},{"name":"T","nodeType":"YulIdentifier","src":"34080:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"34083:4:3","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"34046:10:3"},"nodeType":"YulFunctionCall","src":"34046:42:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"34039:6:3"},"nodeType":"YulFunctionCall","src":"34039:50:3"},"nodeType":"YulIf","src":"34036:70:3"},{"nodeType":"YulAssignment","src":"34124:14:3","value":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"34136:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34130:5:3"},"nodeType":"YulFunctionCall","src":"34130:8:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"34124:2:3"}]},{"nodeType":"YulAssignment","src":"34155:21:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"34167:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"34170:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"34174:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"34160:6:3"},"nodeType":"YulFunctionCall","src":"34160:16:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"34155:1:3"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2448,"isOffset":false,"isSlot":false,"src":"28433:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"28442:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"28517:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"28555:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"30963:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"31225:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"31271:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"31475:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"31553:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"33391:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"33664:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"33700:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"33743:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"33897:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"33943:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"34071:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"34080:1:3","valueSize":1},{"declaration":2448,"isOffset":false,"isSlot":false,"src":"34136:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"28506:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"28997:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"29138:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"29164:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"29363:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"29561:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"31214:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"31572:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"31917:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"32049:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"32116:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"32459:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"32596:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"33098:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"33132:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"33276:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"34155:1:3","valueSize":1},{"declaration":2438,"isOffset":false,"isSlot":false,"src":"34167:1:3","valueSize":1},{"declaration":2435,"isOffset":false,"isSlot":false,"src":"28420:11:3","valueSize":1},{"declaration":2435,"isOffset":false,"isSlot":false,"src":"30950:11:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"29401:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"31769:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"32497:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"33193:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"33907:7:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"28871:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"28944:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29004:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29069:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29145:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29153:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29171:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29175:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29179:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29253:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29315:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29390:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29414:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29418:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29568:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29576:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29580:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29742:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"29750:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"30844:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"31489:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"31496:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"31561:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"31569:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"31576:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"31781:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"31856:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"31924:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"31993:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32056:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32123:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32131:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32195:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32269:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32333:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32403:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32486:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32510:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32514:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32593:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32600:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32604:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32680:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32684:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32854:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32906:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"32957:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33044:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33105:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33166:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33174:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33182:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33207:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33211:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33273:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33280:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33288:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33306:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33310:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"33953:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"34174:1:3","valueSize":1},{"declaration":2431,"isOffset":false,"isSlot":false,"src":"30038:8:3","valueSize":1},{"declaration":2431,"isOffset":false,"isSlot":false,"src":"30244:8:3","valueSize":1},{"declaration":2431,"isOffset":false,"isSlot":false,"src":"30452:8:3","valueSize":1},{"declaration":2431,"isOffset":false,"isSlot":false,"src":"30653:8:3","valueSize":1},{"declaration":2433,"isOffset":false,"isSlot":false,"src":"30000:8:3","valueSize":1},{"declaration":2433,"isOffset":false,"isSlot":false,"src":"30205:8:3","valueSize":1},{"declaration":2433,"isOffset":false,"isSlot":false,"src":"30413:8:3","valueSize":1},{"declaration":2433,"isOffset":false,"isSlot":false,"src":"30615:8:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"28483:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"28608:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"29148:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"29167:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"29294:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"29311:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"31180:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"31307:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"31557:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"32052:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"32126:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"32382:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"32399:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"32936:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"32949:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"33401:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"34124:2:3","valueSize":1},{"declaration":2441,"isOffset":false,"isSlot":false,"src":"34170:2:3","valueSize":1}],"id":2570,"nodeType":"InlineAssembly","src":"28381:5816:3"}]}]},"id":2573,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_mulmuladd_S8_extcode","nameLocation":"27479:25:3","nodeType":"FunctionDefinition","parameters":{"id":2436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2431,"mutability":"mutable","name":"scalar_u","nameLocation":"27513:8:3","nodeType":"VariableDeclaration","scope":2573,"src":"27505:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2430,"name":"uint256","nodeType":"ElementaryTypeName","src":"27505:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2433,"mutability":"mutable","name":"scalar_v","nameLocation":"27531:8:3","nodeType":"VariableDeclaration","scope":2573,"src":"27523:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2432,"name":"uint256","nodeType":"ElementaryTypeName","src":"27523:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2435,"mutability":"mutable","name":"dataPointer","nameLocation":"27549:11:3","nodeType":"VariableDeclaration","scope":2573,"src":"27541:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2434,"name":"address","nodeType":"ElementaryTypeName","src":"27541:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27504:57:3"},"returnParameters":{"id":2439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2438,"mutability":"mutable","name":"X","nameLocation":"27609:1:3","nodeType":"VariableDeclaration","scope":2573,"src":"27601:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2437,"name":"uint256","nodeType":"ElementaryTypeName","src":"27601:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27600:25:3"},"scope":2797,"src":"27470:6759:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2716,"nodeType":"Block","src":"34473:4828:3","statements":[{"assignments":[2585],"declarations":[{"constant":false,"id":2585,"mutability":"mutable","name":"zz","nameLocation":"34491:2:3","nodeType":"VariableDeclaration","scope":2716,"src":"34483:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2584,"name":"uint256","nodeType":"ElementaryTypeName","src":"34483:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2586,"nodeType":"VariableDeclarationStatement","src":"34483:10:3"},{"assignments":[2592],"declarations":[{"constant":false,"id":2592,"mutability":"mutable","name":"T","nameLocation":"34561:1:3","nodeType":"VariableDeclaration","scope":2716,"src":"34543:19:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6]"},"typeName":{"baseType":{"id":2590,"name":"uint256","nodeType":"ElementaryTypeName","src":"34543:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2591,"length":{"hexValue":"36","id":2589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34551:1:3","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"ArrayTypeName","src":"34543:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_storage_ptr","typeString":"uint256[6]"}},"visibility":"internal"}],"id":2593,"nodeType":"VariableDeclarationStatement","src":"34543:19:3"},{"expression":{"id":2596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2594,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"34572:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"323536","id":2595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34577:3:3","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"src":"34572:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2597,"nodeType":"ExpressionStatement","src":"34572:8:3"},{"id":2715,"nodeType":"UncheckedBlock","src":"34605:4674:3","statements":[{"body":{"id":2712,"nodeType":"Block","src":"34647:552:3","statements":[{"expression":{"id":2607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2603,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"34665:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2604,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"34670:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34675:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34670:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34665:11:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2608,"nodeType":"ExpressionStatement","src":"34665:11:3"},{"expression":{"id":2710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2609,"name":"T","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2592,"src":"34744:1:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6] memory"}},"id":2611,"indexExpression":{"hexValue":"30","id":2610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34746:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34744:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3634","id":2612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34751:2:3","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"313238","id":2613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34802:3:3","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2614,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2577,"src":"34810:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":2615,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"34822:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34810:14:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2617,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34809:16:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34828:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34809:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2620,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34808:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34802:28:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3634","id":2622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34833:2:3","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2623,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2577,"src":"34840:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2624,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"34853:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3634","id":2625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34858:2:3","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"34853:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2627,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34852:9:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34840:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2629,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34839:23:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2630,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34865:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34839:27:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2632,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34838:29:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34833:34:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34802:65:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3332","id":2635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34898:2:3","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2636,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2577,"src":"34905:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2637,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"34918:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313238","id":2638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34923:3:3","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"34918:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2640,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34917:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34905:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2642,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34904:24:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34931:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34904:28:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2645,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34903:30:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34898:35:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34802:131:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3136","id":2648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34936:2:3","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2649,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2577,"src":"34943:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2650,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"34956:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313932","id":2651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34961:3:3","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},"src":"34956:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2653,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34955:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34943:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2655,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34942:24:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34969:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34942:28:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2658,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34941:30:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34936:35:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34802:169:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":2661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35002:1:3","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2662,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2575,"src":"35008:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":2663,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"35020:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35008:14:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2665,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35007:16:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35026:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"35007:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2668,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35006:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35002:26:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34802:226:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":2671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35031:1:3","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2672,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2575,"src":"35037:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2673,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"35050:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3634","id":2674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35055:2:3","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"35050:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2676,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35049:9:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35037:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2678,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35036:23:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35062:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"35036:27:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2681,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35035:29:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35031:33:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34802:262:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35095:1:3","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2685,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2575,"src":"35101:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2686,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"35114:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313238","id":2687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35119:3:3","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"35114:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2689,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35113:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35101:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2691,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35100:24:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35127:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"35100:28:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2694,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35099:30:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35095:34:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34802:327:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2697,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2575,"src":"35134:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2698,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"35147:2:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313932","id":2699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35152:3:3","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},"src":"35147:8:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2701,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35146:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35134:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2703,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35133:24:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":2704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35160:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"35133:28:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2706,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35132:30:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34802:360:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2708,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34776:408:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34751:433:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34744:440:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2711,"nodeType":"ExpressionStatement","src":"34744:440:3"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2598,"name":"T","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2592,"src":"34636:1:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6] memory"}},"id":2600,"indexExpression":{"hexValue":"30","id":2599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34638:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34636:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34644:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34636:9:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2713,"nodeType":"WhileStatement","src":"34629:570:3"},{"AST":{"nodeType":"YulBlock","src":"35221:4048:3","statements":[{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"35248:1:3"},{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"35261:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35255:5:3"},"nodeType":"YulFunctionCall","src":"35255:8:3"},{"name":"dataPointer","nodeType":"YulIdentifier","src":"35265:11:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35251:3:3"},"nodeType":"YulFunctionCall","src":"35251:26:3"},{"kind":"number","nodeType":"YulLiteral","src":"35279:2:3","type":"","value":"64"}],"functionName":{"name":"codecopy","nodeType":"YulIdentifier","src":"35239:8:3"},"nodeType":"YulFunctionCall","src":"35239:43:3"},"nodeType":"YulExpressionStatement","src":"35239:43:3"},{"nodeType":"YulAssignment","src":"35299:13:3","value":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"35310:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35304:5:3"},"nodeType":"YulFunctionCall","src":"35304:8:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"35299:1:3"}]},{"nodeType":"YulVariableDeclaration","src":"35329:26:3","value":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"35348:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"35351:2:3","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35344:3:3"},"nodeType":"YulFunctionCall","src":"35344:10:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35338:5:3"},"nodeType":"YulFunctionCall","src":"35338:17:3"},"variables":[{"name":"Y","nodeType":"YulTypedName","src":"35333:1:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"35372:12:3","value":{"kind":"number","nodeType":"YulLiteral","src":"35383:1:3","type":"","value":"1"},"variables":[{"name":"zzz","nodeType":"YulTypedName","src":"35376:3:3","type":""}]},{"nodeType":"YulAssignment","src":"35401:7:3","value":{"kind":"number","nodeType":"YulLiteral","src":"35407:1:3","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"35401:2:3"}]},{"body":{"nodeType":"YulBlock","src":"35574:2850:3","statements":[{"nodeType":"YulVariableDeclaration","src":"35596:25:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35613:1:3","type":"","value":"2"},{"name":"Y","nodeType":"YulIdentifier","src":"35616:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"35619:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35606:6:3"},"nodeType":"YulFunctionCall","src":"35606:15:3"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"35600:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"35661:27:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"35678:2:3"},{"name":"T1","nodeType":"YulIdentifier","src":"35682:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"35686:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35671:6:3"},"nodeType":"YulFunctionCall","src":"35671:17:3"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"35665:2:3","type":""}]},{"nodeType":"YulVariableDeclaration","src":"35718:26:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"35735:1:3"},{"name":"T2","nodeType":"YulIdentifier","src":"35738:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"35742:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35728:6:3"},"nodeType":"YulFunctionCall","src":"35728:16:3"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"35722:2:3","type":""}]},{"nodeType":"YulAssignment","src":"35777:23:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"35790:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"35794:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"35798:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35783:6:3"},"nodeType":"YulFunctionCall","src":"35783:17:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"35777:2:3"}]},{"nodeType":"YulVariableDeclaration","src":"35829:77:3","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35846:1:3","type":"","value":"3"},{"arguments":[{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"35863:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"35870:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"35873:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35866:3:3"},"nodeType":"YulFunctionCall","src":"35866:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"35878:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"35856:6:3"},"nodeType":"YulFunctionCall","src":"35856:24:3"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"35889:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"35892:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"35896:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"35882:6:3"},"nodeType":"YulFunctionCall","src":"35882:16:3"},{"name":"p","nodeType":"YulIdentifier","src":"35900:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35849:6:3"},"nodeType":"YulFunctionCall","src":"35849:53:3"},{"name":"p","nodeType":"YulIdentifier","src":"35904:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35839:6:3"},"nodeType":"YulFunctionCall","src":"35839:67:3"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"35833:2:3","type":""}]},{"nodeType":"YulAssignment","src":"35951:25:3","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"35965:2:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"35969:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"35974:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35958:6:3"},"nodeType":"YulFunctionCall","src":"35958:18:3"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"35951:3:3"}]},{"nodeType":"YulAssignment","src":"36011:23:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"36024:2:3"},{"name":"zz","nodeType":"YulIdentifier","src":"36028:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"36032:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"36017:6:3"},"nodeType":"YulFunctionCall","src":"36017:17:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"36011:2:3"}]},{"nodeType":"YulAssignment","src":"36076:57:3","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"36095:2:3"},{"name":"T4","nodeType":"YulIdentifier","src":"36099:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"36103:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"36088:6:3"},"nodeType":"YulFunctionCall","src":"36088:17:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"36114:7:3"},{"name":"T3","nodeType":"YulIdentifier","src":"36123:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"36127:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"36107:6:3"},"nodeType":"YulFunctionCall","src":"36107:22:3"},{"name":"p","nodeType":"YulIdentifier","src":"36131:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"36081:6:3"},"nodeType":"YulFunctionCall","src":"36081:52:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"36076:1:3"}]},{"nodeType":"YulAssignment","src":"36238:45:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"36251:2:3"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"36262:1:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"36269:1:3"},{"name":"T3","nodeType":"YulIdentifier","src":"36272:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"36265:3:3"},"nodeType":"YulFunctionCall","src":"36265:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"36277:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"36255:6:3"},"nodeType":"YulFunctionCall","src":"36255:24:3"},{"name":"p","nodeType":"YulIdentifier","src":"36281:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"36244:6:3"},"nodeType":"YulFunctionCall","src":"36244:39:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"36238:2:3"}]},{"nodeType":"YulAssignment","src":"36409:36:3","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"36428:2:3"},{"name":"Y","nodeType":"YulIdentifier","src":"36432:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"36435:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"36421:6:3"},"nodeType":"YulFunctionCall","src":"36421:16:3"},{"name":"T2","nodeType":"YulIdentifier","src":"36439:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"36443:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"36414:6:3"},"nodeType":"YulFunctionCall","src":"36414:31:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"36409:1:3"}]},{"nodeType":"YulAssignment","src":"36604:86:3","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36618:2:3","type":"","value":"13"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36630:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"36637:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36626:3:3"},"nodeType":"YulFunctionCall","src":"36626:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"36648:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36622:3:3"},"nodeType":"YulFunctionCall","src":"36622:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36614:3:3"},"nodeType":"YulFunctionCall","src":"36614:37:3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36657:1:3","type":"","value":"9"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36668:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"36675:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36664:3:3"},"nodeType":"YulFunctionCall","src":"36664:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"36686:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36660:3:3"},"nodeType":"YulFunctionCall","src":"36660:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36653:3:3"},"nodeType":"YulFunctionCall","src":"36653:36:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36610:3:3"},"nodeType":"YulFunctionCall","src":"36610:80:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"36604:2:3"}]},{"nodeType":"YulAssignment","src":"36711:23:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36724:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"36731:2:3","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"36720:3:3"},"nodeType":"YulFunctionCall","src":"36720:14:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"36711:5:3"}]},{"nodeType":"YulAssignment","src":"36755:95:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"36765:2:3"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36777:2:3","type":"","value":"12"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36789:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"36796:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36785:3:3"},"nodeType":"YulFunctionCall","src":"36785:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"36807:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36781:3:3"},"nodeType":"YulFunctionCall","src":"36781:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36773:3:3"},"nodeType":"YulFunctionCall","src":"36773:37:3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36816:1:3","type":"","value":"8"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36827:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"36834:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36823:3:3"},"nodeType":"YulFunctionCall","src":"36823:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"36845:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36819:3:3"},"nodeType":"YulFunctionCall","src":"36819:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36812:3:3"},"nodeType":"YulFunctionCall","src":"36812:36:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36769:3:3"},"nodeType":"YulFunctionCall","src":"36769:80:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36761:3:3"},"nodeType":"YulFunctionCall","src":"36761:89:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"36755:2:3"}]},{"nodeType":"YulAssignment","src":"36871:23:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36884:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"36891:2:3","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"36880:3:3"},"nodeType":"YulFunctionCall","src":"36880:14:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"36871:5:3"}]},{"nodeType":"YulAssignment","src":"36915:95:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"36925:2:3"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36937:2:3","type":"","value":"11"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36949:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"36956:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36945:3:3"},"nodeType":"YulFunctionCall","src":"36945:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"36967:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36941:3:3"},"nodeType":"YulFunctionCall","src":"36941:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36933:3:3"},"nodeType":"YulFunctionCall","src":"36933:37:3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36976:1:3","type":"","value":"7"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36987:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"36994:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36983:3:3"},"nodeType":"YulFunctionCall","src":"36983:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"37005:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36979:3:3"},"nodeType":"YulFunctionCall","src":"36979:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36972:3:3"},"nodeType":"YulFunctionCall","src":"36972:36:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36929:3:3"},"nodeType":"YulFunctionCall","src":"36929:80:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36921:3:3"},"nodeType":"YulFunctionCall","src":"36921:89:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"36915:2:3"}]},{"nodeType":"YulAssignment","src":"37031:23:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"37044:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"37051:2:3","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"37040:3:3"},"nodeType":"YulFunctionCall","src":"37040:14:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"37031:5:3"}]},{"nodeType":"YulAssignment","src":"37075:95:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"37085:2:3"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37097:2:3","type":"","value":"10"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"37109:5:3"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"37116:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"37105:3:3"},"nodeType":"YulFunctionCall","src":"37105:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"37127:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"37101:3:3"},"nodeType":"YulFunctionCall","src":"37101:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"37093:3:3"},"nodeType":"YulFunctionCall","src":"37093:37:3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37136:1:3","type":"","value":"6"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"37147:5:3"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"37154:8:3"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"37143:3:3"},"nodeType":"YulFunctionCall","src":"37143:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"37165:1:3","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"37139:3:3"},"nodeType":"YulFunctionCall","src":"37139:28:3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"37132:3:3"},"nodeType":"YulFunctionCall","src":"37132:36:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37089:3:3"},"nodeType":"YulFunctionCall","src":"37089:80:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37081:3:3"},"nodeType":"YulFunctionCall","src":"37081:89:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"37075:2:3"}]},{"body":{"nodeType":"YulBlock","src":"37380:96:3","statements":[{"nodeType":"YulAssignment","src":"37406:14:3","value":{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"37415:1:3"},{"name":"Y","nodeType":"YulIdentifier","src":"37418:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"37411:3:3"},"nodeType":"YulFunctionCall","src":"37411:9:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"37406:1:3"}]},{"nodeType":"YulContinue","src":"37446:8:3"}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"37376:2:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"37369:6:3"},"nodeType":"YulFunctionCall","src":"37369:10:3"},"nodeType":"YulIf","src":"37366:110:3"},{"nodeType":"YulBlock","src":"37497:909:3","statements":[{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"37613:1:3"},{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"37620:2:3"},{"name":"dataPointer","nodeType":"YulIdentifier","src":"37624:11:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37616:3:3"},"nodeType":"YulFunctionCall","src":"37616:20:3"},{"kind":"number","nodeType":"YulLiteral","src":"37638:2:3","type":"","value":"64"}],"functionName":{"name":"codecopy","nodeType":"YulIdentifier","src":"37604:8:3"},"nodeType":"YulFunctionCall","src":"37604:37:3"},"nodeType":"YulExpressionStatement","src":"37604:37:3"},{"nodeType":"YulVariableDeclaration","src":"37713:57:3","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"37747:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"37750:2:3","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37743:3:3"},"nodeType":"YulFunctionCall","src":"37743:10:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"37737:5:3"},"nodeType":"YulFunctionCall","src":"37737:17:3"},{"name":"zzz","nodeType":"YulIdentifier","src":"37756:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"37761:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37730:6:3"},"nodeType":"YulFunctionCall","src":"37730:33:3"},{"name":"Y","nodeType":"YulIdentifier","src":"37765:1:3"},{"name":"p","nodeType":"YulIdentifier","src":"37768:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"37723:6:3"},"nodeType":"YulFunctionCall","src":"37723:47:3"},"variables":[{"name":"y2","nodeType":"YulTypedName","src":"37717:2:3","type":""}]},{"nodeType":"YulAssignment","src":"37795:51:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"37821:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"37815:5:3"},"nodeType":"YulFunctionCall","src":"37815:8:3"},{"name":"zz","nodeType":"YulIdentifier","src":"37825:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"37829:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37808:6:3"},"nodeType":"YulFunctionCall","src":"37808:23:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"37837:1:3"},{"name":"X","nodeType":"YulIdentifier","src":"37840:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"37833:3:3"},"nodeType":"YulFunctionCall","src":"37833:9:3"},{"name":"p","nodeType":"YulIdentifier","src":"37844:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"37801:6:3"},"nodeType":"YulFunctionCall","src":"37801:45:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"37795:2:3"}]},{"nodeType":"YulAssignment","src":"37871:23:3","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"37884:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"37888:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"37892:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37877:6:3"},"nodeType":"YulFunctionCall","src":"37877:17:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"37871:2:3"}]},{"nodeType":"YulAssignment","src":"37919:23:3","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"37932:2:3"},{"name":"T2","nodeType":"YulIdentifier","src":"37936:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"37940:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37925:6:3"},"nodeType":"YulFunctionCall","src":"37925:17:3"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"37919:2:3"}]},{"nodeType":"YulAssignment","src":"37967:23:3","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"37980:2:3"},{"name":"T4","nodeType":"YulIdentifier","src":"37984:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"37988:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37973:6:3"},"nodeType":"YulFunctionCall","src":"37973:17:3"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"37967:2:3"}]},{"nodeType":"YulAssignment","src":"38023:25:3","value":{"arguments":[{"name":"zzz","nodeType":"YulIdentifier","src":"38037:3:3"},{"name":"T1","nodeType":"YulIdentifier","src":"38042:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"38046:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"38030:6:3"},"nodeType":"YulFunctionCall","src":"38030:18:3"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"38023:3:3"}]},{"nodeType":"YulVariableDeclaration","src":"38085:27:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"38103:1:3"},{"name":"T4","nodeType":"YulIdentifier","src":"38106:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"38110:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"38096:6:3"},"nodeType":"YulFunctionCall","src":"38096:16:3"},"variables":[{"name":"zz1","nodeType":"YulTypedName","src":"38089:3:3","type":""}]},{"nodeType":"YulAssignment","src":"38137:82:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"38164:2:3"},{"name":"y2","nodeType":"YulIdentifier","src":"38168:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"38172:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"38157:6:3"},"nodeType":"YulFunctionCall","src":"38157:17:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"38180:1:3"},{"name":"T1","nodeType":"YulIdentifier","src":"38183:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"38176:3:3"},"nodeType":"YulFunctionCall","src":"38176:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"38188:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"38150:6:3"},"nodeType":"YulFunctionCall","src":"38150:40:3"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"38199:7:3"},{"name":"zz1","nodeType":"YulIdentifier","src":"38208:3:3"},{"name":"p","nodeType":"YulIdentifier","src":"38213:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"38192:6:3"},"nodeType":"YulFunctionCall","src":"38192:23:3"},{"name":"p","nodeType":"YulIdentifier","src":"38217:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"38143:6:3"},"nodeType":"YulFunctionCall","src":"38143:76:3"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"38137:2:3"}]},{"nodeType":"YulAssignment","src":"38244:75:3","value":{"arguments":[{"arguments":[{"arguments":[{"name":"zz1","nodeType":"YulIdentifier","src":"38270:3:3"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"38279:1:3"},{"name":"T4","nodeType":"YulIdentifier","src":"38282:2:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"38275:3:3"},"nodeType":"YulFunctionCall","src":"38275:10:3"},{"name":"p","nodeType":"YulIdentifier","src":"38287:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"38263:6:3"},"nodeType":"YulFunctionCall","src":"38263:26:3"},{"name":"y2","nodeType":"YulIdentifier","src":"38291:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"38295:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"38256:6:3"},"nodeType":"YulFunctionCall","src":"38256:41:3"},{"arguments":[{"name":"Y","nodeType":"YulIdentifier","src":"38306:1:3"},{"name":"T1","nodeType":"YulIdentifier","src":"38309:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"38313:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"38299:6:3"},"nodeType":"YulFunctionCall","src":"38299:16:3"},{"name":"p","nodeType":"YulIdentifier","src":"38317:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"38249:6:3"},"nodeType":"YulFunctionCall","src":"38249:70:3"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"38244:1:3"}]},{"nodeType":"YulAssignment","src":"38344:8:3","value":{"name":"T2","nodeType":"YulIdentifier","src":"38350:2:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"38344:2:3"}]},{"nodeType":"YulAssignment","src":"38377:7:3","value":{"name":"T4","nodeType":"YulIdentifier","src":"38382:2:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"38377:1:3"}]}]}]},"condition":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"35533:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"35540:3:3","type":"","value":"191"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"35530:2:3"},"nodeType":"YulFunctionCall","src":"35530:14:3"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"35545:28:3","statements":[{"nodeType":"YulAssignment","src":"35547:24:3","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"35560:5:3"},{"kind":"number","nodeType":"YulLiteral","src":"35567:3:3","type":"","value":"191"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35556:3:3"},"nodeType":"YulFunctionCall","src":"35556:15:3"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"35547:5:3"}]}]},"pre":{"nodeType":"YulBlock","src":"35509:20:3","statements":[{"nodeType":"YulVariableDeclaration","src":"35511:16:3","value":{"kind":"number","nodeType":"YulLiteral","src":"35524:3:3","type":"","value":"254"},"variables":[{"name":"index","nodeType":"YulTypedName","src":"35515:5:3","type":""}]}]},"src":"35505:2919:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"38463:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"38466:4:3","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38459:3:3"},"nodeType":"YulFunctionCall","src":"38459:12:3"},{"name":"zz","nodeType":"YulIdentifier","src":"38473:2:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38452:6:3"},"nodeType":"YulFunctionCall","src":"38452:24:3"},"nodeType":"YulExpressionStatement","src":"38452:24:3"},{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"38736:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"38739:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38729:6:3"},"nodeType":"YulFunctionCall","src":"38729:15:3"},"nodeType":"YulExpressionStatement","src":"38729:15:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"38772:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"38775:4:3","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38768:3:3"},"nodeType":"YulFunctionCall","src":"38768:12:3"},{"kind":"number","nodeType":"YulLiteral","src":"38782:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38761:6:3"},"nodeType":"YulFunctionCall","src":"38761:26:3"},"nodeType":"YulExpressionStatement","src":"38761:26:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"38815:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"38818:4:3","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38811:3:3"},"nodeType":"YulFunctionCall","src":"38811:12:3"},{"kind":"number","nodeType":"YulLiteral","src":"38825:4:3","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38804:6:3"},"nodeType":"YulFunctionCall","src":"38804:26:3"},"nodeType":"YulExpressionStatement","src":"38804:26:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"38969:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"38972:4:3","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38965:3:3"},"nodeType":"YulFunctionCall","src":"38965:12:3"},{"name":"minus_2","nodeType":"YulIdentifier","src":"38979:7:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38958:6:3"},"nodeType":"YulFunctionCall","src":"38958:29:3"},"nodeType":"YulExpressionStatement","src":"38958:29:3"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"39015:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"39018:4:3","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39011:3:3"},"nodeType":"YulFunctionCall","src":"39011:12:3"},{"name":"p","nodeType":"YulIdentifier","src":"39025:1:3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39004:6:3"},"nodeType":"YulFunctionCall","src":"39004:23:3"},"nodeType":"YulExpressionStatement","src":"39004:23:3"},{"body":{"nodeType":"YulBlock","src":"39162:16:3","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"39171:1:3","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"39174:1:3","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"39164:6:3"},"nodeType":"YulFunctionCall","src":"39164:12:3"},"nodeType":"YulExpressionStatement","src":"39164:12:3"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"39133:1:3","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"39129:3:3"},"nodeType":"YulFunctionCall","src":"39129:6:3"},{"kind":"number","nodeType":"YulLiteral","src":"39137:4:3","type":"","value":"0x05"},{"name":"T","nodeType":"YulIdentifier","src":"39143:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"39146:4:3","type":"","value":"0xc0"},{"name":"T","nodeType":"YulIdentifier","src":"39152:1:3"},{"kind":"number","nodeType":"YulLiteral","src":"39155:4:3","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"39118:10:3"},"nodeType":"YulFunctionCall","src":"39118:42:3"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"39111:6:3"},"nodeType":"YulFunctionCall","src":"39111:50:3"},"nodeType":"YulIf","src":"39108:70:3"},{"nodeType":"YulAssignment","src":"39196:14:3","value":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"39208:1:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39202:5:3"},"nodeType":"YulFunctionCall","src":"39202:8:3"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"39196:2:3"}]},{"nodeType":"YulAssignment","src":"39227:21:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"39239:1:3"},{"name":"zz","nodeType":"YulIdentifier","src":"39242:2:3"},{"name":"p","nodeType":"YulIdentifier","src":"39246:1:3"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"39232:6:3"},"nodeType":"YulFunctionCall","src":"39232:16:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"39227:1:3"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2592,"isOffset":false,"isSlot":false,"src":"35248:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"35261:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"35310:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"35348:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"37613:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"37747:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"37821:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"38463:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"38736:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"38772:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"38815:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"38969:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"39015:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"39143:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"39152:1:3","valueSize":1},{"declaration":2592,"isOffset":false,"isSlot":false,"src":"39208:1:3","valueSize":1},{"declaration":2582,"isOffset":false,"isSlot":false,"src":"35299:1:3","valueSize":1},{"declaration":2582,"isOffset":false,"isSlot":false,"src":"35735:1:3","valueSize":1},{"declaration":2582,"isOffset":false,"isSlot":false,"src":"35863:1:3","valueSize":1},{"declaration":2582,"isOffset":false,"isSlot":false,"src":"35889:1:3","valueSize":1},{"declaration":2582,"isOffset":false,"isSlot":false,"src":"36076:1:3","valueSize":1},{"declaration":2582,"isOffset":false,"isSlot":false,"src":"36262:1:3","valueSize":1},{"declaration":2582,"isOffset":false,"isSlot":false,"src":"37840:1:3","valueSize":1},{"declaration":2582,"isOffset":false,"isSlot":false,"src":"38103:1:3","valueSize":1},{"declaration":2582,"isOffset":false,"isSlot":false,"src":"38377:1:3","valueSize":1},{"declaration":2582,"isOffset":false,"isSlot":false,"src":"39227:1:3","valueSize":1},{"declaration":2582,"isOffset":false,"isSlot":false,"src":"39239:1:3","valueSize":1},{"declaration":2579,"isOffset":false,"isSlot":false,"src":"35265:11:3","valueSize":1},{"declaration":2579,"isOffset":false,"isSlot":false,"src":"37624:11:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"36114:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"38199:7:3","valueSize":1},{"declaration":1492,"isOffset":false,"isSlot":false,"src":"38979:7:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"35619:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"35686:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"35742:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"35798:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"35870:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"35878:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"35896:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"35900:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"35904:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"35974:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"36032:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"36103:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"36127:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"36131:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"36269:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"36277:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"36281:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"36435:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"36443:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"37415:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"37761:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"37768:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"37829:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"37837:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"37844:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"37892:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"37940:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"37988:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38046:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38110:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38172:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38180:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38188:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38213:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38217:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38279:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38287:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38295:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38313:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"38317:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"39025:1:3","valueSize":1},{"declaration":1474,"isOffset":false,"isSlot":false,"src":"39246:1:3","valueSize":1},{"declaration":2575,"isOffset":false,"isSlot":false,"src":"36675:8:3","valueSize":1},{"declaration":2575,"isOffset":false,"isSlot":false,"src":"36834:8:3","valueSize":1},{"declaration":2575,"isOffset":false,"isSlot":false,"src":"36994:8:3","valueSize":1},{"declaration":2575,"isOffset":false,"isSlot":false,"src":"37154:8:3","valueSize":1},{"declaration":2577,"isOffset":false,"isSlot":false,"src":"36637:8:3","valueSize":1},{"declaration":2577,"isOffset":false,"isSlot":false,"src":"36796:8:3","valueSize":1},{"declaration":2577,"isOffset":false,"isSlot":false,"src":"36956:8:3","valueSize":1},{"declaration":2577,"isOffset":false,"isSlot":false,"src":"37116:8:3","valueSize":1},{"declaration":2585,"isOffset":false,"isSlot":false,"src":"35401:2:3","valueSize":1},{"declaration":2585,"isOffset":false,"isSlot":false,"src":"35873:2:3","valueSize":1},{"declaration":2585,"isOffset":false,"isSlot":false,"src":"35892:2:3","valueSize":1},{"declaration":2585,"isOffset":false,"isSlot":false,"src":"36011:2:3","valueSize":1},{"declaration":2585,"isOffset":false,"isSlot":false,"src":"36028:2:3","valueSize":1},{"declaration":2585,"isOffset":false,"isSlot":false,"src":"37825:2:3","valueSize":1},{"declaration":2585,"isOffset":false,"isSlot":false,"src":"37980:2:3","valueSize":1},{"declaration":2585,"isOffset":false,"isSlot":false,"src":"38344:2:3","valueSize":1},{"declaration":2585,"isOffset":false,"isSlot":false,"src":"38473:2:3","valueSize":1},{"declaration":2585,"isOffset":false,"isSlot":false,"src":"39196:2:3","valueSize":1},{"declaration":2585,"isOffset":false,"isSlot":false,"src":"39242:2:3","valueSize":1}],"id":2714,"nodeType":"InlineAssembly","src":"35212:4057:3"}]}]},"id":2717,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_mulmuladd_S8_hackmem","nameLocation":"34322:25:3","nodeType":"FunctionDefinition","parameters":{"id":2580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2575,"mutability":"mutable","name":"scalar_u","nameLocation":"34356:8:3","nodeType":"VariableDeclaration","scope":2717,"src":"34348:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2574,"name":"uint256","nodeType":"ElementaryTypeName","src":"34348:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2577,"mutability":"mutable","name":"scalar_v","nameLocation":"34374:8:3","nodeType":"VariableDeclaration","scope":2717,"src":"34366:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2576,"name":"uint256","nodeType":"ElementaryTypeName","src":"34366:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2579,"mutability":"mutable","name":"dataPointer","nameLocation":"34392:11:3","nodeType":"VariableDeclaration","scope":2717,"src":"34384:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2578,"name":"uint256","nodeType":"ElementaryTypeName","src":"34384:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34347:57:3"},"returnParameters":{"id":2583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2582,"mutability":"mutable","name":"X","nameLocation":"34452:1:3","nodeType":"VariableDeclaration","scope":2717,"src":"34444:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2581,"name":"uint256","nodeType":"ElementaryTypeName","src":"34444:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34443:25:3"},"scope":2797,"src":"34313:4988:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2795,"nodeType":"Block","src":"40037:574:3","statements":[{"assignments":[2732],"declarations":[{"constant":false,"id":2732,"mutability":"mutable","name":"r","nameLocation":"40055:1:3","nodeType":"VariableDeclaration","scope":2795,"src":"40047:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2731,"name":"uint256","nodeType":"ElementaryTypeName","src":"40047:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2736,"initialValue":{"baseExpression":{"id":2733,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2724,"src":"40059:2:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":2735,"indexExpression":{"hexValue":"30","id":2734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40062:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"40059:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40047:17:3"},{"assignments":[2738],"declarations":[{"constant":false,"id":2738,"mutability":"mutable","name":"s","nameLocation":"40082:1:3","nodeType":"VariableDeclaration","scope":2795,"src":"40074:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2737,"name":"uint256","nodeType":"ElementaryTypeName","src":"40074:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2742,"initialValue":{"baseExpression":{"id":2739,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2724,"src":"40086:2:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":2741,"indexExpression":{"hexValue":"31","id":2740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40089:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"40086:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40074:17:3"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2743,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2732,"src":"40105:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40110:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"40105:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2746,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2732,"src":"40115:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2747,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1489,"src":"40120:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40115:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"40105:16:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2750,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2738,"src":"40125:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40130:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"40125:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"40105:26:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2754,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2738,"src":"40135:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2755,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1489,"src":"40140:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40135:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"40105:36:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2761,"nodeType":"IfStatement","src":"40101:79:3","trueBody":{"id":2760,"nodeType":"Block","src":"40143:37:3","statements":[{"expression":{"hexValue":"66616c7365","id":2758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"40164:5:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":2730,"id":2759,"nodeType":"Return","src":"40157:12:3"}]}},{"assignments":[2763],"declarations":[{"constant":false,"id":2763,"mutability":"mutable","name":"sInv","nameLocation":"40332:4:3","nodeType":"VariableDeclaration","scope":2795,"src":"40324:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2762,"name":"uint256","nodeType":"ElementaryTypeName","src":"40324:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2767,"initialValue":{"arguments":[{"id":2765,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2738,"src":"40351:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2764,"name":"FCL_nModInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1517,"src":"40339:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":2766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40339:14:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40324:29:3"},{"assignments":[2769],"declarations":[{"constant":false,"id":2769,"mutability":"mutable","name":"X","nameLocation":"40371:1:3","nodeType":"VariableDeclaration","scope":2795,"src":"40363:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2768,"name":"uint256","nodeType":"ElementaryTypeName","src":"40363:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2770,"nodeType":"VariableDeclarationStatement","src":"40363:9:3"},{"expression":{"id":2788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2771,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2769,"src":"40413:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":2776,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2720,"src":"40458:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2775,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"40450:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2774,"name":"uint256","nodeType":"ElementaryTypeName","src":"40450:7:3","typeDescriptions":{}}},"id":2777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40450:16:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2778,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"40468:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2779,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1489,"src":"40474:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2773,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"40443:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40443:33:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":2782,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2732,"src":"40485:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2783,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"40488:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2784,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1489,"src":"40494:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2781,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"40478:6:3","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40478:18:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2786,"name":"endcontract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2726,"src":"40498:11:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2772,"name":"ecZZ_mulmuladd_S8_hackmem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2717,"src":"40417:25:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (uint256)"}},"id":2787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40417:93:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40413:97:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2789,"nodeType":"ExpressionStatement","src":"40413:97:3"},{"AST":{"nodeType":"YulBlock","src":"40530:52:3","statements":[{"nodeType":"YulAssignment","src":"40544:28:3","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"40556:1:3"},{"arguments":[{"name":"n","nodeType":"YulIdentifier","src":"40563:1:3"},{"name":"r","nodeType":"YulIdentifier","src":"40566:1:3"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"40559:3:3"},"nodeType":"YulFunctionCall","src":"40559:9:3"},{"name":"n","nodeType":"YulIdentifier","src":"40570:1:3"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"40549:6:3"},"nodeType":"YulFunctionCall","src":"40549:23:3"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"40544:1:3"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2769,"isOffset":false,"isSlot":false,"src":"40544:1:3","valueSize":1},{"declaration":2769,"isOffset":false,"isSlot":false,"src":"40556:1:3","valueSize":1},{"declaration":1489,"isOffset":false,"isSlot":false,"src":"40563:1:3","valueSize":1},{"declaration":1489,"isOffset":false,"isSlot":false,"src":"40570:1:3","valueSize":1},{"declaration":2732,"isOffset":false,"isSlot":false,"src":"40566:1:3","valueSize":1}],"id":2790,"nodeType":"InlineAssembly","src":"40521:61:3"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2791,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2769,"src":"40598:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40603:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"40598:6:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2730,"id":2794,"nodeType":"Return","src":"40591:13:3"}]},"documentation":{"id":2718,"nodeType":"StructuredDocumentation","src":"39593:292:3","text":" @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\n generation of contract bytecode for precomputations is done using sagemath code\n (see sage directory, WebAuthn_precompute.sage)"},"id":2796,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_precomputed_hackmem","nameLocation":"39900:25:3","nodeType":"FunctionDefinition","parameters":{"id":2727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2720,"mutability":"mutable","name":"message","nameLocation":"39934:7:3","nodeType":"VariableDeclaration","scope":2796,"src":"39926:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2719,"name":"bytes32","nodeType":"ElementaryTypeName","src":"39926:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2724,"mutability":"mutable","name":"rs","nameLocation":"39963:2:3","nodeType":"VariableDeclaration","scope":2796,"src":"39943:22:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":2721,"name":"uint256","nodeType":"ElementaryTypeName","src":"39943:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2723,"length":{"hexValue":"32","id":2722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39951:1:3","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"39943:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":2726,"mutability":"mutable","name":"endcontract","nameLocation":"39975:11:3","nodeType":"VariableDeclaration","scope":2796,"src":"39967:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2725,"name":"uint256","nodeType":"ElementaryTypeName","src":"39967:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"39925:62:3"},"returnParameters":{"id":2730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2796,"src":"40027:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2728,"name":"bool","nodeType":"ElementaryTypeName","src":"40027:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"40026:6:3"},"scope":2797,"src":"39891:720:3","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":2798,"src":"1220:39430:3","usedErrors":[],"usedEvents":[]}],"src":"1186:39471:3"},"id":3},"FreshCryptoLib/utils/Base64Url.sol":{"ast":{"absolutePath":"FreshCryptoLib/utils/Base64Url.sol","exportedSymbols":{"Base64Url":[2843]},"id":2844,"license":"Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":2799,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"39:23:4"},{"abstract":false,"baseContracts":[],"canonicalName":"Base64Url","contractDependencies":[],"contractKind":"library","documentation":{"id":2800,"nodeType":"StructuredDocumentation","src":"64:111:4","text":" @dev Encode (without '=' padding) \n @author evmbrahmin, adapted from hiromin's Base64URL libraries"},"fullyImplemented":true,"id":2843,"linearizedBaseContracts":[2843],"name":"Base64Url","nameLocation":"184:9:4","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":2801,"nodeType":"StructuredDocumentation","src":"200:48:4","text":" @dev Base64Url Encoding Table"},"id":2804,"mutability":"constant","name":"ENCODING_TABLE","nameLocation":"278:14:4","nodeType":"VariableDeclaration","scope":2843,"src":"253:116:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2802,"name":"string","nodeType":"ElementaryTypeName","src":"253:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f","id":2803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"303:66:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_5f7e6d3cba140c1411e96b7033571a229a3135b5c436a9698b398a19a1c64b50","typeString":"literal_string \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\""},"value":"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"},"visibility":"internal"},{"body":{"id":2841,"nodeType":"Block","src":"449:1841:4","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2811,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2806,"src":"463:4:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"468:6:4","memberName":"length","nodeType":"MemberAccess","src":"463:11:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"478:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"463:16:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2817,"nodeType":"IfStatement","src":"459:31:4","trueBody":{"expression":{"hexValue":"","id":2815,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"488:2:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},"functionReturnParameters":2810,"id":2816,"nodeType":"Return","src":"481:9:4"}},{"assignments":[2819],"declarations":[{"constant":false,"id":2819,"mutability":"mutable","name":"table","nameLocation":"553:5:4","nodeType":"VariableDeclaration","scope":2841,"src":"539:19:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2818,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":2821,"initialValue":{"id":2820,"name":"ENCODING_TABLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2804,"src":"561:14:4","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"539:36:4"},{"assignments":[2823],"declarations":[{"constant":false,"id":2823,"mutability":"mutable","name":"result","nameLocation":"600:6:4","nodeType":"VariableDeclaration","scope":2841,"src":"586:20:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2822,"name":"string","nodeType":"ElementaryTypeName","src":"586:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":2837,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":2826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"620:1:4","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2827,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2806,"src":"626:4:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"631:6:4","memberName":"length","nodeType":"MemberAccess","src":"626:11:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":2829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"640:1:4","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"626:15:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2831,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"625:17:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":2832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"645:1:4","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"625:21:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2834,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"624:23:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"620:27:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"609:10:4","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"},"typeName":{"id":2824,"name":"string","nodeType":"ElementaryTypeName","src":"613:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"id":2836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"609:39:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"586:62:4"},{"AST":{"nodeType":"YulBlock","src":"710:1548:4","statements":[{"nodeType":"YulVariableDeclaration","src":"724:29:4","value":{"arguments":[{"name":"table","nodeType":"YulIdentifier","src":"744:5:4"},{"kind":"number","nodeType":"YulLiteral","src":"751:1:4","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"740:3:4"},"nodeType":"YulFunctionCall","src":"740:13:4"},"variables":[{"name":"tablePtr","nodeType":"YulTypedName","src":"728:8:4","type":""}]},{"nodeType":"YulVariableDeclaration","src":"766:32:4","value":{"arguments":[{"name":"result","nodeType":"YulIdentifier","src":"787:6:4"},{"kind":"number","nodeType":"YulLiteral","src":"795:2:4","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"783:3:4"},"nodeType":"YulFunctionCall","src":"783:15:4"},"variables":[{"name":"resultPtr","nodeType":"YulTypedName","src":"770:9:4","type":""}]},{"body":{"nodeType":"YulBlock","src":"958:794:4","statements":[{"nodeType":"YulAssignment","src":"976:26:4","value":{"arguments":[{"name":"dataPtr","nodeType":"YulIdentifier","src":"991:7:4"},{"kind":"number","nodeType":"YulLiteral","src":"1000:1:4","type":"","value":"3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"987:3:4"},"nodeType":"YulFunctionCall","src":"987:15:4"},"variableNames":[{"name":"dataPtr","nodeType":"YulIdentifier","src":"976:7:4"}]},{"nodeType":"YulVariableDeclaration","src":"1019:27:4","value":{"arguments":[{"name":"dataPtr","nodeType":"YulIdentifier","src":"1038:7:4"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1032:5:4"},"nodeType":"YulFunctionCall","src":"1032:14:4"},"variables":[{"name":"input","nodeType":"YulTypedName","src":"1023:5:4","type":""}]},{"expression":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1093:9:4"},{"arguments":[{"arguments":[{"name":"tablePtr","nodeType":"YulIdentifier","src":"1134:8:4"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1152:2:4","type":"","value":"18"},{"name":"input","nodeType":"YulIdentifier","src":"1156:5:4"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1148:3:4"},"nodeType":"YulFunctionCall","src":"1148:14:4"},{"kind":"number","nodeType":"YulLiteral","src":"1164:4:4","type":"","value":"0x3F"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1144:3:4"},"nodeType":"YulFunctionCall","src":"1144:25:4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1130:3:4"},"nodeType":"YulFunctionCall","src":"1130:40:4"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1124:5:4"},"nodeType":"YulFunctionCall","src":"1124:47:4"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"1064:7:4"},"nodeType":"YulFunctionCall","src":"1064:125:4"},"nodeType":"YulExpressionStatement","src":"1064:125:4"},{"nodeType":"YulAssignment","src":"1206:30:4","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1223:9:4"},{"kind":"number","nodeType":"YulLiteral","src":"1234:1:4","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1219:3:4"},"nodeType":"YulFunctionCall","src":"1219:17:4"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1206:9:4"}]},{"expression":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1283:9:4"},{"arguments":[{"arguments":[{"name":"tablePtr","nodeType":"YulIdentifier","src":"1324:8:4"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1342:2:4","type":"","value":"12"},{"name":"input","nodeType":"YulIdentifier","src":"1346:5:4"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1338:3:4"},"nodeType":"YulFunctionCall","src":"1338:14:4"},{"kind":"number","nodeType":"YulLiteral","src":"1354:4:4","type":"","value":"0x3F"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1334:3:4"},"nodeType":"YulFunctionCall","src":"1334:25:4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1320:3:4"},"nodeType":"YulFunctionCall","src":"1320:40:4"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1314:5:4"},"nodeType":"YulFunctionCall","src":"1314:47:4"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"1254:7:4"},"nodeType":"YulFunctionCall","src":"1254:125:4"},"nodeType":"YulExpressionStatement","src":"1254:125:4"},{"nodeType":"YulAssignment","src":"1396:30:4","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1413:9:4"},{"kind":"number","nodeType":"YulLiteral","src":"1424:1:4","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1409:3:4"},"nodeType":"YulFunctionCall","src":"1409:17:4"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1396:9:4"}]},{"expression":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1473:9:4"},{"arguments":[{"arguments":[{"name":"tablePtr","nodeType":"YulIdentifier","src":"1514:8:4"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1532:1:4","type":"","value":"6"},{"name":"input","nodeType":"YulIdentifier","src":"1535:5:4"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1528:3:4"},"nodeType":"YulFunctionCall","src":"1528:13:4"},{"kind":"number","nodeType":"YulLiteral","src":"1543:4:4","type":"","value":"0x3F"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1524:3:4"},"nodeType":"YulFunctionCall","src":"1524:24:4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1510:3:4"},"nodeType":"YulFunctionCall","src":"1510:39:4"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1504:5:4"},"nodeType":"YulFunctionCall","src":"1504:46:4"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"1444:7:4"},"nodeType":"YulFunctionCall","src":"1444:124:4"},"nodeType":"YulExpressionStatement","src":"1444:124:4"},{"nodeType":"YulAssignment","src":"1585:30:4","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1602:9:4"},{"kind":"number","nodeType":"YulLiteral","src":"1613:1:4","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1598:3:4"},"nodeType":"YulFunctionCall","src":"1598:17:4"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1585:9:4"}]},{"expression":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1641:9:4"},{"arguments":[{"arguments":[{"name":"tablePtr","nodeType":"YulIdentifier","src":"1662:8:4"},{"arguments":[{"name":"input","nodeType":"YulIdentifier","src":"1676:5:4"},{"kind":"number","nodeType":"YulLiteral","src":"1683:4:4","type":"","value":"0x3F"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1672:3:4"},"nodeType":"YulFunctionCall","src":"1672:16:4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1658:3:4"},"nodeType":"YulFunctionCall","src":"1658:31:4"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1652:5:4"},"nodeType":"YulFunctionCall","src":"1652:38:4"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"1633:7:4"},"nodeType":"YulFunctionCall","src":"1633:58:4"},"nodeType":"YulExpressionStatement","src":"1633:58:4"},{"nodeType":"YulAssignment","src":"1708:30:4","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1725:9:4"},{"kind":"number","nodeType":"YulLiteral","src":"1736:1:4","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1721:3:4"},"nodeType":"YulFunctionCall","src":"1721:17:4"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1708:9:4"}]}]},"condition":{"arguments":[{"name":"dataPtr","nodeType":"YulIdentifier","src":"924:7:4"},{"name":"endPtr","nodeType":"YulIdentifier","src":"933:6:4"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"921:2:4"},"nodeType":"YulFunctionCall","src":"921:19:4"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"941:16:4","statements":[]},"pre":{"nodeType":"YulBlock","src":"816:104:4","statements":[{"nodeType":"YulVariableDeclaration","src":"834:19:4","value":{"name":"data","nodeType":"YulIdentifier","src":"849:4:4"},"variables":[{"name":"dataPtr","nodeType":"YulTypedName","src":"838:7:4","type":""}]},{"nodeType":"YulVariableDeclaration","src":"870:36:4","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"888:4:4"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"900:4:4"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"894:5:4"},"nodeType":"YulFunctionCall","src":"894:11:4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"884:3:4"},"nodeType":"YulFunctionCall","src":"884:22:4"},"variables":[{"name":"endPtr","nodeType":"YulTypedName","src":"874:6:4","type":""}]}]},"src":"812:940:4"},{"cases":[{"body":{"nodeType":"YulBlock","src":"1863:114:4","statements":[{"nodeType":"YulAssignment","src":"1933:30:4","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1950:9:4"},{"kind":"number","nodeType":"YulLiteral","src":"1961:1:4","type":"","value":"2"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1946:3:4"},"nodeType":"YulFunctionCall","src":"1946:17:4"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1933:9:4"}]}]},"nodeType":"YulCase","src":"1856:121:4","value":{"kind":"number","nodeType":"YulLiteral","src":"1861:1:4","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"1997:119:4","statements":[{"nodeType":"YulAssignment","src":"2072:30:4","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"2089:9:4"},{"kind":"number","nodeType":"YulLiteral","src":"2100:1:4","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2085:3:4"},"nodeType":"YulFunctionCall","src":"2085:17:4"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"2072:9:4"}]}]},"nodeType":"YulCase","src":"1990:126:4","value":{"kind":"number","nodeType":"YulLiteral","src":"1995:1:4","type":"","value":"2"}}],"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1834:4:4"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1828:5:4"},"nodeType":"YulFunctionCall","src":"1828:11:4"},{"kind":"number","nodeType":"YulLiteral","src":"1841:1:4","type":"","value":"3"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"1824:3:4"},"nodeType":"YulFunctionCall","src":"1824:19:4"},"nodeType":"YulSwitch","src":"1817:299:4"},{"expression":{"arguments":[{"name":"result","nodeType":"YulIdentifier","src":"2208:6:4"},{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"2220:9:4"},{"arguments":[{"name":"result","nodeType":"YulIdentifier","src":"2235:6:4"},{"kind":"number","nodeType":"YulLiteral","src":"2243:2:4","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2231:3:4"},"nodeType":"YulFunctionCall","src":"2231:15:4"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2216:3:4"},"nodeType":"YulFunctionCall","src":"2216:31:4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2201:6:4"},"nodeType":"YulFunctionCall","src":"2201:47:4"},"nodeType":"YulExpressionStatement","src":"2201:47:4"}]},"evmVersion":"paris","externalReferences":[{"declaration":2806,"isOffset":false,"isSlot":false,"src":"1834:4:4","valueSize":1},{"declaration":2806,"isOffset":false,"isSlot":false,"src":"849:4:4","valueSize":1},{"declaration":2806,"isOffset":false,"isSlot":false,"src":"888:4:4","valueSize":1},{"declaration":2806,"isOffset":false,"isSlot":false,"src":"900:4:4","valueSize":1},{"declaration":2823,"isOffset":false,"isSlot":false,"src":"2208:6:4","valueSize":1},{"declaration":2823,"isOffset":false,"isSlot":false,"src":"2235:6:4","valueSize":1},{"declaration":2823,"isOffset":false,"isSlot":false,"src":"787:6:4","valueSize":1},{"declaration":2819,"isOffset":false,"isSlot":false,"src":"744:5:4","valueSize":1}],"id":2838,"nodeType":"InlineAssembly","src":"701:1557:4"},{"expression":{"id":2839,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2823,"src":"2275:6:4","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":2810,"id":2840,"nodeType":"Return","src":"2268:13:4"}]},"id":2842,"implemented":true,"kind":"function","modifiers":[],"name":"encode","nameLocation":"385:6:4","nodeType":"FunctionDefinition","parameters":{"id":2807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2806,"mutability":"mutable","name":"data","nameLocation":"405:4:4","nodeType":"VariableDeclaration","scope":2842,"src":"392:17:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2805,"name":"bytes","nodeType":"ElementaryTypeName","src":"392:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"391:19:4"},"returnParameters":{"id":2810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2809,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2842,"src":"434:13:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2808,"name":"string","nodeType":"ElementaryTypeName","src":"434:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"433:15:4"},"scope":2843,"src":"376:1914:4","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2844,"src":"176:2116:4","usedErrors":[],"usedEvents":[]}],"src":"39:2254:4"},"id":4},"contracts/P256Signer.sol":{"ast":{"absolutePath":"contracts/P256Signer.sol","exportedSymbols":{"FCL_WebAuthn":[291],"P256Signer":[3003]},"id":3004,"nodeType":"SourceUnit","nodes":[{"id":2845,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"0:23:5"},{"absolutePath":"FreshCryptoLib/FCL_Webauthn.sol","file":"FreshCryptoLib/FCL_Webauthn.sol","id":2847,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3004,"sourceUnit":292,"src":"25:61:5","symbolAliases":[{"foreign":{"id":2846,"name":"FCL_WebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"33:12:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"P256Signer","contractDependencies":[],"contractKind":"contract","documentation":{"id":2848,"nodeType":"StructuredDocumentation","src":"88:242:5","text":"@title P256Signer\n @notice A contract used to verify ECDSA signatures over secp256r1 through\n EIP-1271 of Webauthn payloads.\n @dev This contract is the implementation. It is meant to be used through\n proxy clone."},"fullyImplemented":true,"id":3003,"linearizedBaseContracts":[3003],"name":"P256Signer","nameLocation":"339:10:5","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":2849,"nodeType":"StructuredDocumentation","src":"356:36:5","text":"@notice The EIP-1271 magic value"},"id":2852,"mutability":"constant","name":"EIP1271_MAGICVALUE","nameLocation":"422:18:5","nodeType":"VariableDeclaration","scope":3003,"src":"397:56:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2850,"name":"bytes4","nodeType":"ElementaryTypeName","src":"397:6:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"hexValue":"30783136323662613765","id":2851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"443:10:5","typeDescriptions":{"typeIdentifier":"t_rational_371636862_by_1","typeString":"int_const 371636862"},"value":"0x1626ba7e"},"visibility":"internal"},{"constant":true,"documentation":{"id":2853,"nodeType":"StructuredDocumentation","src":"460:40:5","text":"@notice The old EIP-1271 magic value"},"id":2856,"mutability":"constant","name":"OLD_EIP1271_MAGICVALUE","nameLocation":"530:22:5","nodeType":"VariableDeclaration","scope":3003,"src":"505:60:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2854,"name":"bytes4","nodeType":"ElementaryTypeName","src":"505:6:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"hexValue":"30783230633133623062","id":2855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"555:10:5","typeDescriptions":{"typeIdentifier":"t_rational_549534475_by_1","typeString":"int_const 549534475"},"value":"0x20c13b0b"},"visibility":"internal"},{"constant":false,"documentation":{"id":2857,"nodeType":"StructuredDocumentation","src":"572:53:5","text":"@notice Whether the contract has been initialized"},"functionSelector":"158ef93e","id":2859,"mutability":"mutable","name":"initialized","nameLocation":"642:11:5","nodeType":"VariableDeclaration","scope":3003,"src":"630:23:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2858,"name":"bool","nodeType":"ElementaryTypeName","src":"630:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"documentation":{"id":2860,"nodeType":"StructuredDocumentation","src":"660:56:5","text":"@notice The x coordinate of the secp256r1 public key"},"functionSelector":"0c55699c","id":2862,"mutability":"mutable","name":"x","nameLocation":"736:1:5","nodeType":"VariableDeclaration","scope":3003,"src":"721:16:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2861,"name":"uint256","nodeType":"ElementaryTypeName","src":"721:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":2863,"nodeType":"StructuredDocumentation","src":"744:56:5","text":"@notice The y coordinate of the secp256r1 public key"},"functionSelector":"a56dfe4a","id":2865,"mutability":"mutable","name":"y","nameLocation":"820:1:5","nodeType":"VariableDeclaration","scope":3003,"src":"805:16:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2864,"name":"uint256","nodeType":"ElementaryTypeName","src":"805:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"documentation":{"id":2866,"nodeType":"StructuredDocumentation","src":"828:55:5","text":"@notice Error message when the signature is invalid"},"errorSelector":"8baa579f","id":2868,"name":"InvalidSignature","nameLocation":"894:16:5","nodeType":"ErrorDefinition","parameters":{"id":2867,"nodeType":"ParameterList","parameters":[],"src":"910:2:5"},"src":"888:25:5"},{"documentation":{"id":2869,"nodeType":"StructuredDocumentation","src":"919:50:5","text":"@notice Error message when the hash is invalid"},"errorSelector":"0af806e0","id":2871,"name":"InvalidHash","nameLocation":"980:11:5","nodeType":"ErrorDefinition","parameters":{"id":2870,"nodeType":"ParameterList","parameters":[],"src":"991:2:5"},"src":"974:20:5"},{"documentation":{"id":2872,"nodeType":"StructuredDocumentation","src":"1000:66:5","text":"@notice Error message when the contract is already initialized"},"errorSelector":"0dc149f0","id":2874,"name":"AlreadyInitialized","nameLocation":"1077:18:5","nodeType":"ErrorDefinition","parameters":{"id":2873,"nodeType":"ParameterList","parameters":[],"src":"1095:2:5"},"src":"1071:27:5"},{"body":{"id":2881,"nodeType":"Block","src":"1118:35:5","statements":[{"expression":{"id":2879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2877,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"1128:11:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2878,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1142:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1128:18:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2880,"nodeType":"ExpressionStatement","src":"1128:18:5"}]},"id":2882,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2875,"nodeType":"ParameterList","parameters":[],"src":"1115:2:5"},"returnParameters":{"id":2876,"nodeType":"ParameterList","parameters":[],"src":"1118:0:5"},"scope":3003,"src":"1104:49:5","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2902,"nodeType":"Block","src":"1469:92:5","statements":[{"expression":{"arguments":[{"arguments":[{"id":2895,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2885,"src":"1500:5:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":2893,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1489:3:5","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2894,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1493:6:5","memberName":"encode","nodeType":"MemberAccess","src":"1489:10:5","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1489:17:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2897,"name":"_signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2887,"src":"1508:10:5","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":2892,"name":"_validate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"1479:9:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function (bytes memory,bytes calldata) view"}},"id":2898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1479:40:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2899,"nodeType":"ExpressionStatement","src":"1479:40:5"},{"expression":{"id":2900,"name":"EIP1271_MAGICVALUE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2852,"src":"1536:18:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":2891,"id":2901,"nodeType":"Return","src":"1529:25:5"}]},"documentation":{"id":2883,"nodeType":"StructuredDocumentation","src":"1159:208:5","text":"@notice Verifies that the signer is the owner of the secp256r1 public key.\n @param _hash The hash of the data signed\n @param _signature The signature\n @return The EIP-1271 magic value"},"functionSelector":"1626ba7e","id":2903,"implemented":true,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"1381:16:5","nodeType":"FunctionDefinition","parameters":{"id":2888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2885,"mutability":"mutable","name":"_hash","nameLocation":"1406:5:5","nodeType":"VariableDeclaration","scope":2903,"src":"1398:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2884,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1398:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2887,"mutability":"mutable","name":"_signature","nameLocation":"1428:10:5","nodeType":"VariableDeclaration","scope":2903,"src":"1413:25:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2886,"name":"bytes","nodeType":"ElementaryTypeName","src":"1413:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1397:42:5"},"returnParameters":{"id":2891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2890,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2903,"src":"1461:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2889,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1461:6:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1460:8:5"},"scope":3003,"src":"1372:189:5","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2920,"nodeType":"Block","src":"1998:84:5","statements":[{"expression":{"arguments":[{"id":2914,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2906,"src":"2018:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2915,"name":"_signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"2025:10:5","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":2913,"name":"_validate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"2008:9:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function (bytes memory,bytes calldata) view"}},"id":2916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2008:28:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2917,"nodeType":"ExpressionStatement","src":"2008:28:5"},{"expression":{"id":2918,"name":"OLD_EIP1271_MAGICVALUE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2856,"src":"2053:22:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":2912,"id":2919,"nodeType":"Return","src":"2046:29:5"}]},"documentation":{"id":2904,"nodeType":"StructuredDocumentation","src":"1567:324:5","text":"@notice Verifies that the signer is the owner of the secp256r1 public key.\n @dev This is the old version of the function of EIP-1271 using bytes\n memory instead of bytes32\n @param _hash The hash of the data signed\n @param _signature The signature\n @return The EIP-1271 magic value"},"functionSelector":"20c13b0b","id":2921,"implemented":true,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"1905:16:5","nodeType":"FunctionDefinition","parameters":{"id":2909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2906,"mutability":"mutable","name":"_hash","nameLocation":"1935:5:5","nodeType":"VariableDeclaration","scope":2921,"src":"1922:18:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2905,"name":"bytes","nodeType":"ElementaryTypeName","src":"1922:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2908,"mutability":"mutable","name":"_signature","nameLocation":"1957:10:5","nodeType":"VariableDeclaration","scope":2921,"src":"1942:25:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2907,"name":"bytes","nodeType":"ElementaryTypeName","src":"1942:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1921:47:5"},"returnParameters":{"id":2912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2911,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2921,"src":"1990:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2910,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1990:6:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1989:8:5"},"scope":3003,"src":"1896:186:5","stateMutability":"view","virtual":false,"visibility":"public"},{"canonicalName":"P256Signer.SignatureLayout","id":2932,"members":[{"constant":false,"id":2923,"mutability":"mutable","name":"authenticatorData","nameLocation":"2127:17:5","nodeType":"VariableDeclaration","scope":2932,"src":"2121:23:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2922,"name":"bytes","nodeType":"ElementaryTypeName","src":"2121:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2925,"mutability":"mutable","name":"clientData","nameLocation":"2160:10:5","nodeType":"VariableDeclaration","scope":2932,"src":"2154:16:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2924,"name":"bytes","nodeType":"ElementaryTypeName","src":"2154:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2927,"mutability":"mutable","name":"challengeOffset","nameLocation":"2188:15:5","nodeType":"VariableDeclaration","scope":2932,"src":"2180:23:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2926,"name":"uint256","nodeType":"ElementaryTypeName","src":"2180:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2931,"mutability":"mutable","name":"rs","nameLocation":"2224:2:5","nodeType":"VariableDeclaration","scope":2932,"src":"2213:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":2928,"name":"uint256","nodeType":"ElementaryTypeName","src":"2213:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2930,"length":{"hexValue":"32","id":2929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2221:1:5","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"2213:10:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"name":"SignatureLayout","nameLocation":"2095:15:5","nodeType":"StructDefinition","scope":3003,"src":"2088:145:5","visibility":"public"},{"body":{"id":2975,"nodeType":"Block","src":"2433:826:5","statements":[{"assignments":[2941],"declarations":[{"constant":false,"id":2941,"mutability":"mutable","name":"_hash","nameLocation":"2451:5:5","nodeType":"VariableDeclaration","scope":2975,"src":"2443:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2940,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2443:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2945,"initialValue":{"arguments":[{"id":2943,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2935,"src":"2469:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2942,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2459:9:5","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2459:15:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2443:31:5"},{"assignments":[2948],"declarations":[{"constant":false,"id":2948,"mutability":"mutable","name":"signaturePointer","nameLocation":"2509:16:5","nodeType":"VariableDeclaration","scope":2975,"src":"2484:41:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureLayout_$2932_calldata_ptr","typeString":"struct P256Signer.SignatureLayout"},"typeName":{"id":2947,"nodeType":"UserDefinedTypeName","pathNode":{"id":2946,"name":"SignatureLayout","nameLocations":["2484:15:5"],"nodeType":"IdentifierPath","referencedDeclaration":2932,"src":"2484:15:5"},"referencedDeclaration":2932,"src":"2484:15:5","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureLayout_$2932_storage_ptr","typeString":"struct P256Signer.SignatureLayout"}},"visibility":"internal"}],"id":2949,"nodeType":"VariableDeclarationStatement","src":"2484:41:5"},{"AST":{"nodeType":"YulBlock","src":"2848:61:5","statements":[{"nodeType":"YulAssignment","src":"2862:37:5","value":{"name":"_signature.offset","nodeType":"YulIdentifier","src":"2882:17:5"},"variableNames":[{"name":"signaturePointer","nodeType":"YulIdentifier","src":"2862:16:5"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2937,"isOffset":true,"isSlot":false,"src":"2882:17:5","suffix":"offset","valueSize":1},{"declaration":2948,"isOffset":false,"isSlot":false,"src":"2862:16:5","valueSize":1}],"id":2950,"nodeType":"InlineAssembly","src":"2839:70:5"},{"assignments":[2952],"declarations":[{"constant":false,"id":2952,"mutability":"mutable","name":"valid","nameLocation":"2924:5:5","nodeType":"VariableDeclaration","scope":2975,"src":"2919:10:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2951,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":2968,"initialValue":{"arguments":[{"expression":{"id":2955,"name":"signaturePointer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"2973:16:5","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureLayout_$2932_calldata_ptr","typeString":"struct P256Signer.SignatureLayout calldata"}},"id":2956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2990:17:5","memberName":"authenticatorData","nodeType":"MemberAccess","referencedDeclaration":2923,"src":"2973:34:5","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"30783031","id":2957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3021:4:5","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"},{"expression":{"id":2958,"name":"signaturePointer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"3039:16:5","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureLayout_$2932_calldata_ptr","typeString":"struct P256Signer.SignatureLayout calldata"}},"id":2959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3056:10:5","memberName":"clientData","nodeType":"MemberAccess","referencedDeclaration":2925,"src":"3039:27:5","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":2960,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2941,"src":"3080:5:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2961,"name":"signaturePointer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"3099:16:5","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureLayout_$2932_calldata_ptr","typeString":"struct P256Signer.SignatureLayout calldata"}},"id":2962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3116:15:5","memberName":"challengeOffset","nodeType":"MemberAccess","referencedDeclaration":2927,"src":"3099:32:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":2963,"name":"signaturePointer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"3145:16:5","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureLayout_$2932_calldata_ptr","typeString":"struct P256Signer.SignatureLayout calldata"}},"id":2964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3162:2:5","memberName":"rs","nodeType":"MemberAccess","referencedDeclaration":2931,"src":"3145:19:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},{"id":2965,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"3178:1:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2966,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"3193:1:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2953,"name":"FCL_WebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"2932:12:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_WebAuthn_$291_$","typeString":"type(library FCL_WebAuthn)"}},"id":2954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2945:14:5","memberName":"checkSignature","nodeType":"MemberAccess","referencedDeclaration":200,"src":"2932:27:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_calldata_ptr_$_t_bytes1_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$_t_array$_t_uint256_$2_calldata_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata,uint256,uint256) view returns (bool)"}},"id":2967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2932:272:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"2919:285:5"},{"condition":{"id":2970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3219:6:5","subExpression":{"id":2969,"name":"valid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2952,"src":"3220:5:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2974,"nodeType":"IfStatement","src":"3215:37:5","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2971,"name":"InvalidSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"3234:16:5","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":2972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3234:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2973,"nodeType":"RevertStatement","src":"3227:25:5"}}]},"documentation":{"id":2933,"nodeType":"StructuredDocumentation","src":"2239:111:5","text":"@notice Validates the signature\n @param data The data signed\n @param _signature The signature"},"id":2976,"implemented":true,"kind":"function","modifiers":[],"name":"_validate","nameLocation":"2364:9:5","nodeType":"FunctionDefinition","parameters":{"id":2938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2935,"mutability":"mutable","name":"data","nameLocation":"2387:4:5","nodeType":"VariableDeclaration","scope":2976,"src":"2374:17:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2934,"name":"bytes","nodeType":"ElementaryTypeName","src":"2374:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2937,"mutability":"mutable","name":"_signature","nameLocation":"2408:10:5","nodeType":"VariableDeclaration","scope":2976,"src":"2393:25:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2936,"name":"bytes","nodeType":"ElementaryTypeName","src":"2393:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2373:46:5"},"returnParameters":{"id":2939,"nodeType":"ParameterList","parameters":[],"src":"2433:0:5"},"scope":3003,"src":"2355:904:5","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":3001,"nodeType":"Block","src":"3578:121:5","statements":[{"condition":{"id":2984,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"3592:11:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2988,"nodeType":"IfStatement","src":"3588:44:5","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2985,"name":"AlreadyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"3612:18:5","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":2986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3612:20:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2987,"nodeType":"RevertStatement","src":"3605:27:5"}},{"expression":{"id":2991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2989,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"3642:11:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3656:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3642:18:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2992,"nodeType":"ExpressionStatement","src":"3642:18:5"},{"expression":{"id":2995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2993,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"3670:1:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2994,"name":"x_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2979,"src":"3674:2:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3670:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2996,"nodeType":"ExpressionStatement","src":"3670:6:5"},{"expression":{"id":2999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2997,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"3686:1:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2998,"name":"y_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2981,"src":"3690:2:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3686:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3000,"nodeType":"ExpressionStatement","src":"3686:6:5"}]},"documentation":{"id":2977,"nodeType":"StructuredDocumentation","src":"3265:255:5","text":"@dev This function is only callable once and needs to be called immediately\n after deployment by the factory in the same transaction.\n @param x_ The x coordinate of the public key\n @param y_ The y coordinate of the public key"},"functionSelector":"e4a30116","id":3002,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"3534:10:5","nodeType":"FunctionDefinition","parameters":{"id":2982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2979,"mutability":"mutable","name":"x_","nameLocation":"3553:2:5","nodeType":"VariableDeclaration","scope":3002,"src":"3545:10:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2978,"name":"uint256","nodeType":"ElementaryTypeName","src":"3545:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2981,"mutability":"mutable","name":"y_","nameLocation":"3565:2:5","nodeType":"VariableDeclaration","scope":3002,"src":"3557:10:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2980,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3544:24:5"},"returnParameters":{"id":2983,"nodeType":"ParameterList","parameters":[],"src":"3578:0:5"},"scope":3003,"src":"3525:174:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3004,"src":"330:3371:5","usedErrors":[11,13,2868,2871,2874],"usedEvents":[]}],"src":"0:3702:5"},"id":5},"contracts/P256SignerFactory.sol":{"ast":{"absolutePath":"contracts/P256SignerFactory.sol","exportedSymbols":{"LibClone":[3295],"P256Signer":[3003],"P256SignerFactory":[3077]},"id":3078,"nodeType":"SourceUnit","nodes":[{"id":3005,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"0:23:6"},{"absolutePath":"contracts/P256Signer.sol","file":"./P256Signer.sol","id":3007,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3078,"sourceUnit":3004,"src":"25:44:6","symbolAliases":[{"foreign":{"id":3006,"name":"P256Signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3003,"src":"33:10:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"solady/src/utils/LibClone.sol","file":"solady/src/utils/LibClone.sol","id":3008,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3078,"sourceUnit":3296,"src":"70:39:6","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"P256SignerFactory","contractDependencies":[],"contractKind":"contract","documentation":{"id":3009,"nodeType":"StructuredDocumentation","src":"111:94:6","text":"@title P256SignerFactory\n @notice Factory contract for creating proxies for P256Signer"},"fullyImplemented":true,"id":3077,"linearizedBaseContracts":[3077],"name":"P256SignerFactory","nameLocation":"214:17:6","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":3010,"nodeType":"StructuredDocumentation","src":"238:65:6","text":"@notice The implementation address of the P256Signer contract"},"functionSelector":"5c60da1b","id":3012,"mutability":"immutable","name":"implementation","nameLocation":"333:14:6","nodeType":"VariableDeclaration","scope":3077,"src":"308:39:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3011,"name":"address","nodeType":"ElementaryTypeName","src":"308:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":3021,"nodeType":"Block","src":"391:49:6","statements":[{"expression":{"id":3019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3017,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"401:14:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3018,"name":"implementation_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3014,"src":"418:15:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"401:32:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3020,"nodeType":"ExpressionStatement","src":"401:32:6"}]},"id":3022,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3014,"mutability":"mutable","name":"implementation_","nameLocation":"374:15:6","nodeType":"VariableDeclaration","scope":3022,"src":"366:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3013,"name":"address","nodeType":"ElementaryTypeName","src":"366:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"365:25:6"},"returnParameters":{"id":3016,"nodeType":"ParameterList","parameters":[],"src":"391:0:6"},"scope":3077,"src":"354:86:6","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"anonymous":false,"documentation":{"id":3023,"nodeType":"StructuredDocumentation","src":"446:67:6","text":"@notice Emitted when a new P256Signer proxy contract is created"},"eventSelector":"33b61205835e3063eb8935cac4b29d7fc333ad80d6cb11893ba4758adf8cdde1","id":3031,"name":"NewSignerCreated","nameLocation":"524:16:6","nodeType":"EventDefinition","parameters":{"id":3030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3025,"indexed":true,"mutability":"mutable","name":"x","nameLocation":"557:1:6","nodeType":"VariableDeclaration","scope":3031,"src":"541:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3024,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3027,"indexed":true,"mutability":"mutable","name":"y","nameLocation":"576:1:6","nodeType":"VariableDeclaration","scope":3031,"src":"560:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3026,"name":"uint256","nodeType":"ElementaryTypeName","src":"560:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3029,"indexed":false,"mutability":"mutable","name":"signer","nameLocation":"587:6:6","nodeType":"VariableDeclaration","scope":3031,"src":"579:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3028,"name":"address","nodeType":"ElementaryTypeName","src":"579:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"540:54:6"},"src":"518:77:6"},{"body":{"id":3075,"nodeType":"Block","src":"826:254:6","statements":[{"assignments":[3042],"declarations":[{"constant":false,"id":3042,"mutability":"mutable","name":"salt","nameLocation":"844:4:6","nodeType":"VariableDeclaration","scope":3075,"src":"836:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3041,"name":"bytes32","nodeType":"ElementaryTypeName","src":"836:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3050,"initialValue":{"arguments":[{"arguments":[{"id":3046,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"878:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3047,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"881:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3044,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"861:3:6","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"865:12:6","memberName":"encodePacked","nodeType":"MemberAccess","src":"861:16:6","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":3048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"861:22:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3043,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"851:9:6","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"851:33:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"836:48:6"},{"assignments":[3052],"declarations":[{"constant":false,"id":3052,"mutability":"mutable","name":"signer","nameLocation":"902:6:6","nodeType":"VariableDeclaration","scope":3075,"src":"894:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3051,"name":"address","nodeType":"ElementaryTypeName","src":"894:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3058,"initialValue":{"arguments":[{"id":3055,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"939:14:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3056,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3042,"src":"955:4:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":3053,"name":"LibClone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3295,"src":"911:8:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibClone_$3295_$","typeString":"type(library LibClone)"}},"id":3054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"920:18:6","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":3108,"src":"911:27:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":3057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"911:49:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"894:66:6"},{"expression":{"arguments":[{"id":3063,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"1000:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3064,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"1003:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3060,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"981:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3059,"name":"P256Signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3003,"src":"970:10:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_P256Signer_$3003_$","typeString":"type(contract P256Signer)"}},"id":3061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"970:18:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_P256Signer_$3003","typeString":"contract P256Signer"}},"id":3062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"989:10:6","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":3002,"src":"970:29:6","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) external"}},"id":3065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"970:35:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3066,"nodeType":"ExpressionStatement","src":"970:35:6"},{"eventCall":{"arguments":[{"id":3068,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"1037:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3069,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"1040:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3070,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"1043:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3067,"name":"NewSignerCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3031,"src":"1020:16:6","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,uint256,address)"}},"id":3071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1020:30:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3072,"nodeType":"EmitStatement","src":"1015:35:6"},{"expression":{"id":3073,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"1067:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3040,"id":3074,"nodeType":"Return","src":"1060:13:6"}]},"documentation":{"id":3032,"nodeType":"StructuredDocumentation","src":"601:155:6","text":"@notice Creates a new P256Signer proxy contract\n @param x The x coordinate of the public key\n @param y The y coordinate of the public key"},"functionSelector":"9f7b4579","id":3076,"implemented":true,"kind":"function","modifiers":[],"name":"create","nameLocation":"770:6:6","nodeType":"FunctionDefinition","parameters":{"id":3037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3034,"mutability":"mutable","name":"x","nameLocation":"785:1:6","nodeType":"VariableDeclaration","scope":3076,"src":"777:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3033,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3036,"mutability":"mutable","name":"y","nameLocation":"796:1:6","nodeType":"VariableDeclaration","scope":3076,"src":"788:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3035,"name":"uint256","nodeType":"ElementaryTypeName","src":"788:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"776:22:6"},"returnParameters":{"id":3040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3039,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3076,"src":"817:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3038,"name":"address","nodeType":"ElementaryTypeName","src":"817:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"816:9:6"},"scope":3077,"src":"761:319:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3078,"src":"205:877:6","usedErrors":[],"usedEvents":[3031]}],"src":"0:1083:6"},"id":6},"solady/src/utils/LibClone.sol":{"ast":{"absolutePath":"solady/src/utils/LibClone.sol","exportedSymbols":{"LibClone":[3295]},"id":3296,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3079,"literals":["solidity","^","0.8",".4"],"nodeType":"PragmaDirective","src":"32:23:7"},{"abstract":false,"baseContracts":[],"canonicalName":"LibClone","contractDependencies":[],"contractKind":"library","documentation":{"id":3080,"nodeType":"StructuredDocumentation","src":"57:1443:7","text":"@notice Minimal proxy library.\n @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)\n @author Minimal proxy by 0age (https://github.com/0age)\n @author Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie\n (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)\n @dev Minimal proxy:\n Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime,\n it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern,\n which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.\n @dev Minimal proxy (PUSH0 variant):\n This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai.\n It is optimized first for minimal runtime gas, then for minimal bytecode.\n The PUSH0 clone functions are intentionally postfixed with a jarring \"_PUSH0\" as\n many EVM chains may not support the PUSH0 opcode in the early months after Shanghai.\n Please use with caution.\n @dev Clones with immutable args (CWIA):\n The implementation of CWIA here implements a `receive()` method that emits the\n `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata,\n enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards\n composability. The minimal proxy implementation does not offer this feature."},"fullyImplemented":true,"id":3295,"linearizedBaseContracts":[3295],"name":"LibClone","nameLocation":"1508:8:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3081,"nodeType":"StructuredDocumentation","src":"1806:36:7","text":"@dev Unable to deploy the clone."},"errorSelector":"30116425","id":3083,"name":"DeploymentFailed","nameLocation":"1853:16:7","nodeType":"ErrorDefinition","parameters":{"id":3082,"nodeType":"ParameterList","parameters":[],"src":"1869:2:7"},"src":"1847:25:7"},{"documentation":{"id":3084,"nodeType":"StructuredDocumentation","src":"1878:72:7","text":"@dev The salt must start with either the zero address or the caller."},"errorSelector":"2f634836","id":3086,"name":"SaltDoesNotStartWithCaller","nameLocation":"1961:26:7","nodeType":"ErrorDefinition","parameters":{"id":3085,"nodeType":"ParameterList","parameters":[],"src":"1987:2:7"},"src":"1955:35:7"},{"body":{"id":3095,"nodeType":"Block","src":"2404:5640:7","statements":[{"AST":{"nodeType":"YulBlock","src":"2466:5572:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7434:4:7","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"7440:28:7","type":"","value":"0x5af43d3d93803e602a57fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7427:6:7"},"nodeType":"YulFunctionCall","src":"7427:42:7"},"nodeType":"YulExpressionStatement","src":"7427:42:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7489:4:7","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"7495:14:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7482:6:7"},"nodeType":"YulFunctionCall","src":"7482:28:7"},"nodeType":"YulExpressionStatement","src":"7482:28:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7530:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"7536:42:7","type":"","value":"0x602c3d8160093d39f33d3d3d3d363d3d37363d73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7523:6:7"},"nodeType":"YulFunctionCall","src":"7523:56:7"},"nodeType":"YulExpressionStatement","src":"7523:56:7"},{"nodeType":"YulAssignment","src":"7592:33:7","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7611:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7614:4:7","type":"","value":"0x0c"},{"kind":"number","nodeType":"YulLiteral","src":"7620:4:7","type":"","value":"0x35"}],"functionName":{"name":"create","nodeType":"YulIdentifier","src":"7604:6:7"},"nodeType":"YulFunctionCall","src":"7604:21:7"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"7592:8:7"}]},{"body":{"nodeType":"YulBlock","src":"7704:210:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7801:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"7807:10:7","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7794:6:7"},"nodeType":"YulFunctionCall","src":"7794:24:7"},"nodeType":"YulExpressionStatement","src":"7794:24:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7889:4:7","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"7895:4:7","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7882:6:7"},"nodeType":"YulFunctionCall","src":"7882:18:7"},"nodeType":"YulExpressionStatement","src":"7882:18:7"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"7694:8:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7687:6:7"},"nodeType":"YulFunctionCall","src":"7687:16:7"},"nodeType":"YulIf","src":"7684:230:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8020:4:7","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"8026:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8013:6:7"},"nodeType":"YulFunctionCall","src":"8013:15:7"},"nodeType":"YulExpressionStatement","src":"8013:15:7"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":3089,"isOffset":false,"isSlot":false,"src":"7495:14:7","valueSize":1},{"declaration":3092,"isOffset":false,"isSlot":false,"src":"7592:8:7","valueSize":1},{"declaration":3092,"isOffset":false,"isSlot":false,"src":"7694:8:7","valueSize":1}],"id":3094,"nodeType":"InlineAssembly","src":"2457:5581:7"}]},"documentation":{"id":3087,"nodeType":"StructuredDocumentation","src":"2279:45:7","text":"@dev Deploys a clone of `implementation`."},"id":3096,"implemented":true,"kind":"function","modifiers":[],"name":"clone","nameLocation":"2338:5:7","nodeType":"FunctionDefinition","parameters":{"id":3090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3089,"mutability":"mutable","name":"implementation","nameLocation":"2352:14:7","nodeType":"VariableDeclaration","scope":3096,"src":"2344:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3088,"name":"address","nodeType":"ElementaryTypeName","src":"2344:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2343:24:7"},"returnParameters":{"id":3093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3092,"mutability":"mutable","name":"instance","nameLocation":"2394:8:7","nodeType":"VariableDeclaration","scope":3096,"src":"2386:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3091,"name":"address","nodeType":"ElementaryTypeName","src":"2386:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2385:18:7"},"scope":3295,"src":"2329:5715:7","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3107,"nodeType":"Block","src":"8248:700:7","statements":[{"AST":{"nodeType":"YulBlock","src":"8310:632:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8331:4:7","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"8337:28:7","type":"","value":"0x5af43d3d93803e602a57fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8324:6:7"},"nodeType":"YulFunctionCall","src":"8324:42:7"},"nodeType":"YulExpressionStatement","src":"8324:42:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8386:4:7","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"8392:14:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8379:6:7"},"nodeType":"YulFunctionCall","src":"8379:28:7"},"nodeType":"YulExpressionStatement","src":"8379:28:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8427:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"8433:42:7","type":"","value":"0x602c3d8160093d39f33d3d3d3d363d3d37363d73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8420:6:7"},"nodeType":"YulFunctionCall","src":"8420:56:7"},"nodeType":"YulExpressionStatement","src":"8420:56:7"},{"nodeType":"YulAssignment","src":"8489:40:7","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8509:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8512:4:7","type":"","value":"0x0c"},{"kind":"number","nodeType":"YulLiteral","src":"8518:4:7","type":"","value":"0x35"},{"name":"salt","nodeType":"YulIdentifier","src":"8524:4:7"}],"functionName":{"name":"create2","nodeType":"YulIdentifier","src":"8501:7:7"},"nodeType":"YulFunctionCall","src":"8501:28:7"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"8489:8:7"}]},{"body":{"nodeType":"YulBlock","src":"8608:210:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8705:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"8711:10:7","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8698:6:7"},"nodeType":"YulFunctionCall","src":"8698:24:7"},"nodeType":"YulExpressionStatement","src":"8698:24:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8793:4:7","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"8799:4:7","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8786:6:7"},"nodeType":"YulFunctionCall","src":"8786:18:7"},"nodeType":"YulExpressionStatement","src":"8786:18:7"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"8598:8:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8591:6:7"},"nodeType":"YulFunctionCall","src":"8591:16:7"},"nodeType":"YulIf","src":"8588:230:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8924:4:7","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"8930:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8917:6:7"},"nodeType":"YulFunctionCall","src":"8917:15:7"},"nodeType":"YulExpressionStatement","src":"8917:15:7"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":3099,"isOffset":false,"isSlot":false,"src":"8392:14:7","valueSize":1},{"declaration":3104,"isOffset":false,"isSlot":false,"src":"8489:8:7","valueSize":1},{"declaration":3104,"isOffset":false,"isSlot":false,"src":"8598:8:7","valueSize":1},{"declaration":3101,"isOffset":false,"isSlot":false,"src":"8524:4:7","valueSize":1}],"id":3106,"nodeType":"InlineAssembly","src":"8301:641:7"}]},"documentation":{"id":3097,"nodeType":"StructuredDocumentation","src":"8050:71:7","text":"@dev Deploys a deterministic clone of `implementation` with `salt`."},"id":3108,"implemented":true,"kind":"function","modifiers":[],"name":"cloneDeterministic","nameLocation":"8135:18:7","nodeType":"FunctionDefinition","parameters":{"id":3102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3099,"mutability":"mutable","name":"implementation","nameLocation":"8162:14:7","nodeType":"VariableDeclaration","scope":3108,"src":"8154:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3098,"name":"address","nodeType":"ElementaryTypeName","src":"8154:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3101,"mutability":"mutable","name":"salt","nameLocation":"8186:4:7","nodeType":"VariableDeclaration","scope":3108,"src":"8178:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3100,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8178:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8153:38:7"},"returnParameters":{"id":3105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3104,"mutability":"mutable","name":"instance","nameLocation":"8234:8:7","nodeType":"VariableDeclaration","scope":3108,"src":"8226:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3103,"name":"address","nodeType":"ElementaryTypeName","src":"8226:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8225:18:7"},"scope":3295,"src":"8126:822:7","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3117,"nodeType":"Block","src":"9182:400:7","statements":[{"AST":{"nodeType":"YulBlock","src":"9244:332:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9265:4:7","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"9271:28:7","type":"","value":"0x5af43d3d93803e602a57fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9258:6:7"},"nodeType":"YulFunctionCall","src":"9258:42:7"},"nodeType":"YulExpressionStatement","src":"9258:42:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9320:4:7","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"9326:14:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9313:6:7"},"nodeType":"YulFunctionCall","src":"9313:28:7"},"nodeType":"YulExpressionStatement","src":"9313:28:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9361:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"9367:42:7","type":"","value":"0x602c3d8160093d39f33d3d3d3d363d3d37363d73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9354:6:7"},"nodeType":"YulFunctionCall","src":"9354:56:7"},"nodeType":"YulExpressionStatement","src":"9354:56:7"},{"nodeType":"YulAssignment","src":"9423:29:7","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9441:4:7","type":"","value":"0x0c"},{"kind":"number","nodeType":"YulLiteral","src":"9447:4:7","type":"","value":"0x35"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"9431:9:7"},"nodeType":"YulFunctionCall","src":"9431:21:7"},"variableNames":[{"name":"hash","nodeType":"YulIdentifier","src":"9423:4:7"}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9558:4:7","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"9564:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9551:6:7"},"nodeType":"YulFunctionCall","src":"9551:15:7"},"nodeType":"YulExpressionStatement","src":"9551:15:7"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":3114,"isOffset":false,"isSlot":false,"src":"9423:4:7","valueSize":1},{"declaration":3111,"isOffset":false,"isSlot":false,"src":"9326:14:7","valueSize":1}],"id":3116,"nodeType":"InlineAssembly","src":"9235:341:7"}]},"documentation":{"id":3109,"nodeType":"StructuredDocumentation","src":"8954:140:7","text":"@dev Returns the initialization code hash of the clone of `implementation`.\n Used for mining vanity addresses with create2crunch."},"id":3118,"implemented":true,"kind":"function","modifiers":[],"name":"initCodeHash","nameLocation":"9108:12:7","nodeType":"FunctionDefinition","parameters":{"id":3112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3111,"mutability":"mutable","name":"implementation","nameLocation":"9129:14:7","nodeType":"VariableDeclaration","scope":3118,"src":"9121:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3110,"name":"address","nodeType":"ElementaryTypeName","src":"9121:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9120:24:7"},"returnParameters":{"id":3115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3114,"mutability":"mutable","name":"hash","nameLocation":"9176:4:7","nodeType":"VariableDeclaration","scope":3118,"src":"9168:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3113,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9168:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9167:14:7"},"scope":3295,"src":"9099:483:7","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3144,"nodeType":"Block","src":"9960:131:7","statements":[{"assignments":[3131],"declarations":[{"constant":false,"id":3131,"mutability":"mutable","name":"hash","nameLocation":"9978:4:7","nodeType":"VariableDeclaration","scope":3144,"src":"9970:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3130,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9970:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3135,"initialValue":{"arguments":[{"id":3133,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3121,"src":"9998:14:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3132,"name":"initCodeHash","nodeType":"Identifier","overloadedDeclarations":[3118,3242],"referencedDeclaration":3118,"src":"9985:12:7","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_bytes32_$","typeString":"function (address) pure returns (bytes32)"}},"id":3134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9985:28:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9970:43:7"},{"expression":{"id":3142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3136,"name":"predicted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3128,"src":"10023:9:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3138,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3131,"src":"10063:4:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3139,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3123,"src":"10069:4:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3140,"name":"deployer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3125,"src":"10075:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3137,"name":"predictDeterministicAddress","nodeType":"Identifier","overloadedDeclarations":[3145,3272,3286],"referencedDeclaration":3286,"src":"10035:27:7","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (bytes32,bytes32,address) pure returns (address)"}},"id":3141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10035:49:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10023:61:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3143,"nodeType":"ExpressionStatement","src":"10023:61:7"}]},"documentation":{"id":3119,"nodeType":"StructuredDocumentation","src":"9588:204:7","text":"@dev Returns the address of the deterministic clone of `implementation`,\n with `salt` by `deployer`.\n Note: The returned result has dirty upper 96 bits. Please clean if used in assembly."},"id":3145,"implemented":true,"kind":"function","modifiers":[],"name":"predictDeterministicAddress","nameLocation":"9806:27:7","nodeType":"FunctionDefinition","parameters":{"id":3126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3121,"mutability":"mutable","name":"implementation","nameLocation":"9842:14:7","nodeType":"VariableDeclaration","scope":3145,"src":"9834:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3120,"name":"address","nodeType":"ElementaryTypeName","src":"9834:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3123,"mutability":"mutable","name":"salt","nameLocation":"9866:4:7","nodeType":"VariableDeclaration","scope":3145,"src":"9858:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3122,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9858:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3125,"mutability":"mutable","name":"deployer","nameLocation":"9880:8:7","nodeType":"VariableDeclaration","scope":3145,"src":"9872:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3124,"name":"address","nodeType":"ElementaryTypeName","src":"9872:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9833:56:7"},"returnParameters":{"id":3129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3128,"mutability":"mutable","name":"predicted","nameLocation":"9945:9:7","nodeType":"VariableDeclaration","scope":3145,"src":"9937:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3127,"name":"address","nodeType":"ElementaryTypeName","src":"9937:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9936:19:7"},"scope":3295,"src":"9797:294:7","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3154,"nodeType":"Block","src":"10517:5754:7","statements":[{"AST":{"nodeType":"YulBlock","src":"10579:5686:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15638:4:7","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"15644:34:7","type":"","value":"0x5af43d5f5f3e6029573d5ffd5b3d5ff3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15631:6:7"},"nodeType":"YulFunctionCall","src":"15631:48:7"},"nodeType":"YulExpressionStatement","src":"15631:48:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15705:4:7","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"15711:14:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15698:6:7"},"nodeType":"YulFunctionCall","src":"15698:28:7"},"nodeType":"YulExpressionStatement","src":"15698:28:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15752:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"15758:38:7","type":"","value":"0x602d5f8160095f39f35f5f365f5f37365f73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15745:6:7"},"nodeType":"YulFunctionCall","src":"15745:52:7"},"nodeType":"YulExpressionStatement","src":"15745:52:7"},{"nodeType":"YulAssignment","src":"15819:33:7","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15838:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15841:4:7","type":"","value":"0x0e"},{"kind":"number","nodeType":"YulLiteral","src":"15847:4:7","type":"","value":"0x36"}],"functionName":{"name":"create","nodeType":"YulIdentifier","src":"15831:6:7"},"nodeType":"YulFunctionCall","src":"15831:21:7"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"15819:8:7"}]},{"body":{"nodeType":"YulBlock","src":"15931:210:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16028:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"16034:10:7","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16021:6:7"},"nodeType":"YulFunctionCall","src":"16021:24:7"},"nodeType":"YulExpressionStatement","src":"16021:24:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16116:4:7","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"16122:4:7","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16109:6:7"},"nodeType":"YulFunctionCall","src":"16109:18:7"},"nodeType":"YulExpressionStatement","src":"16109:18:7"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"15921:8:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"15914:6:7"},"nodeType":"YulFunctionCall","src":"15914:16:7"},"nodeType":"YulIf","src":"15911:230:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16247:4:7","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"16253:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16240:6:7"},"nodeType":"YulFunctionCall","src":"16240:15:7"},"nodeType":"YulExpressionStatement","src":"16240:15:7"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":3148,"isOffset":false,"isSlot":false,"src":"15711:14:7","valueSize":1},{"declaration":3151,"isOffset":false,"isSlot":false,"src":"15819:8:7","valueSize":1},{"declaration":3151,"isOffset":false,"isSlot":false,"src":"15921:8:7","valueSize":1}],"id":3153,"nodeType":"InlineAssembly","src":"10570:5695:7"}]},"documentation":{"id":3146,"nodeType":"StructuredDocumentation","src":"10380:51:7","text":"@dev Deploys a PUSH0 clone of `implementation`."},"id":3155,"implemented":true,"kind":"function","modifiers":[],"name":"clone_PUSH0","nameLocation":"10445:11:7","nodeType":"FunctionDefinition","parameters":{"id":3149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3148,"mutability":"mutable","name":"implementation","nameLocation":"10465:14:7","nodeType":"VariableDeclaration","scope":3155,"src":"10457:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3147,"name":"address","nodeType":"ElementaryTypeName","src":"10457:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10456:24:7"},"returnParameters":{"id":3152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3151,"mutability":"mutable","name":"instance","nameLocation":"10507:8:7","nodeType":"VariableDeclaration","scope":3155,"src":"10499:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3150,"name":"address","nodeType":"ElementaryTypeName","src":"10499:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10498:18:7"},"scope":3295,"src":"10436:5835:7","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3166,"nodeType":"Block","src":"16487:723:7","statements":[{"AST":{"nodeType":"YulBlock","src":"16549:655:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16570:4:7","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"16576:34:7","type":"","value":"0x5af43d5f5f3e6029573d5ffd5b3d5ff3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16563:6:7"},"nodeType":"YulFunctionCall","src":"16563:48:7"},"nodeType":"YulExpressionStatement","src":"16563:48:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16637:4:7","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"16643:14:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16630:6:7"},"nodeType":"YulFunctionCall","src":"16630:28:7"},"nodeType":"YulExpressionStatement","src":"16630:28:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16684:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"16690:38:7","type":"","value":"0x602d5f8160095f39f35f5f365f5f37365f73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16677:6:7"},"nodeType":"YulFunctionCall","src":"16677:52:7"},"nodeType":"YulExpressionStatement","src":"16677:52:7"},{"nodeType":"YulAssignment","src":"16751:40:7","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16771:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16774:4:7","type":"","value":"0x0e"},{"kind":"number","nodeType":"YulLiteral","src":"16780:4:7","type":"","value":"0x36"},{"name":"salt","nodeType":"YulIdentifier","src":"16786:4:7"}],"functionName":{"name":"create2","nodeType":"YulIdentifier","src":"16763:7:7"},"nodeType":"YulFunctionCall","src":"16763:28:7"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"16751:8:7"}]},{"body":{"nodeType":"YulBlock","src":"16870:210:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16967:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"16973:10:7","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16960:6:7"},"nodeType":"YulFunctionCall","src":"16960:24:7"},"nodeType":"YulExpressionStatement","src":"16960:24:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17055:4:7","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"17061:4:7","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17048:6:7"},"nodeType":"YulFunctionCall","src":"17048:18:7"},"nodeType":"YulExpressionStatement","src":"17048:18:7"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"16860:8:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16853:6:7"},"nodeType":"YulFunctionCall","src":"16853:16:7"},"nodeType":"YulIf","src":"16850:230:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17186:4:7","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"17192:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17179:6:7"},"nodeType":"YulFunctionCall","src":"17179:15:7"},"nodeType":"YulExpressionStatement","src":"17179:15:7"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":3158,"isOffset":false,"isSlot":false,"src":"16643:14:7","valueSize":1},{"declaration":3163,"isOffset":false,"isSlot":false,"src":"16751:8:7","valueSize":1},{"declaration":3163,"isOffset":false,"isSlot":false,"src":"16860:8:7","valueSize":1},{"declaration":3160,"isOffset":false,"isSlot":false,"src":"16786:4:7","valueSize":1}],"id":3165,"nodeType":"InlineAssembly","src":"16540:664:7"}]},"documentation":{"id":3156,"nodeType":"StructuredDocumentation","src":"16277:77:7","text":"@dev Deploys a deterministic PUSH0 clone of `implementation` with `salt`."},"id":3167,"implemented":true,"kind":"function","modifiers":[],"name":"cloneDeterministic_PUSH0","nameLocation":"16368:24:7","nodeType":"FunctionDefinition","parameters":{"id":3161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3158,"mutability":"mutable","name":"implementation","nameLocation":"16401:14:7","nodeType":"VariableDeclaration","scope":3167,"src":"16393:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3157,"name":"address","nodeType":"ElementaryTypeName","src":"16393:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3160,"mutability":"mutable","name":"salt","nameLocation":"16425:4:7","nodeType":"VariableDeclaration","scope":3167,"src":"16417:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3159,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16417:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16392:38:7"},"returnParameters":{"id":3164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3163,"mutability":"mutable","name":"instance","nameLocation":"16473:8:7","nodeType":"VariableDeclaration","scope":3167,"src":"16465:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3162,"name":"address","nodeType":"ElementaryTypeName","src":"16465:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16464:18:7"},"scope":3295,"src":"16359:851:7","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3176,"nodeType":"Block","src":"17456:423:7","statements":[{"AST":{"nodeType":"YulBlock","src":"17518:355:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17539:4:7","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"17545:34:7","type":"","value":"0x5af43d5f5f3e6029573d5ffd5b3d5ff3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17532:6:7"},"nodeType":"YulFunctionCall","src":"17532:48:7"},"nodeType":"YulExpressionStatement","src":"17532:48:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17606:4:7","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"17612:14:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17599:6:7"},"nodeType":"YulFunctionCall","src":"17599:28:7"},"nodeType":"YulExpressionStatement","src":"17599:28:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17653:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"17659:38:7","type":"","value":"0x602d5f8160095f39f35f5f365f5f37365f73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17646:6:7"},"nodeType":"YulFunctionCall","src":"17646:52:7"},"nodeType":"YulExpressionStatement","src":"17646:52:7"},{"nodeType":"YulAssignment","src":"17720:29:7","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17738:4:7","type":"","value":"0x0e"},{"kind":"number","nodeType":"YulLiteral","src":"17744:4:7","type":"","value":"0x36"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"17728:9:7"},"nodeType":"YulFunctionCall","src":"17728:21:7"},"variableNames":[{"name":"hash","nodeType":"YulIdentifier","src":"17720:4:7"}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17855:4:7","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"17861:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17848:6:7"},"nodeType":"YulFunctionCall","src":"17848:15:7"},"nodeType":"YulExpressionStatement","src":"17848:15:7"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":3173,"isOffset":false,"isSlot":false,"src":"17720:4:7","valueSize":1},{"declaration":3170,"isOffset":false,"isSlot":false,"src":"17612:14:7","valueSize":1}],"id":3175,"nodeType":"InlineAssembly","src":"17509:364:7"}]},"documentation":{"id":3168,"nodeType":"StructuredDocumentation","src":"17216:146:7","text":"@dev Returns the initialization code hash of the PUSH0 clone of `implementation`.\n Used for mining vanity addresses with create2crunch."},"id":3177,"implemented":true,"kind":"function","modifiers":[],"name":"initCodeHash_PUSH0","nameLocation":"17376:18:7","nodeType":"FunctionDefinition","parameters":{"id":3171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3170,"mutability":"mutable","name":"implementation","nameLocation":"17403:14:7","nodeType":"VariableDeclaration","scope":3177,"src":"17395:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3169,"name":"address","nodeType":"ElementaryTypeName","src":"17395:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17394:24:7"},"returnParameters":{"id":3174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3173,"mutability":"mutable","name":"hash","nameLocation":"17450:4:7","nodeType":"VariableDeclaration","scope":3177,"src":"17442:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3172,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17442:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17441:14:7"},"scope":3295,"src":"17367:512:7","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3203,"nodeType":"Block","src":"18271:137:7","statements":[{"assignments":[3190],"declarations":[{"constant":false,"id":3190,"mutability":"mutable","name":"hash","nameLocation":"18289:4:7","nodeType":"VariableDeclaration","scope":3203,"src":"18281:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3189,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18281:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3194,"initialValue":{"arguments":[{"id":3192,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3180,"src":"18315:14:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3191,"name":"initCodeHash_PUSH0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3177,"src":"18296:18:7","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_bytes32_$","typeString":"function (address) pure returns (bytes32)"}},"id":3193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18296:34:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"18281:49:7"},{"expression":{"id":3201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3195,"name":"predicted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3187,"src":"18340:9:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3197,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3190,"src":"18380:4:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3198,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3182,"src":"18386:4:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3199,"name":"deployer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3184,"src":"18392:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3196,"name":"predictDeterministicAddress","nodeType":"Identifier","overloadedDeclarations":[3145,3272,3286],"referencedDeclaration":3286,"src":"18352:27:7","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (bytes32,bytes32,address) pure returns (address)"}},"id":3200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18352:49:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18340:61:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3202,"nodeType":"ExpressionStatement","src":"18340:61:7"}]},"documentation":{"id":3178,"nodeType":"StructuredDocumentation","src":"17885:210:7","text":"@dev Returns the address of the deterministic PUSH0 clone of `implementation`,\n with `salt` by `deployer`.\n Note: The returned result has dirty upper 96 bits. Please clean if used in assembly."},"id":3204,"implemented":true,"kind":"function","modifiers":[],"name":"predictDeterministicAddress_PUSH0","nameLocation":"18109:33:7","nodeType":"FunctionDefinition","parameters":{"id":3185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3180,"mutability":"mutable","name":"implementation","nameLocation":"18160:14:7","nodeType":"VariableDeclaration","scope":3204,"src":"18152:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3179,"name":"address","nodeType":"ElementaryTypeName","src":"18152:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3182,"mutability":"mutable","name":"salt","nameLocation":"18192:4:7","nodeType":"VariableDeclaration","scope":3204,"src":"18184:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3181,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18184:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3184,"mutability":"mutable","name":"deployer","nameLocation":"18214:8:7","nodeType":"VariableDeclaration","scope":3204,"src":"18206:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3183,"name":"address","nodeType":"ElementaryTypeName","src":"18206:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18142:86:7"},"returnParameters":{"id":3188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3187,"mutability":"mutable","name":"predicted","nameLocation":"18260:9:7","nodeType":"VariableDeclaration","scope":3204,"src":"18252:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3186,"name":"address","nodeType":"ElementaryTypeName","src":"18252:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18251:19:7"},"scope":3295,"src":"18100:308:7","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3215,"nodeType":"Block","src":"19102:11230:7","statements":[{"AST":{"nodeType":"YulBlock","src":"19121:11205:7","statements":[{"nodeType":"YulVariableDeclaration","src":"19223:38:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"19249:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"19255:4:7","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19245:3:7"},"nodeType":"YulFunctionCall","src":"19245:15:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19239:5:7"},"nodeType":"YulFunctionCall","src":"19239:22:7"},"variables":[{"name":"mBefore3","nodeType":"YulTypedName","src":"19227:8:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19274:38:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"19300:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"19306:4:7","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19296:3:7"},"nodeType":"YulFunctionCall","src":"19296:15:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19290:5:7"},"nodeType":"YulFunctionCall","src":"19290:22:7"},"variables":[{"name":"mBefore2","nodeType":"YulTypedName","src":"19278:8:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19325:38:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"19351:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"19357:4:7","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19347:3:7"},"nodeType":"YulFunctionCall","src":"19347:15:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19341:5:7"},"nodeType":"YulFunctionCall","src":"19341:22:7"},"variables":[{"name":"mBefore1","nodeType":"YulTypedName","src":"19329:8:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19376:29:7","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"19400:4:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19394:5:7"},"nodeType":"YulFunctionCall","src":"19394:11:7"},"variables":[{"name":"dataLength","nodeType":"YulTypedName","src":"19380:10:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19418:47:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"19441:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"19447:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19437:3:7"},"nodeType":"YulFunctionCall","src":"19437:15:7"},{"name":"dataLength","nodeType":"YulIdentifier","src":"19454:10:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19433:3:7"},"nodeType":"YulFunctionCall","src":"19433:32:7"},"variables":[{"name":"dataEnd","nodeType":"YulTypedName","src":"19422:7:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19478:29:7","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19499:7:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19493:5:7"},"nodeType":"YulFunctionCall","src":"19493:14:7"},"variables":[{"name":"mAfter1","nodeType":"YulTypedName","src":"19482:7:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19602:37:7","value":{"arguments":[{"name":"dataLength","nodeType":"YulIdentifier","src":"19625:10:7"},{"kind":"number","nodeType":"YulLiteral","src":"19637:1:7","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19621:3:7"},"nodeType":"YulFunctionCall","src":"19621:18:7"},"variables":[{"name":"extraLength","nodeType":"YulTypedName","src":"19606:11:7","type":""}]},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"28669:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"28675:28:7","type":"","value":"0x5af43d3d93803e606057fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28662:6:7"},"nodeType":"YulFunctionCall","src":"28662:42:7"},"nodeType":"YulExpressionStatement","src":"28662:42:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"28784:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"28790:4:7","type":"","value":"0x0d"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28780:3:7"},"nodeType":"YulFunctionCall","src":"28780:15:7"},{"name":"implementation","nodeType":"YulIdentifier","src":"28797:14:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28773:6:7"},"nodeType":"YulFunctionCall","src":"28773:39:7"},"nodeType":"YulExpressionStatement","src":"28773:39:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"28900:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"28906:4:7","type":"","value":"0x21"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28896:3:7"},"nodeType":"YulFunctionCall","src":"28896:15:7"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28936:4:7","type":"","value":"0x48"},{"name":"extraLength","nodeType":"YulIdentifier","src":"28942:11:7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28932:3:7"},"nodeType":"YulFunctionCall","src":"28932:22:7"},{"kind":"number","nodeType":"YulLiteral","src":"28956:52:7","type":"","value":"0x593da1005b363d3d373d3d3d3d610000806062363936013d73"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"28929:2:7"},"nodeType":"YulFunctionCall","src":"28929:80:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28872:6:7"},"nodeType":"YulFunctionCall","src":"28872:151:7"},"nodeType":"YulExpressionStatement","src":"28872:151:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"29114:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"29120:4:7","type":"","value":"0x3a"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29110:3:7"},"nodeType":"YulFunctionCall","src":"29110:15:7"},{"kind":"number","nodeType":"YulLiteral","src":"29127:66:7","type":"","value":"0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29086:6:7"},"nodeType":"YulFunctionCall","src":"29086:121:7"},"nodeType":"YulExpressionStatement","src":"29086:121:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"29431:4:7"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29441:4:7","type":"","value":"0x59"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"29450:11:7"},{"kind":"number","nodeType":"YulLiteral","src":"29463:6:7","type":"","value":"0xff9e"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"29447:2:7"},"nodeType":"YulFunctionCall","src":"29447:23:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29437:3:7"},"nodeType":"YulFunctionCall","src":"29437:34:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29427:3:7"},"nodeType":"YulFunctionCall","src":"29427:45:7"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29497:4:7","type":"","value":"0x78"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"29507:11:7"},{"kind":"number","nodeType":"YulLiteral","src":"29520:4:7","type":"","value":"0x62"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29503:3:7"},"nodeType":"YulFunctionCall","src":"29503:22:7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29493:3:7"},"nodeType":"YulFunctionCall","src":"29493:33:7"},{"kind":"number","nodeType":"YulLiteral","src":"29528:40:7","type":"","value":"0xfd6100003d81600a3d39f336602c57343d527f"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"29490:2:7"},"nodeType":"YulFunctionCall","src":"29490:79:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29220:6:7"},"nodeType":"YulFunctionCall","src":"29220:363:7"},"nodeType":"YulExpressionStatement","src":"29220:363:7"},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"29603:7:7"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29616:4:7","type":"","value":"0xf0"},{"name":"extraLength","nodeType":"YulIdentifier","src":"29622:11:7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29612:3:7"},"nodeType":"YulFunctionCall","src":"29612:22:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29596:6:7"},"nodeType":"YulFunctionCall","src":"29596:39:7"},"nodeType":"YulExpressionStatement","src":"29596:39:7"},{"nodeType":"YulAssignment","src":"29685:62:7","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29704:1:7","type":"","value":"0"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"29711:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"29717:4:7","type":"","value":"0x4c"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29707:3:7"},"nodeType":"YulFunctionCall","src":"29707:15:7"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"29728:11:7"},{"kind":"number","nodeType":"YulLiteral","src":"29741:4:7","type":"","value":"0x6c"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29724:3:7"},"nodeType":"YulFunctionCall","src":"29724:22:7"}],"functionName":{"name":"create","nodeType":"YulIdentifier","src":"29697:6:7"},"nodeType":"YulFunctionCall","src":"29697:50:7"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"29685:8:7"}]},{"body":{"nodeType":"YulBlock","src":"29827:210:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29924:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"29930:10:7","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29917:6:7"},"nodeType":"YulFunctionCall","src":"29917:24:7"},"nodeType":"YulExpressionStatement","src":"29917:24:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30012:4:7","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"30018:4:7","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"30005:6:7"},"nodeType":"YulFunctionCall","src":"30005:18:7"},"nodeType":"YulExpressionStatement","src":"30005:18:7"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"29817:8:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29810:6:7"},"nodeType":"YulFunctionCall","src":"29810:16:7"},"nodeType":"YulIf","src":"29807:230:7"},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"30124:7:7"},{"name":"mAfter1","nodeType":"YulIdentifier","src":"30133:7:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30117:6:7"},"nodeType":"YulFunctionCall","src":"30117:24:7"},"nodeType":"YulExpressionStatement","src":"30117:24:7"},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"30161:4:7"},{"name":"dataLength","nodeType":"YulIdentifier","src":"30167:10:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30154:6:7"},"nodeType":"YulFunctionCall","src":"30154:24:7"},"nodeType":"YulExpressionStatement","src":"30154:24:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"30202:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"30208:4:7","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30198:3:7"},"nodeType":"YulFunctionCall","src":"30198:15:7"},{"name":"mBefore1","nodeType":"YulIdentifier","src":"30215:8:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30191:6:7"},"nodeType":"YulFunctionCall","src":"30191:33:7"},"nodeType":"YulExpressionStatement","src":"30191:33:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"30248:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"30254:4:7","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30244:3:7"},"nodeType":"YulFunctionCall","src":"30244:15:7"},{"name":"mBefore2","nodeType":"YulIdentifier","src":"30261:8:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30237:6:7"},"nodeType":"YulFunctionCall","src":"30237:33:7"},"nodeType":"YulExpressionStatement","src":"30237:33:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"30294:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"30300:4:7","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30290:3:7"},"nodeType":"YulFunctionCall","src":"30290:15:7"},{"name":"mBefore3","nodeType":"YulIdentifier","src":"30307:8:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30283:6:7"},"nodeType":"YulFunctionCall","src":"30283:33:7"},"nodeType":"YulExpressionStatement","src":"30283:33:7"}]},"evmVersion":"paris","externalReferences":[{"declaration":3209,"isOffset":false,"isSlot":false,"src":"19249:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"19300:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"19351:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"19400:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"19441:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"28669:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"28784:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"28900:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"29114:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"29431:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"29711:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"30161:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"30202:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"30248:4:7","valueSize":1},{"declaration":3209,"isOffset":false,"isSlot":false,"src":"30294:4:7","valueSize":1},{"declaration":3207,"isOffset":false,"isSlot":false,"src":"28797:14:7","valueSize":1},{"declaration":3212,"isOffset":false,"isSlot":false,"src":"29685:8:7","valueSize":1},{"declaration":3212,"isOffset":false,"isSlot":false,"src":"29817:8:7","valueSize":1}],"id":3214,"nodeType":"InlineAssembly","src":"19112:11214:7"}]},"documentation":{"id":3205,"nodeType":"StructuredDocumentation","src":"18697:306:7","text":"@dev Deploys a minimal proxy with `implementation`,\n using immutable arguments encoded in `data`.\n Note: This implementation of CWIA differs from the original implementation.\n If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`."},"id":3216,"implemented":true,"kind":"function","modifiers":[],"name":"clone","nameLocation":"19017:5:7","nodeType":"FunctionDefinition","parameters":{"id":3210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3207,"mutability":"mutable","name":"implementation","nameLocation":"19031:14:7","nodeType":"VariableDeclaration","scope":3216,"src":"19023:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3206,"name":"address","nodeType":"ElementaryTypeName","src":"19023:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3209,"mutability":"mutable","name":"data","nameLocation":"19060:4:7","nodeType":"VariableDeclaration","scope":3216,"src":"19047:17:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3208,"name":"bytes","nodeType":"ElementaryTypeName","src":"19047:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19022:43:7"},"returnParameters":{"id":3213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3212,"mutability":"mutable","name":"instance","nameLocation":"19092:8:7","nodeType":"VariableDeclaration","scope":3216,"src":"19084:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3211,"name":"address","nodeType":"ElementaryTypeName","src":"19084:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19083:18:7"},"scope":3295,"src":"19008:11324:7","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3229,"nodeType":"Block","src":"30807:2279:7","statements":[{"AST":{"nodeType":"YulBlock","src":"30826:2254:7","statements":[{"nodeType":"YulVariableDeclaration","src":"30928:38:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"30954:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"30960:4:7","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30950:3:7"},"nodeType":"YulFunctionCall","src":"30950:15:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30944:5:7"},"nodeType":"YulFunctionCall","src":"30944:22:7"},"variables":[{"name":"mBefore3","nodeType":"YulTypedName","src":"30932:8:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"30979:38:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31005:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"31011:4:7","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31001:3:7"},"nodeType":"YulFunctionCall","src":"31001:15:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30995:5:7"},"nodeType":"YulFunctionCall","src":"30995:22:7"},"variables":[{"name":"mBefore2","nodeType":"YulTypedName","src":"30983:8:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31030:38:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31056:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"31062:4:7","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31052:3:7"},"nodeType":"YulFunctionCall","src":"31052:15:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31046:5:7"},"nodeType":"YulFunctionCall","src":"31046:22:7"},"variables":[{"name":"mBefore1","nodeType":"YulTypedName","src":"31034:8:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31081:29:7","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31105:4:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31099:5:7"},"nodeType":"YulFunctionCall","src":"31099:11:7"},"variables":[{"name":"dataLength","nodeType":"YulTypedName","src":"31085:10:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31123:47:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31146:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"31152:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31142:3:7"},"nodeType":"YulFunctionCall","src":"31142:15:7"},{"name":"dataLength","nodeType":"YulIdentifier","src":"31159:10:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31138:3:7"},"nodeType":"YulFunctionCall","src":"31138:32:7"},"variables":[{"name":"dataEnd","nodeType":"YulTypedName","src":"31127:7:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31183:29:7","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"31204:7:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31198:5:7"},"nodeType":"YulFunctionCall","src":"31198:14:7"},"variables":[{"name":"mAfter1","nodeType":"YulTypedName","src":"31187:7:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31307:37:7","value":{"arguments":[{"name":"dataLength","nodeType":"YulIdentifier","src":"31330:10:7"},{"kind":"number","nodeType":"YulLiteral","src":"31342:1:7","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31326:3:7"},"nodeType":"YulFunctionCall","src":"31326:18:7"},"variables":[{"name":"extraLength","nodeType":"YulTypedName","src":"31311:11:7","type":""}]},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31416:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"31422:28:7","type":"","value":"0x5af43d3d93803e606057fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31409:6:7"},"nodeType":"YulFunctionCall","src":"31409:42:7"},"nodeType":"YulExpressionStatement","src":"31409:42:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31531:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"31537:4:7","type":"","value":"0x0d"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31527:3:7"},"nodeType":"YulFunctionCall","src":"31527:15:7"},{"name":"implementation","nodeType":"YulIdentifier","src":"31544:14:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31520:6:7"},"nodeType":"YulFunctionCall","src":"31520:39:7"},"nodeType":"YulExpressionStatement","src":"31520:39:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31647:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"31653:4:7","type":"","value":"0x21"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31643:3:7"},"nodeType":"YulFunctionCall","src":"31643:15:7"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"31683:4:7","type":"","value":"0x48"},{"name":"extraLength","nodeType":"YulIdentifier","src":"31689:11:7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"31679:3:7"},"nodeType":"YulFunctionCall","src":"31679:22:7"},{"kind":"number","nodeType":"YulLiteral","src":"31703:52:7","type":"","value":"0x593da1005b363d3d373d3d3d3d610000806062363936013d73"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"31676:2:7"},"nodeType":"YulFunctionCall","src":"31676:80:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31619:6:7"},"nodeType":"YulFunctionCall","src":"31619:151:7"},"nodeType":"YulExpressionStatement","src":"31619:151:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31861:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"31867:4:7","type":"","value":"0x3a"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31857:3:7"},"nodeType":"YulFunctionCall","src":"31857:15:7"},{"kind":"number","nodeType":"YulLiteral","src":"31874:66:7","type":"","value":"0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31833:6:7"},"nodeType":"YulFunctionCall","src":"31833:121:7"},"nodeType":"YulExpressionStatement","src":"31833:121:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"32178:4:7"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32188:4:7","type":"","value":"0x59"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"32197:11:7"},{"kind":"number","nodeType":"YulLiteral","src":"32210:6:7","type":"","value":"0xff9e"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"32194:2:7"},"nodeType":"YulFunctionCall","src":"32194:23:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32184:3:7"},"nodeType":"YulFunctionCall","src":"32184:34:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32174:3:7"},"nodeType":"YulFunctionCall","src":"32174:45:7"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32244:4:7","type":"","value":"0x78"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"32254:11:7"},{"kind":"number","nodeType":"YulLiteral","src":"32267:4:7","type":"","value":"0x62"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32250:3:7"},"nodeType":"YulFunctionCall","src":"32250:22:7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"32240:3:7"},"nodeType":"YulFunctionCall","src":"32240:33:7"},{"kind":"number","nodeType":"YulLiteral","src":"32275:40:7","type":"","value":"0xfd6100003d81600a3d39f336602c57343d527f"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"32237:2:7"},"nodeType":"YulFunctionCall","src":"32237:79:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31967:6:7"},"nodeType":"YulFunctionCall","src":"31967:363:7"},"nodeType":"YulExpressionStatement","src":"31967:363:7"},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"32350:7:7"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32363:4:7","type":"","value":"0xf0"},{"name":"extraLength","nodeType":"YulIdentifier","src":"32369:11:7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"32359:3:7"},"nodeType":"YulFunctionCall","src":"32359:22:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32343:6:7"},"nodeType":"YulFunctionCall","src":"32343:39:7"},"nodeType":"YulExpressionStatement","src":"32343:39:7"},{"nodeType":"YulAssignment","src":"32432:69:7","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32452:1:7","type":"","value":"0"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"32459:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"32465:4:7","type":"","value":"0x4c"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32455:3:7"},"nodeType":"YulFunctionCall","src":"32455:15:7"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"32476:11:7"},{"kind":"number","nodeType":"YulLiteral","src":"32489:4:7","type":"","value":"0x6c"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32472:3:7"},"nodeType":"YulFunctionCall","src":"32472:22:7"},{"name":"salt","nodeType":"YulIdentifier","src":"32496:4:7"}],"functionName":{"name":"create2","nodeType":"YulIdentifier","src":"32444:7:7"},"nodeType":"YulFunctionCall","src":"32444:57:7"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"32432:8:7"}]},{"body":{"nodeType":"YulBlock","src":"32581:210:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32678:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"32684:10:7","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32671:6:7"},"nodeType":"YulFunctionCall","src":"32671:24:7"},"nodeType":"YulExpressionStatement","src":"32671:24:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32766:4:7","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"32772:4:7","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"32759:6:7"},"nodeType":"YulFunctionCall","src":"32759:18:7"},"nodeType":"YulExpressionStatement","src":"32759:18:7"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"32571:8:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"32564:6:7"},"nodeType":"YulFunctionCall","src":"32564:16:7"},"nodeType":"YulIf","src":"32561:230:7"},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"32878:7:7"},{"name":"mAfter1","nodeType":"YulIdentifier","src":"32887:7:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32871:6:7"},"nodeType":"YulFunctionCall","src":"32871:24:7"},"nodeType":"YulExpressionStatement","src":"32871:24:7"},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"32915:4:7"},{"name":"dataLength","nodeType":"YulIdentifier","src":"32921:10:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32908:6:7"},"nodeType":"YulFunctionCall","src":"32908:24:7"},"nodeType":"YulExpressionStatement","src":"32908:24:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"32956:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"32962:4:7","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32952:3:7"},"nodeType":"YulFunctionCall","src":"32952:15:7"},{"name":"mBefore1","nodeType":"YulIdentifier","src":"32969:8:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32945:6:7"},"nodeType":"YulFunctionCall","src":"32945:33:7"},"nodeType":"YulExpressionStatement","src":"32945:33:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33002:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"33008:4:7","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32998:3:7"},"nodeType":"YulFunctionCall","src":"32998:15:7"},{"name":"mBefore2","nodeType":"YulIdentifier","src":"33015:8:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32991:6:7"},"nodeType":"YulFunctionCall","src":"32991:33:7"},"nodeType":"YulExpressionStatement","src":"32991:33:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33048:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"33054:4:7","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"33044:3:7"},"nodeType":"YulFunctionCall","src":"33044:15:7"},{"name":"mBefore3","nodeType":"YulIdentifier","src":"33061:8:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33037:6:7"},"nodeType":"YulFunctionCall","src":"33037:33:7"},"nodeType":"YulExpressionStatement","src":"33037:33:7"}]},"evmVersion":"paris","externalReferences":[{"declaration":3221,"isOffset":false,"isSlot":false,"src":"30954:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"31005:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"31056:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"31105:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"31146:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"31416:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"31531:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"31647:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"31861:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"32178:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"32459:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"32915:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"32956:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"33002:4:7","valueSize":1},{"declaration":3221,"isOffset":false,"isSlot":false,"src":"33048:4:7","valueSize":1},{"declaration":3219,"isOffset":false,"isSlot":false,"src":"31544:14:7","valueSize":1},{"declaration":3226,"isOffset":false,"isSlot":false,"src":"32432:8:7","valueSize":1},{"declaration":3226,"isOffset":false,"isSlot":false,"src":"32571:8:7","valueSize":1},{"declaration":3223,"isOffset":false,"isSlot":false,"src":"32496:4:7","valueSize":1}],"id":3228,"nodeType":"InlineAssembly","src":"30817:2263:7"}]},"documentation":{"id":3217,"nodeType":"StructuredDocumentation","src":"30338:323:7","text":"@dev Deploys a deterministic clone of `implementation`,\n using immutable arguments encoded in `data`, with `salt`.\n Note: This implementation of CWIA differs from the original implementation.\n If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`."},"id":3230,"implemented":true,"kind":"function","modifiers":[],"name":"cloneDeterministic","nameLocation":"30675:18:7","nodeType":"FunctionDefinition","parameters":{"id":3224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3219,"mutability":"mutable","name":"implementation","nameLocation":"30702:14:7","nodeType":"VariableDeclaration","scope":3230,"src":"30694:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3218,"name":"address","nodeType":"ElementaryTypeName","src":"30694:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3221,"mutability":"mutable","name":"data","nameLocation":"30731:4:7","nodeType":"VariableDeclaration","scope":3230,"src":"30718:17:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3220,"name":"bytes","nodeType":"ElementaryTypeName","src":"30718:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3223,"mutability":"mutable","name":"salt","nameLocation":"30745:4:7","nodeType":"VariableDeclaration","scope":3230,"src":"30737:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3222,"name":"bytes32","nodeType":"ElementaryTypeName","src":"30737:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"30693:57:7"},"returnParameters":{"id":3227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3226,"mutability":"mutable","name":"instance","nameLocation":"30793:8:7","nodeType":"VariableDeclaration","scope":3230,"src":"30785:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3225,"name":"address","nodeType":"ElementaryTypeName","src":"30785:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30784:18:7"},"scope":3295,"src":"30666:2420:7","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3241,"nodeType":"Block","src":"33419:2041:7","statements":[{"AST":{"nodeType":"YulBlock","src":"33438:2016:7","statements":[{"nodeType":"YulVariableDeclaration","src":"33540:38:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33566:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"33572:4:7","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"33562:3:7"},"nodeType":"YulFunctionCall","src":"33562:15:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33556:5:7"},"nodeType":"YulFunctionCall","src":"33556:22:7"},"variables":[{"name":"mBefore3","nodeType":"YulTypedName","src":"33544:8:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"33591:38:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33617:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"33623:4:7","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"33613:3:7"},"nodeType":"YulFunctionCall","src":"33613:15:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33607:5:7"},"nodeType":"YulFunctionCall","src":"33607:22:7"},"variables":[{"name":"mBefore2","nodeType":"YulTypedName","src":"33595:8:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"33642:38:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33668:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"33674:4:7","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"33664:3:7"},"nodeType":"YulFunctionCall","src":"33664:15:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33658:5:7"},"nodeType":"YulFunctionCall","src":"33658:22:7"},"variables":[{"name":"mBefore1","nodeType":"YulTypedName","src":"33646:8:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"33693:29:7","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33717:4:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33711:5:7"},"nodeType":"YulFunctionCall","src":"33711:11:7"},"variables":[{"name":"dataLength","nodeType":"YulTypedName","src":"33697:10:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"33735:47:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33758:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"33764:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33754:3:7"},"nodeType":"YulFunctionCall","src":"33754:15:7"},{"name":"dataLength","nodeType":"YulIdentifier","src":"33771:10:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33750:3:7"},"nodeType":"YulFunctionCall","src":"33750:32:7"},"variables":[{"name":"dataEnd","nodeType":"YulTypedName","src":"33739:7:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"33795:29:7","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"33816:7:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33810:5:7"},"nodeType":"YulFunctionCall","src":"33810:14:7"},"variables":[{"name":"mAfter1","nodeType":"YulTypedName","src":"33799:7:7","type":""}]},{"expression":{"arguments":[{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"34027:14:7"},"nodeType":"YulFunctionCall","src":"34027:16:7"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"34045:14:7"},"nodeType":"YulFunctionCall","src":"34045:16:7"},{"arguments":[{"name":"dataLength","nodeType":"YulIdentifier","src":"34066:10:7"},{"kind":"number","nodeType":"YulLiteral","src":"34078:6:7","type":"","value":"0xff9b"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"34063:2:7"},"nodeType":"YulFunctionCall","src":"34063:22:7"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"34012:14:7"},"nodeType":"YulFunctionCall","src":"34012:74:7"},"nodeType":"YulExpressionStatement","src":"34012:74:7"},{"nodeType":"YulVariableDeclaration","src":"34181:37:7","value":{"arguments":[{"name":"dataLength","nodeType":"YulIdentifier","src":"34204:10:7"},{"kind":"number","nodeType":"YulLiteral","src":"34216:1:7","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34200:3:7"},"nodeType":"YulFunctionCall","src":"34200:18:7"},"variables":[{"name":"extraLength","nodeType":"YulTypedName","src":"34185:11:7","type":""}]},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34290:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"34296:28:7","type":"","value":"0x5af43d3d93803e606057fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34283:6:7"},"nodeType":"YulFunctionCall","src":"34283:42:7"},"nodeType":"YulExpressionStatement","src":"34283:42:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34405:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"34411:4:7","type":"","value":"0x0d"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"34401:3:7"},"nodeType":"YulFunctionCall","src":"34401:15:7"},{"name":"implementation","nodeType":"YulIdentifier","src":"34418:14:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34394:6:7"},"nodeType":"YulFunctionCall","src":"34394:39:7"},"nodeType":"YulExpressionStatement","src":"34394:39:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34521:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"34527:4:7","type":"","value":"0x21"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"34517:3:7"},"nodeType":"YulFunctionCall","src":"34517:15:7"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34557:4:7","type":"","value":"0x48"},{"name":"extraLength","nodeType":"YulIdentifier","src":"34563:11:7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"34553:3:7"},"nodeType":"YulFunctionCall","src":"34553:22:7"},{"kind":"number","nodeType":"YulLiteral","src":"34577:52:7","type":"","value":"0x593da1005b363d3d373d3d3d3d610000806062363936013d73"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"34550:2:7"},"nodeType":"YulFunctionCall","src":"34550:80:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34493:6:7"},"nodeType":"YulFunctionCall","src":"34493:151:7"},"nodeType":"YulExpressionStatement","src":"34493:151:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34735:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"34741:4:7","type":"","value":"0x3a"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"34731:3:7"},"nodeType":"YulFunctionCall","src":"34731:15:7"},{"kind":"number","nodeType":"YulLiteral","src":"34748:66:7","type":"","value":"0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34707:6:7"},"nodeType":"YulFunctionCall","src":"34707:121:7"},"nodeType":"YulExpressionStatement","src":"34707:121:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34869:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"34875:4:7","type":"","value":"0x5a"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"34865:3:7"},"nodeType":"YulFunctionCall","src":"34865:15:7"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34905:4:7","type":"","value":"0x78"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"34915:11:7"},{"kind":"number","nodeType":"YulLiteral","src":"34928:4:7","type":"","value":"0x62"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34911:3:7"},"nodeType":"YulFunctionCall","src":"34911:22:7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"34901:3:7"},"nodeType":"YulFunctionCall","src":"34901:33:7"},{"kind":"number","nodeType":"YulLiteral","src":"34936:38:7","type":"","value":"0x6100003d81600a3d39f336602c57343d527f"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"34898:2:7"},"nodeType":"YulFunctionCall","src":"34898:77:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34841:6:7"},"nodeType":"YulFunctionCall","src":"34841:148:7"},"nodeType":"YulExpressionStatement","src":"34841:148:7"},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"35009:7:7"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35022:4:7","type":"","value":"0xf0"},{"name":"extraLength","nodeType":"YulIdentifier","src":"35028:11:7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"35018:3:7"},"nodeType":"YulFunctionCall","src":"35018:22:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35002:6:7"},"nodeType":"YulFunctionCall","src":"35002:39:7"},"nodeType":"YulExpressionStatement","src":"35002:39:7"},{"nodeType":"YulAssignment","src":"35107:58:7","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35129:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"35135:4:7","type":"","value":"0x4c"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35125:3:7"},"nodeType":"YulFunctionCall","src":"35125:15:7"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"35146:11:7"},{"kind":"number","nodeType":"YulLiteral","src":"35159:4:7","type":"","value":"0x6c"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35142:3:7"},"nodeType":"YulFunctionCall","src":"35142:22:7"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"35115:9:7"},"nodeType":"YulFunctionCall","src":"35115:50:7"},"variableNames":[{"name":"hash","nodeType":"YulIdentifier","src":"35107:4:7"}]},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"35252:7:7"},{"name":"mAfter1","nodeType":"YulIdentifier","src":"35261:7:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35245:6:7"},"nodeType":"YulFunctionCall","src":"35245:24:7"},"nodeType":"YulExpressionStatement","src":"35245:24:7"},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35289:4:7"},{"name":"dataLength","nodeType":"YulIdentifier","src":"35295:10:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35282:6:7"},"nodeType":"YulFunctionCall","src":"35282:24:7"},"nodeType":"YulExpressionStatement","src":"35282:24:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35330:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"35336:4:7","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35326:3:7"},"nodeType":"YulFunctionCall","src":"35326:15:7"},{"name":"mBefore1","nodeType":"YulIdentifier","src":"35343:8:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35319:6:7"},"nodeType":"YulFunctionCall","src":"35319:33:7"},"nodeType":"YulExpressionStatement","src":"35319:33:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35376:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"35382:4:7","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35372:3:7"},"nodeType":"YulFunctionCall","src":"35372:15:7"},{"name":"mBefore2","nodeType":"YulIdentifier","src":"35389:8:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35365:6:7"},"nodeType":"YulFunctionCall","src":"35365:33:7"},"nodeType":"YulExpressionStatement","src":"35365:33:7"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35422:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"35428:4:7","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35418:3:7"},"nodeType":"YulFunctionCall","src":"35418:15:7"},{"name":"mBefore3","nodeType":"YulIdentifier","src":"35435:8:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35411:6:7"},"nodeType":"YulFunctionCall","src":"35411:33:7"},"nodeType":"YulExpressionStatement","src":"35411:33:7"}]},"evmVersion":"paris","externalReferences":[{"declaration":3235,"isOffset":false,"isSlot":false,"src":"33566:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"33617:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"33668:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"33717:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"33758:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"34290:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"34405:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"34521:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"34735:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"34869:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"35129:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"35289:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"35330:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"35376:4:7","valueSize":1},{"declaration":3235,"isOffset":false,"isSlot":false,"src":"35422:4:7","valueSize":1},{"declaration":3238,"isOffset":false,"isSlot":false,"src":"35107:4:7","valueSize":1},{"declaration":3233,"isOffset":false,"isSlot":false,"src":"34418:14:7","valueSize":1}],"id":3240,"nodeType":"InlineAssembly","src":"33429:2025:7"}]},"documentation":{"id":3231,"nodeType":"StructuredDocumentation","src":"33092:192:7","text":"@dev Returns the initialization code hash of the clone of `implementation`\n using immutable arguments encoded in `data`.\n Used for mining vanity addresses with create2crunch."},"id":3242,"implemented":true,"kind":"function","modifiers":[],"name":"initCodeHash","nameLocation":"33298:12:7","nodeType":"FunctionDefinition","parameters":{"id":3236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3233,"mutability":"mutable","name":"implementation","nameLocation":"33319:14:7","nodeType":"VariableDeclaration","scope":3242,"src":"33311:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3232,"name":"address","nodeType":"ElementaryTypeName","src":"33311:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3235,"mutability":"mutable","name":"data","nameLocation":"33348:4:7","nodeType":"VariableDeclaration","scope":3242,"src":"33335:17:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3234,"name":"bytes","nodeType":"ElementaryTypeName","src":"33335:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"33310:43:7"},"returnParameters":{"id":3239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3238,"mutability":"mutable","name":"hash","nameLocation":"33409:4:7","nodeType":"VariableDeclaration","scope":3242,"src":"33401:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3237,"name":"bytes32","nodeType":"ElementaryTypeName","src":"33401:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"33400:14:7"},"scope":3295,"src":"33289:2171:7","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3271,"nodeType":"Block","src":"35912:137:7","statements":[{"assignments":[3257],"declarations":[{"constant":false,"id":3257,"mutability":"mutable","name":"hash","nameLocation":"35930:4:7","nodeType":"VariableDeclaration","scope":3271,"src":"35922:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3256,"name":"bytes32","nodeType":"ElementaryTypeName","src":"35922:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3262,"initialValue":{"arguments":[{"id":3259,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3245,"src":"35950:14:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3260,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"35966:4:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3258,"name":"initCodeHash","nodeType":"Identifier","overloadedDeclarations":[3118,3242],"referencedDeclaration":3242,"src":"35937:12:7","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (address,bytes memory) pure returns (bytes32)"}},"id":3261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35937:34:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"35922:49:7"},{"expression":{"id":3269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3263,"name":"predicted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3254,"src":"35981:9:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3265,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3257,"src":"36021:4:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3266,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3249,"src":"36027:4:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3267,"name":"deployer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3251,"src":"36033:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3264,"name":"predictDeterministicAddress","nodeType":"Identifier","overloadedDeclarations":[3145,3272,3286],"referencedDeclaration":3286,"src":"35993:27:7","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (bytes32,bytes32,address) pure returns (address)"}},"id":3268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35993:49:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"35981:61:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3270,"nodeType":"ExpressionStatement","src":"35981:61:7"}]},"documentation":{"id":3243,"nodeType":"StructuredDocumentation","src":"35466:249:7","text":"@dev Returns the address of the deterministic clone of\n `implementation` using immutable arguments encoded in `data`, with `salt`, by `deployer`.\n Note: The returned result has dirty upper 96 bits. Please clean if used in assembly."},"id":3272,"implemented":true,"kind":"function","modifiers":[],"name":"predictDeterministicAddress","nameLocation":"35729:27:7","nodeType":"FunctionDefinition","parameters":{"id":3252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3245,"mutability":"mutable","name":"implementation","nameLocation":"35774:14:7","nodeType":"VariableDeclaration","scope":3272,"src":"35766:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3244,"name":"address","nodeType":"ElementaryTypeName","src":"35766:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3247,"mutability":"mutable","name":"data","nameLocation":"35811:4:7","nodeType":"VariableDeclaration","scope":3272,"src":"35798:17:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3246,"name":"bytes","nodeType":"ElementaryTypeName","src":"35798:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3249,"mutability":"mutable","name":"salt","nameLocation":"35833:4:7","nodeType":"VariableDeclaration","scope":3272,"src":"35825:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3248,"name":"bytes32","nodeType":"ElementaryTypeName","src":"35825:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3251,"mutability":"mutable","name":"deployer","nameLocation":"35855:8:7","nodeType":"VariableDeclaration","scope":3272,"src":"35847:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3250,"name":"address","nodeType":"ElementaryTypeName","src":"35847:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"35756:113:7"},"returnParameters":{"id":3255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3254,"mutability":"mutable","name":"predicted","nameLocation":"35901:9:7","nodeType":"VariableDeclaration","scope":3272,"src":"35893:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3253,"name":"address","nodeType":"ElementaryTypeName","src":"35893:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"35892:19:7"},"scope":3295,"src":"35720:329:7","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3285,"nodeType":"Block","src":"36720:451:7","statements":[{"AST":{"nodeType":"YulBlock","src":"36782:383:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36856:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"36862:4:7","type":"","value":"0xff"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"36848:7:7"},"nodeType":"YulFunctionCall","src":"36848:19:7"},"nodeType":"YulExpressionStatement","src":"36848:19:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36908:4:7","type":"","value":"0x35"},{"name":"hash","nodeType":"YulIdentifier","src":"36914:4:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36901:6:7"},"nodeType":"YulFunctionCall","src":"36901:18:7"},"nodeType":"YulExpressionStatement","src":"36901:18:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36939:4:7","type":"","value":"0x01"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36949:2:7","type":"","value":"96"},{"name":"deployer","nodeType":"YulIdentifier","src":"36953:8:7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36945:3:7"},"nodeType":"YulFunctionCall","src":"36945:17:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36932:6:7"},"nodeType":"YulFunctionCall","src":"36932:31:7"},"nodeType":"YulExpressionStatement","src":"36932:31:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36983:4:7","type":"","value":"0x15"},{"name":"salt","nodeType":"YulIdentifier","src":"36989:4:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36976:6:7"},"nodeType":"YulFunctionCall","src":"36976:18:7"},"nodeType":"YulExpressionStatement","src":"36976:18:7"},{"nodeType":"YulAssignment","src":"37007:34:7","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37030:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"37036:4:7","type":"","value":"0x55"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"37020:9:7"},"nodeType":"YulFunctionCall","src":"37020:21:7"},"variableNames":[{"name":"predicted","nodeType":"YulIdentifier","src":"37007:9:7"}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37147:4:7","type":"","value":"0x35"},{"kind":"number","nodeType":"YulLiteral","src":"37153:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37140:6:7"},"nodeType":"YulFunctionCall","src":"37140:15:7"},"nodeType":"YulExpressionStatement","src":"37140:15:7"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":3279,"isOffset":false,"isSlot":false,"src":"36953:8:7","valueSize":1},{"declaration":3275,"isOffset":false,"isSlot":false,"src":"36914:4:7","valueSize":1},{"declaration":3282,"isOffset":false,"isSlot":false,"src":"37007:9:7","valueSize":1},{"declaration":3277,"isOffset":false,"isSlot":false,"src":"36989:4:7","valueSize":1}],"id":3284,"nodeType":"InlineAssembly","src":"36773:392:7"}]},"documentation":{"id":3273,"nodeType":"StructuredDocumentation","src":"36338:224:7","text":"@dev Returns the address when a contract with initialization code hash,\n `hash`, is deployed with `salt`, by `deployer`.\n Note: The returned result has dirty upper 96 bits. Please clean if used in assembly."},"id":3286,"implemented":true,"kind":"function","modifiers":[],"name":"predictDeterministicAddress","nameLocation":"36576:27:7","nodeType":"FunctionDefinition","parameters":{"id":3280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3275,"mutability":"mutable","name":"hash","nameLocation":"36612:4:7","nodeType":"VariableDeclaration","scope":3286,"src":"36604:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3274,"name":"bytes32","nodeType":"ElementaryTypeName","src":"36604:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3277,"mutability":"mutable","name":"salt","nameLocation":"36626:4:7","nodeType":"VariableDeclaration","scope":3286,"src":"36618:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3276,"name":"bytes32","nodeType":"ElementaryTypeName","src":"36618:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3279,"mutability":"mutable","name":"deployer","nameLocation":"36640:8:7","nodeType":"VariableDeclaration","scope":3286,"src":"36632:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3278,"name":"address","nodeType":"ElementaryTypeName","src":"36632:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"36603:46:7"},"returnParameters":{"id":3283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3282,"mutability":"mutable","name":"predicted","nameLocation":"36705:9:7","nodeType":"VariableDeclaration","scope":3286,"src":"36697:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3281,"name":"address","nodeType":"ElementaryTypeName","src":"36697:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"36696:19:7"},"scope":3295,"src":"36567:604:7","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3293,"nodeType":"Block","src":"37326:457:7","statements":[{"AST":{"nodeType":"YulBlock","src":"37388:389:7","statements":[{"body":{"nodeType":"YulBlock","src":"37547:220:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37654:4:7","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"37660:10:7","type":"","value":"0x2f634836"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37647:6:7"},"nodeType":"YulFunctionCall","src":"37647:24:7"},"nodeType":"YulExpressionStatement","src":"37647:24:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37742:4:7","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"37748:4:7","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"37735:6:7"},"nodeType":"YulFunctionCall","src":"37735:18:7"},"nodeType":"YulExpressionStatement","src":"37735:18:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37505:2:7","type":"","value":"96"},{"name":"salt","nodeType":"YulIdentifier","src":"37509:4:7"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"37501:3:7"},"nodeType":"YulFunctionCall","src":"37501:13:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"37494:6:7"},"nodeType":"YulFunctionCall","src":"37494:21:7"},{"arguments":[{"arguments":[],"functionName":{"name":"caller","nodeType":"YulIdentifier","src":"37520:6:7"},"nodeType":"YulFunctionCall","src":"37520:8:7"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37534:2:7","type":"","value":"96"},{"name":"salt","nodeType":"YulIdentifier","src":"37538:4:7"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"37530:3:7"},"nodeType":"YulFunctionCall","src":"37530:13:7"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"37517:2:7"},"nodeType":"YulFunctionCall","src":"37517:27:7"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"37491:2:7"},"nodeType":"YulFunctionCall","src":"37491:54:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"37484:6:7"},"nodeType":"YulFunctionCall","src":"37484:62:7"},"nodeType":"YulIf","src":"37481:286:7"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":3289,"isOffset":false,"isSlot":false,"src":"37509:4:7","valueSize":1},{"declaration":3289,"isOffset":false,"isSlot":false,"src":"37538:4:7","valueSize":1}],"id":3292,"nodeType":"InlineAssembly","src":"37379:398:7"}]},"documentation":{"id":3287,"nodeType":"StructuredDocumentation","src":"37177:85:7","text":"@dev Reverts if `salt` does not start with either the zero address or the caller."},"id":3294,"implemented":true,"kind":"function","modifiers":[],"name":"checkStartsWithCaller","nameLocation":"37276:21:7","nodeType":"FunctionDefinition","parameters":{"id":3290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3289,"mutability":"mutable","name":"salt","nameLocation":"37306:4:7","nodeType":"VariableDeclaration","scope":3294,"src":"37298:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3288,"name":"bytes32","nodeType":"ElementaryTypeName","src":"37298:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"37297:14:7"},"returnParameters":{"id":3291,"nodeType":"ParameterList","parameters":[],"src":"37326:0:7"},"scope":3295,"src":"37267:516:7","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":3296,"src":"1500:36285:7","usedErrors":[3083,3086],"usedEvents":[]}],"src":"32:37754:7"},"id":7}},"contracts":{"FreshCryptoLib/FCL_Webauthn.sol":{"FCL_WebAuthn":{"abi":[{"inputs":[],"name":"InvalidAuthenticatorData","type":"error"},{"inputs":[],"name":"InvalidClientData","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205ec686acfa02e88a7b10e3662be27203c5dbafb297ba4beccb1abe866cc1438964736f6c63430008140033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5E 0xC6 DUP7 0xAC STATICCALL MUL 0xE8 DUP11 PUSH28 0x10E3662BE27203C5DBAFB297BA4BECCB1ABE866CC1438964736F6C63 NUMBER STOP ADDMOD EQ STOP CALLER ","sourceMap":"1463:4924:0:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1463:4924:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205ec686acfa02e88a7b10e3662be27203c5dbafb297ba4beccb1abe866cc1438964736f6c63430008140033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5E 0xC6 DUP7 0xAC STATICCALL MUL 0xE8 DUP11 PUSH28 0x10E3662BE27203C5DBAFB297BA4BECCB1ABE866CC1438964736F6C63 NUMBER STOP ADDMOD EQ STOP CALLER ","sourceMap":"1463:4924:0:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"WebAuthn_format(bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata)":"infinite","checkSignature(bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata,uint256,uint256)":"infinite","checkSignature(bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata,uint256[2] calldata)":"infinite","checkSignature_hackmem(bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata,uint256)":"infinite","checkSignature_prec(bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata,address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidAuthenticatorData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidClientData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"FreshCryptoLib/FCL_Webauthn.sol\":\"FCL_WebAuthn\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/FCL_Webauthn.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: Implementation of the WebAuthn Authentication mechanism\\n///* https://www.w3.org/TR/webauthn-2/#sctn-intro\\n///* Original code extracted from https://github.com/btchip/Webauthn.sol\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\nimport {Base64Url} from \\\"./utils/Base64Url.sol\\\";\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\nimport {FCL_ecdsa} from \\\"./FCL_ecdsa.sol\\\";\\n\\nimport {FCL_ecdsa_utils} from \\\"./FCL_ecdsa_utils.sol\\\";\\n\\nlibrary FCL_WebAuthn {\\n error InvalidAuthenticatorData();\\n error InvalidClientData();\\n error InvalidSignature();\\n\\n function WebAuthn_format(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata // rs\\n ) internal pure returns (bytes32 result) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n {\\n if ((authenticatorData[32] & authenticatorDataFlagMask) != authenticatorDataFlagMask) {\\n revert InvalidAuthenticatorData();\\n }\\n // Verify that clientData commits to the expected client challenge\\n // Use the Base64Url encoding which omits padding characters to match WebAuthn Specification\\n string memory challengeEncoded = Base64Url.encode(abi.encodePacked(clientChallenge));\\n bytes memory challengeExtracted = new bytes(\\n bytes(challengeEncoded).length\\n );\\n\\n assembly {\\n calldatacopy(\\n add(challengeExtracted, 32),\\n add(clientData.offset, clientChallengeDataOffset),\\n mload(challengeExtracted)\\n )\\n }\\n\\n bytes32 moreData; //=keccak256(abi.encodePacked(challengeExtracted));\\n assembly {\\n moreData := keccak256(add(challengeExtracted, 32), mload(challengeExtracted))\\n }\\n\\n if (keccak256(abi.encodePacked(bytes(challengeEncoded))) != moreData) {\\n revert InvalidClientData();\\n }\\n } //avoid stack full\\n\\n // Verify the signature over sha256(authenticatorData || sha256(clientData))\\n bytes memory verifyData = new bytes(authenticatorData.length + 32);\\n\\n assembly {\\n calldatacopy(add(verifyData, 32), authenticatorData.offset, authenticatorData.length)\\n }\\n\\n bytes32 more = sha256(clientData);\\n assembly {\\n mstore(add(verifyData, add(authenticatorData.length, 32)), more)\\n }\\n\\n return sha256(verifyData);\\n }\\n\\n function checkSignature (\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256[2] calldata Q\\n ) internal view returns (bool) {\\n return checkSignature(authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs, Q[0], Q[1]);\\n }\\n\\n function checkSignature (\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256 Qx,\\n uint256 Qy\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_ecdsa_utils.ecdsa_verify(message, rs, Qx, Qy);\\n\\n return result;\\n }\\n\\n function checkSignature_prec(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n address dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_ecdsa.ecdsa_precomputed_verify(message, rs, dataPointer);\\n\\n return result;\\n }\\n\\n //beware that this implementation will not be compliant with EOF\\n function checkSignature_hackmem(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256 dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_hackmem(message, rs, dataPointer);\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0xc2811ef6e17ea1d5509a3d3f7d5af5e56583347b36093d05530425d7c1316dd6\",\"license\":\"MIT\"},\"FreshCryptoLib/FCL_ecdsa.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_ecdsa.sol\\n///*\\n///*\\n///* DESCRIPTION: ecdsa verification implementation\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\n\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\n\\n\\nlibrary FCL_ecdsa {\\n // Set parameters for curve sec256r1.public\\n //curve order (number of points)\\n uint256 constant n = FCL_Elliptic_ZZ.n;\\n \\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n\\n /**\\n * @dev ECDSA verification, given , signature, and public key, no calldata version\\n */\\n function ecdsa_verify(bytes32 message, uint256 r, uint256 s, uint256 Qx, uint256 Qy) internal view returns (bool){\\n\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return false;\\n }\\n \\n if (!FCL_Elliptic_ZZ.ecAff_isOnCurve(Qx, Qy)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, FCL_Elliptic_ZZ.n);\\n uint256 scalar_v = mulmod(r, sInv, FCL_Elliptic_ZZ.n);\\n uint256 x1;\\n\\n x1 = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(Qx, Qy, scalar_u, scalar_v);\\n\\n x1= addmod(x1, n-r,n );\\n \\n return x1 == 0;\\n }\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) internal view returns (address)\\n {\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return address(0);\\n }\\n uint256 y=FCL_Elliptic_ZZ.ec_Decompress(r, v-27);\\n uint256 rinv=FCL_Elliptic_ZZ.FCL_nModInv(r);\\n uint256 u1=mulmod(FCL_Elliptic_ZZ.n-addmod(0,h,FCL_Elliptic_ZZ.n), rinv,FCL_Elliptic_ZZ.n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,FCL_Elliptic_ZZ.n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=FCL_Elliptic_ZZ.ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256 r, uint256 s, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n \\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via the contract at address Shamir8 assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n X= addmod(X, n-r,n );\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256[2] calldata rs, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via the contract at address Shamir8 assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n X= addmod(X, n-r,n );\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n}\\n\",\"keccak256\":\"0x679d2e9a655cd7e156a0cfc24de0aca88d4e0b34a8e0dfe6a599f23af092f5a2\",\"license\":\"MIT\"},\"FreshCryptoLib/FCL_ecdsa_utils.sol\":{\"content\":\"\\n//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_ecdsa.sol\\n///*\\n///*\\n///* DESCRIPTION: ecdsa verification implementation\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\n\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\n\\n\\nlibrary FCL_ecdsa_utils {\\n // Set parameters for curve sec256r1.public\\n //curve order (number of points)\\n uint256 constant n = FCL_Elliptic_ZZ.n;\\n \\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256 Qx, uint256 Qy) internal view returns (bool) {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return false;\\n }\\n if (!FCL_Elliptic_ZZ.ecAff_isOnCurve(Qx, Qy)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, FCL_Elliptic_ZZ.n);\\n uint256 scalar_v = mulmod(r, sInv, FCL_Elliptic_ZZ.n);\\n uint256 x1;\\n\\n x1 = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(Qx, Qy, scalar_u, scalar_v);\\n x1= addmod(x1, n-r,n );\\n \\n \\n return x1 == 0;\\n }\\n\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256[2] calldata Q) internal view returns (bool) {\\n return ecdsa_verify(message, rs, Q[0], Q[1]);\\n }\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) internal view returns (address)\\n {\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return address(0);\\n }\\n uint256 y=FCL_Elliptic_ZZ.ec_Decompress(r, v-27);\\n uint256 rinv=FCL_Elliptic_ZZ.FCL_nModInv(r);\\n uint256 u1=mulmod(FCL_Elliptic_ZZ.n-addmod(0,h,FCL_Elliptic_ZZ.n), rinv,FCL_Elliptic_ZZ.n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,FCL_Elliptic_ZZ.n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=FCL_Elliptic_ZZ.ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n\\n //ecdsa signature for test purpose only (who would like to have a private key onchain anyway ?)\\n //K is nonce, kpriv is private key\\n function ecdsa_sign(bytes32 message, uint256 k , uint256 kpriv) internal view returns(uint256 r, uint256 s)\\n {\\n r=FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(0,0, k, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n r=addmod(0,r, FCL_Elliptic_ZZ.n); \\n s=mulmod(FCL_Elliptic_ZZ.FCL_nModInv(k), addmod(uint256(message), mulmod(r, kpriv, FCL_Elliptic_ZZ.n),FCL_Elliptic_ZZ.n),FCL_Elliptic_ZZ.n);//s=k^-1.(h+r.kpriv)\\n\\n \\n if(r==0||s==0){\\n revert();\\n }\\n\\n\\n }\\n\\n //ecdsa key derivation\\n //kpriv is private key return (x,y) coordinates of associated Pubkey\\n function ecdsa_derivKpub(uint256 kpriv) internal view returns(uint256 x, uint256 y)\\n {\\n \\n x=FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(0,0, kpriv, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n y=FCL_Elliptic_ZZ.ec_Decompress(x, 1);\\n \\n if (FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(x, y, kpriv, FCL_Elliptic_ZZ.n - 1) != 0) //extract correct y value\\n {\\n y=FCL_Elliptic_ZZ.p-y;\\n } \\n\\n }\\n \\n //precomputations for 8 dimensional trick\\n function Precalc_8dim( uint256 Qx, uint256 Qy) internal view returns( uint[2][256] memory Prec)\\n {\\n \\n uint[2][8] memory Pow64_PQ; //store P, 64P, 128P, 192P, Q, 64Q, 128Q, 192Q\\n \\n //the trivial private keys 1 and -1 are forbidden\\n if(Qx==FCL_Elliptic_ZZ.gx)\\n {\\n revert();\\n }\\n Pow64_PQ[0][0]=FCL_Elliptic_ZZ.gx;\\n Pow64_PQ[0][1]=FCL_Elliptic_ZZ.gy;\\n \\n Pow64_PQ[4][0]=Qx;\\n Pow64_PQ[4][1]=Qy;\\n \\n /* raise to multiplication by 64 by 6 consecutive doubling*/\\n for(uint j=1;j<4;j++){\\n uint256 x;\\n uint256 y;\\n uint256 zz;\\n uint256 zzz;\\n \\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j-1][0], Pow64_PQ[j-1][1], 1, 1);\\n \\t(Pow64_PQ[j][0], Pow64_PQ[j][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n (x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j+3][0], Pow64_PQ[j+3][1], 1, 1);\\n \\t(Pow64_PQ[j+4][0], Pow64_PQ[j+4][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n\\n \\tfor(uint i=0;i<63;i++){\\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j][0], Pow64_PQ[j][1],1,1);\\n (Pow64_PQ[j][0], Pow64_PQ[j][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j+4][0], Pow64_PQ[j+4][1],1,1);\\n (Pow64_PQ[j+4][0], Pow64_PQ[j+4][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n \\t}\\n }\\n \\n /* neutral point */\\n Prec[0][0]=0;\\n Prec[0][1]=0;\\n \\n \\t\\n for(uint i=1;i<256;i++)\\n { \\n Prec[i][0]=0;\\n Prec[i][1]=0;\\n \\n for(uint j=0;j<8;j++)\\n {\\n \\tif( (i&(1<=0.8.19 <0.9.0;\\n\\nlibrary FCL_Elliptic_ZZ {\\n // Set parameters for curve sec256r1.\\n\\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\\n //curve prime field modulus\\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n //short weierstrass first coefficient\\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\\n //short weierstrass second coefficient\\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\\n //generating point affine coordinates\\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\\n //curve order (number of points)\\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\\n /* -2 mod n constant, used to speed up inversion*/\\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\\n\\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\\n //P+1 div 4\\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\\n //arbitrary constant to express no quadratic residuosity\\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n\\n /**\\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\\n */\\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2modn)\\n mstore(add(pointer, 0xa0), n)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n /**\\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\\n */\\n\\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2)\\n mstore(add(pointer, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n\\n //Coron projective shuffling, take as input alpha as blinding factor\\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n \\n uint256 alpha2=mulmod(alpha,alpha,p);\\n \\n x3=mulmod(alpha2, x,p); //alpha^-2.x\\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\\n\\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\\n \\n return (x3, y3, zz3, zzz3);\\n }\\n\\n\\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\\n u2=addmod(u2, p-u1, p);// P = U2-U1\\n x1=mulmod(u2, u2, p);//PP\\n x2=mulmod(x1, u2, p);//PPP\\n \\n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \\n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\\n\\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \\n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\\n\\n return (x3, y3, zz3, zzz3);\\n }\\n\\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\\n/// @param self The integer of which to find the modular inverse\\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\\n\\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\\n assembly (\\\"memory-safe\\\") {\\n // load the free memory pointer value\\n let pointer := mload(0x40)\\n\\n // Define length of base (Bsize)\\n mstore(pointer, 0x20)\\n // Define the exponent size (Esize)\\n mstore(add(pointer, 0x20), 0x20)\\n // Define the modulus size (Msize)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base (B)\\n mstore(add(pointer, 0x60), self)\\n // Define the exponent (E)\\n mstore(add(pointer, 0x80), pp1div4)\\n // We save the point of the last argument, it will be override by the result\\n // of the precompile call in order to avoid paying for the memory expansion properly\\n let _result := add(pointer, 0xa0)\\n // Define the modulus (M)\\n mstore(_result, p)\\n\\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\\n if iszero(\\n staticcall(\\n not(0), // amount of gas to send\\n MODEXP_PRECOMPILE, // target\\n pointer, // argsOffset\\n 0xc0, // argsSize (6 * 32 bytes)\\n _result, // retOffset (we override M to avoid paying for the memory expansion)\\n 0x20 // retSize (32 bytes)\\n )\\n ) { revert(0, 0) }\\n\\n result := mload(_result)\\n// result :=addmod(result,0,p)\\n }\\n if(mulmod(result,result,p)!=self){\\n result=_NOTSQUARE;\\n }\\n \\n return result;\\n}\\n /**\\n * /* @dev Convert from affine rep to XYZZ rep\\n */\\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\\n unchecked {\\n P[2] = 1; //ZZ\\n P[3] = 1; //ZZZ\\n P[0] = x0;\\n P[1] = y0;\\n }\\n }\\n\\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \\n\\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\\n\\n y=SqrtMod(y2);\\n if(y==_NOTSQUARE){\\n return _NOTONCURVE;\\n }\\n if((y&1)!=(parity&1)){\\n y=p-y;\\n }\\n }\\n\\n /**\\n * /* @dev Convert from XYZZ rep to affine rep\\n */\\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\\n y1 = mulmod(y, zzzInv, p); //Y/zzz\\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\\n zzzInv = mulmod(_b, _b, p); //1/zz\\n x1 = mulmod(x, zzzInv, p); //X/zz\\n }\\n\\n /**\\n * /* @dev Sutherland2008 doubling\\n */\\n /* The \\\"dbl-2008-s-1\\\" doubling formulas */\\n\\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n assembly {\\n P0 := mulmod(2, y, p) //U = 2*Y1\\n P2 := mulmod(P0, P0, p) // V=U^2\\n P3 := mulmod(x, P2, p) // S = X1*V\\n P1 := mulmod(P0, P2, p) // W=UV\\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\\n }\\n }\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\\n */\\n\\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n if (y1 == 0) {\\n return (x2, y2, 1, 1);\\n }\\n\\n assembly {\\n y1 := sub(p, y1)\\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\\n P0 := mulmod(x2, x2, p) //PP = P^2\\n P1 := mulmod(P0, x2, p) //PPP = P*PP\\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\\n }\\n //end assembly\\n } //end unchecked\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Return the zero curve in XYZZ coordinates.\\n */\\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\\n return (0, 0, 0, 0);\\n }\\n /**\\n * @dev Check if point is the neutral of the curve\\n */\\n\\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\\n return y0 == 0;\\n }\\n /**\\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\\n */\\n\\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\\n return (0, 0);\\n }\\n\\n /**\\n * @dev Check if the curve is the zero curve in affine rep.\\n */\\n // uint256 x, uint256 y)\\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\\n return (y == 0);\\n }\\n\\n /**\\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\\n */\\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\\n if ( ((0 == x)&&( 0 == y)) || x == p || y == p) {\\n return false;\\n }\\n unchecked {\\n uint256 LHS = mulmod(y, y, p); // y^2\\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\\n\\n return LHS == RHS;\\n }\\n }\\n\\n /**\\n * @dev Add two elliptic curve points in affine coordinates. Deal with P=Q\\n */\\n\\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\\n uint256 zz0;\\n uint256 zzz0;\\n\\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\\n if((x0==x1)&&(y0==y1)) {\\n (x0, y0, zz0, zzz0) = ecZZ_Dbl(x0, y0,1,1);\\n }\\n else{\\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\\n }\\n\\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\\n }\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns only x for ECDSA use \\n * */\\n function ecZZ_mulmuladd_S_asm(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 Y;\\n uint256 index = 255;\\n uint256 H0;\\n uint256 H1;\\n\\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return 0;\\n\\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); \\n if((H0==0)&&(H1==0))//handling Q=-G\\n {\\n scalar_u=addmod(scalar_u, n-scalar_v, n);\\n scalar_v=0;\\n\\n }\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n X := H0\\n Y := H1\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := H0\\n T2 := H1\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := mulmod(addmod(X, zz, p), addmod(X, sub(p, zz), p), p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M=3*(X-ZZ)(X+ZZ)\\n\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n let T := mload(0x40)\\n mstore(add(T, 0x60), zz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n //Y:=mulmod(Y,zzz,p)//Y/zzz\\n //zz :=mulmod(zz, mload(T),p) //1/z\\n //zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, mload(T), p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return X;\\n }\\n\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns affine representation of point (normalized) \\n * */\\n function ecZZ_mulmuladd(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X, uint256 Y) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 index = 255;\\n uint256[6] memory T;\\n uint256[2] memory H;\\n \\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\\n\\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n Y := mload(add(H,32))\\n X := mload(H)\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := mload(H)\\n T2 := mload(add(H,32))\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zzz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n Y:=mulmod(Y,mload(T),p)//Y/zzz\\n zz :=mulmod(zz, mload(T),p) //1/z\\n zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, zz, p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return (X,Y);\\n }\\n\\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\\n //contract at given address dataPointer\\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\\n // the external tool to generate tables from public key is in the /sage directory\\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n unchecked {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n extcodecopy(dataPointer, T, mload(T), 64)\\n let index := sub(zz, 1)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for {} gt(index, 191) { index := add(index, 191) } {\\n //inline Double\\n {\\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(TT1, TT1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n let T1 := mulmod(TT1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n }\\n {\\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n let index2 := sub(index, 64)\\n let T3 :=\\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\\n let index3 := sub(index2, 64)\\n let T2 :=\\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\\n index := sub(index3, 64)\\n let T1 :=\\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T1) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n extcodecopy(dataPointer, T, T1, 64)\\n }\\n\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n\\n // inlined EcZZ_AddN\\n if iszero(zz) {\\n X := mload(T)\\n Y := mload(add(T, 32))\\n zz := 1\\n zzz := 1\\n\\n continue\\n }\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n\\n //special case ecAdd(P,P)=EcDbl\\n if iszero(y2) {\\n if iszero(T2) {\\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n let T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n let T4 := mulmod(T2, T2, p)\\n let T1 := mulmod(T4, T2, p) //\\n zz := mulmod(zz, T4, p)\\n //zzz3=V*ZZ1\\n zzz := mulmod(zzz, T1, p) // W=UV/\\n let zz1 := mulmod(X, T4, p)\\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n \\n\\n // improving the extcodecopy trick : append array at end of contract\\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n unchecked {\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n codecopy(T, add(mload(T), dataPointer), 64)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n //index:=add(index,192), restore index, interleaved with loop\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T4) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n codecopy(T, add(T4, dataPointer), 64)\\n\\n // inlined EcZZ_AddN\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n T4 := mulmod(T2, T2, p)\\n T1 := mulmod(T4, T2, p)\\n T2 := mulmod(zz, T4, p) // W=UV\\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\\n let zz1 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\\n zz := T2\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n\\n\\n} //EOF\\n\",\"keccak256\":\"0xa09802f3ca65d654d56260f40db449f9fbefbadb64429772e6f133ad6370eab9\",\"license\":\"MIT\"},\"FreshCryptoLib/utils/Base64Url.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Encode (without '=' padding) \\n * @author evmbrahmin, adapted from hiromin's Base64URL libraries\\n */\\nlibrary Base64Url {\\n /**\\n * @dev Base64Url Encoding Table\\n */\\n string internal constant ENCODING_TABLE =\\n \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\\\";\\n\\n function encode(bytes memory data) internal pure returns (string memory) {\\n if (data.length == 0) return \\\"\\\";\\n\\n // Load the table into memory\\n string memory table = ENCODING_TABLE;\\n\\n string memory result = new string(4 * ((data.length + 2) / 3));\\n\\n // @solidity memory-safe-assembly\\n assembly {\\n let tablePtr := add(table, 1)\\n let resultPtr := add(result, 32)\\n\\n for {\\n let dataPtr := data\\n let endPtr := add(data, mload(data))\\n } lt(dataPtr, endPtr) {\\n\\n } {\\n dataPtr := add(dataPtr, 3)\\n let input := mload(dataPtr)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(18, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(12, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(6, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))\\n resultPtr := add(resultPtr, 1)\\n }\\n\\n // Remove the padding adjustment logic\\n switch mod(mload(data), 3)\\n case 1 {\\n // Adjust for the last byte of data\\n resultPtr := sub(resultPtr, 2)\\n }\\n case 2 {\\n // Adjust for the last two bytes of data\\n resultPtr := sub(resultPtr, 1)\\n }\\n \\n // Set the correct length of the result string\\n mstore(result, sub(resultPtr, add(result, 32)))\\n }\\n\\n return result; \\n }\\n}\\n\",\"keccak256\":\"0xc9d5fbb0ef9ff0756eb5aabe7a32b2bf0f8f3c533d4451dd5778fe77aee7f0c1\",\"license\":\"Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"FreshCryptoLib/FCL_ecdsa.sol":{"FCL_ecdsa":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b29a801ab981744287cd32ec87d54caa302eadb87d56b183ab94e3275fd8226564736f6c63430008140033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB2 SWAP11 DUP1 BYTE 0xB9 DUP2 PUSH21 0x4287CD32EC87D54CAA302EADB87D56B183AB94E327 PUSH0 0xD8 0x22 PUSH6 0x64736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"1217:3244:1:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1217:3244:1;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b29a801ab981744287cd32ec87d54caa302eadb87d56b183ab94e3275fd8226564736f6c63430008140033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB2 SWAP11 DUP1 BYTE 0xB9 DUP2 PUSH21 0x4287CD32EC87D54CAA302EADB87D56B183AB94E327 PUSH0 0xD8 0x22 PUSH6 0x64736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"1217:3244:1:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"ec_recover_r1(uint256,uint256,uint256,uint256)":"infinite","ecdsa_precomputed_verify(bytes32,uint256,uint256,address)":"infinite","ecdsa_precomputed_verify(bytes32,uint256[2] calldata,address)":"infinite","ecdsa_verify(bytes32,uint256,uint256,uint256,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"FreshCryptoLib/FCL_ecdsa.sol\":\"FCL_ecdsa\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/FCL_ecdsa.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_ecdsa.sol\\n///*\\n///*\\n///* DESCRIPTION: ecdsa verification implementation\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\n\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\n\\n\\nlibrary FCL_ecdsa {\\n // Set parameters for curve sec256r1.public\\n //curve order (number of points)\\n uint256 constant n = FCL_Elliptic_ZZ.n;\\n \\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n\\n /**\\n * @dev ECDSA verification, given , signature, and public key, no calldata version\\n */\\n function ecdsa_verify(bytes32 message, uint256 r, uint256 s, uint256 Qx, uint256 Qy) internal view returns (bool){\\n\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return false;\\n }\\n \\n if (!FCL_Elliptic_ZZ.ecAff_isOnCurve(Qx, Qy)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, FCL_Elliptic_ZZ.n);\\n uint256 scalar_v = mulmod(r, sInv, FCL_Elliptic_ZZ.n);\\n uint256 x1;\\n\\n x1 = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(Qx, Qy, scalar_u, scalar_v);\\n\\n x1= addmod(x1, n-r,n );\\n \\n return x1 == 0;\\n }\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) internal view returns (address)\\n {\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return address(0);\\n }\\n uint256 y=FCL_Elliptic_ZZ.ec_Decompress(r, v-27);\\n uint256 rinv=FCL_Elliptic_ZZ.FCL_nModInv(r);\\n uint256 u1=mulmod(FCL_Elliptic_ZZ.n-addmod(0,h,FCL_Elliptic_ZZ.n), rinv,FCL_Elliptic_ZZ.n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,FCL_Elliptic_ZZ.n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=FCL_Elliptic_ZZ.ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256 r, uint256 s, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n \\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via the contract at address Shamir8 assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n X= addmod(X, n-r,n );\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256[2] calldata rs, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via the contract at address Shamir8 assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n X= addmod(X, n-r,n );\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n}\\n\",\"keccak256\":\"0x679d2e9a655cd7e156a0cfc24de0aca88d4e0b34a8e0dfe6a599f23af092f5a2\",\"license\":\"MIT\"},\"FreshCryptoLib/FCL_elliptic.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: modified XYZZ system coordinates for EVM elliptic point multiplication\\n///* optimization\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\nlibrary FCL_Elliptic_ZZ {\\n // Set parameters for curve sec256r1.\\n\\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\\n //curve prime field modulus\\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n //short weierstrass first coefficient\\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\\n //short weierstrass second coefficient\\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\\n //generating point affine coordinates\\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\\n //curve order (number of points)\\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\\n /* -2 mod n constant, used to speed up inversion*/\\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\\n\\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\\n //P+1 div 4\\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\\n //arbitrary constant to express no quadratic residuosity\\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n\\n /**\\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\\n */\\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2modn)\\n mstore(add(pointer, 0xa0), n)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n /**\\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\\n */\\n\\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2)\\n mstore(add(pointer, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n\\n //Coron projective shuffling, take as input alpha as blinding factor\\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n \\n uint256 alpha2=mulmod(alpha,alpha,p);\\n \\n x3=mulmod(alpha2, x,p); //alpha^-2.x\\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\\n\\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\\n \\n return (x3, y3, zz3, zzz3);\\n }\\n\\n\\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\\n u2=addmod(u2, p-u1, p);// P = U2-U1\\n x1=mulmod(u2, u2, p);//PP\\n x2=mulmod(x1, u2, p);//PPP\\n \\n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \\n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\\n\\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \\n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\\n\\n return (x3, y3, zz3, zzz3);\\n }\\n\\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\\n/// @param self The integer of which to find the modular inverse\\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\\n\\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\\n assembly (\\\"memory-safe\\\") {\\n // load the free memory pointer value\\n let pointer := mload(0x40)\\n\\n // Define length of base (Bsize)\\n mstore(pointer, 0x20)\\n // Define the exponent size (Esize)\\n mstore(add(pointer, 0x20), 0x20)\\n // Define the modulus size (Msize)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base (B)\\n mstore(add(pointer, 0x60), self)\\n // Define the exponent (E)\\n mstore(add(pointer, 0x80), pp1div4)\\n // We save the point of the last argument, it will be override by the result\\n // of the precompile call in order to avoid paying for the memory expansion properly\\n let _result := add(pointer, 0xa0)\\n // Define the modulus (M)\\n mstore(_result, p)\\n\\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\\n if iszero(\\n staticcall(\\n not(0), // amount of gas to send\\n MODEXP_PRECOMPILE, // target\\n pointer, // argsOffset\\n 0xc0, // argsSize (6 * 32 bytes)\\n _result, // retOffset (we override M to avoid paying for the memory expansion)\\n 0x20 // retSize (32 bytes)\\n )\\n ) { revert(0, 0) }\\n\\n result := mload(_result)\\n// result :=addmod(result,0,p)\\n }\\n if(mulmod(result,result,p)!=self){\\n result=_NOTSQUARE;\\n }\\n \\n return result;\\n}\\n /**\\n * /* @dev Convert from affine rep to XYZZ rep\\n */\\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\\n unchecked {\\n P[2] = 1; //ZZ\\n P[3] = 1; //ZZZ\\n P[0] = x0;\\n P[1] = y0;\\n }\\n }\\n\\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \\n\\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\\n\\n y=SqrtMod(y2);\\n if(y==_NOTSQUARE){\\n return _NOTONCURVE;\\n }\\n if((y&1)!=(parity&1)){\\n y=p-y;\\n }\\n }\\n\\n /**\\n * /* @dev Convert from XYZZ rep to affine rep\\n */\\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\\n y1 = mulmod(y, zzzInv, p); //Y/zzz\\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\\n zzzInv = mulmod(_b, _b, p); //1/zz\\n x1 = mulmod(x, zzzInv, p); //X/zz\\n }\\n\\n /**\\n * /* @dev Sutherland2008 doubling\\n */\\n /* The \\\"dbl-2008-s-1\\\" doubling formulas */\\n\\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n assembly {\\n P0 := mulmod(2, y, p) //U = 2*Y1\\n P2 := mulmod(P0, P0, p) // V=U^2\\n P3 := mulmod(x, P2, p) // S = X1*V\\n P1 := mulmod(P0, P2, p) // W=UV\\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\\n }\\n }\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\\n */\\n\\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n if (y1 == 0) {\\n return (x2, y2, 1, 1);\\n }\\n\\n assembly {\\n y1 := sub(p, y1)\\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\\n P0 := mulmod(x2, x2, p) //PP = P^2\\n P1 := mulmod(P0, x2, p) //PPP = P*PP\\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\\n }\\n //end assembly\\n } //end unchecked\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Return the zero curve in XYZZ coordinates.\\n */\\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\\n return (0, 0, 0, 0);\\n }\\n /**\\n * @dev Check if point is the neutral of the curve\\n */\\n\\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\\n return y0 == 0;\\n }\\n /**\\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\\n */\\n\\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\\n return (0, 0);\\n }\\n\\n /**\\n * @dev Check if the curve is the zero curve in affine rep.\\n */\\n // uint256 x, uint256 y)\\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\\n return (y == 0);\\n }\\n\\n /**\\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\\n */\\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\\n if ( ((0 == x)&&( 0 == y)) || x == p || y == p) {\\n return false;\\n }\\n unchecked {\\n uint256 LHS = mulmod(y, y, p); // y^2\\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\\n\\n return LHS == RHS;\\n }\\n }\\n\\n /**\\n * @dev Add two elliptic curve points in affine coordinates. Deal with P=Q\\n */\\n\\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\\n uint256 zz0;\\n uint256 zzz0;\\n\\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\\n if((x0==x1)&&(y0==y1)) {\\n (x0, y0, zz0, zzz0) = ecZZ_Dbl(x0, y0,1,1);\\n }\\n else{\\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\\n }\\n\\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\\n }\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns only x for ECDSA use \\n * */\\n function ecZZ_mulmuladd_S_asm(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 Y;\\n uint256 index = 255;\\n uint256 H0;\\n uint256 H1;\\n\\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return 0;\\n\\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); \\n if((H0==0)&&(H1==0))//handling Q=-G\\n {\\n scalar_u=addmod(scalar_u, n-scalar_v, n);\\n scalar_v=0;\\n\\n }\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n X := H0\\n Y := H1\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := H0\\n T2 := H1\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := mulmod(addmod(X, zz, p), addmod(X, sub(p, zz), p), p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M=3*(X-ZZ)(X+ZZ)\\n\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n let T := mload(0x40)\\n mstore(add(T, 0x60), zz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n //Y:=mulmod(Y,zzz,p)//Y/zzz\\n //zz :=mulmod(zz, mload(T),p) //1/z\\n //zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, mload(T), p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return X;\\n }\\n\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns affine representation of point (normalized) \\n * */\\n function ecZZ_mulmuladd(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X, uint256 Y) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 index = 255;\\n uint256[6] memory T;\\n uint256[2] memory H;\\n \\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\\n\\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n Y := mload(add(H,32))\\n X := mload(H)\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := mload(H)\\n T2 := mload(add(H,32))\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zzz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n Y:=mulmod(Y,mload(T),p)//Y/zzz\\n zz :=mulmod(zz, mload(T),p) //1/z\\n zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, zz, p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return (X,Y);\\n }\\n\\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\\n //contract at given address dataPointer\\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\\n // the external tool to generate tables from public key is in the /sage directory\\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n unchecked {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n extcodecopy(dataPointer, T, mload(T), 64)\\n let index := sub(zz, 1)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for {} gt(index, 191) { index := add(index, 191) } {\\n //inline Double\\n {\\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(TT1, TT1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n let T1 := mulmod(TT1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n }\\n {\\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n let index2 := sub(index, 64)\\n let T3 :=\\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\\n let index3 := sub(index2, 64)\\n let T2 :=\\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\\n index := sub(index3, 64)\\n let T1 :=\\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T1) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n extcodecopy(dataPointer, T, T1, 64)\\n }\\n\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n\\n // inlined EcZZ_AddN\\n if iszero(zz) {\\n X := mload(T)\\n Y := mload(add(T, 32))\\n zz := 1\\n zzz := 1\\n\\n continue\\n }\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n\\n //special case ecAdd(P,P)=EcDbl\\n if iszero(y2) {\\n if iszero(T2) {\\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n let T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n let T4 := mulmod(T2, T2, p)\\n let T1 := mulmod(T4, T2, p) //\\n zz := mulmod(zz, T4, p)\\n //zzz3=V*ZZ1\\n zzz := mulmod(zzz, T1, p) // W=UV/\\n let zz1 := mulmod(X, T4, p)\\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n \\n\\n // improving the extcodecopy trick : append array at end of contract\\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n unchecked {\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n codecopy(T, add(mload(T), dataPointer), 64)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n //index:=add(index,192), restore index, interleaved with loop\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T4) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n codecopy(T, add(T4, dataPointer), 64)\\n\\n // inlined EcZZ_AddN\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n T4 := mulmod(T2, T2, p)\\n T1 := mulmod(T4, T2, p)\\n T2 := mulmod(zz, T4, p) // W=UV\\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\\n let zz1 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\\n zz := T2\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n\\n\\n} //EOF\\n\",\"keccak256\":\"0xa09802f3ca65d654d56260f40db449f9fbefbadb64429772e6f133ad6370eab9\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"FreshCryptoLib/FCL_ecdsa_utils.sol":{"FCL_ecdsa_utils":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220961fa3a78d8662c41faec7b285d5cbcd644c3eff5473df218b753a4efb3afa3a64736f6c63430008140033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP7 0x1F LOG3 0xA7 DUP14 DUP7 PUSH3 0xC41FAE 0xC7 0xB2 DUP6 0xD5 0xCB 0xCD PUSH5 0x4C3EFF5473 0xDF 0x21 DUP12 PUSH22 0x3A4EFB3AFA3A64736F6C634300081400330000000000 ","sourceMap":"1218:4984:2:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1218:4984:2;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220961fa3a78d8662c41faec7b285d5cbcd644c3eff5473df218b753a4efb3afa3a64736f6c63430008140033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP7 0x1F LOG3 0xA7 DUP14 DUP7 PUSH3 0xC41FAE 0xC7 0xB2 DUP6 0xD5 0xCB 0xCD PUSH5 0x4C3EFF5473 0xDF 0x21 DUP12 PUSH22 0x3A4EFB3AFA3A64736F6C634300081400330000000000 ","sourceMap":"1218:4984:2:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"Precalc_8dim(uint256,uint256)":"infinite","ec_recover_r1(uint256,uint256,uint256,uint256)":"infinite","ecdsa_derivKpub(uint256)":"infinite","ecdsa_sign(bytes32,uint256,uint256)":"infinite","ecdsa_verify(bytes32,uint256[2] calldata,uint256,uint256)":"infinite","ecdsa_verify(bytes32,uint256[2] calldata,uint256[2] calldata)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"FreshCryptoLib/FCL_ecdsa_utils.sol\":\"FCL_ecdsa_utils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/FCL_ecdsa_utils.sol\":{\"content\":\"\\n//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_ecdsa.sol\\n///*\\n///*\\n///* DESCRIPTION: ecdsa verification implementation\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\n\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\n\\n\\nlibrary FCL_ecdsa_utils {\\n // Set parameters for curve sec256r1.public\\n //curve order (number of points)\\n uint256 constant n = FCL_Elliptic_ZZ.n;\\n \\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256 Qx, uint256 Qy) internal view returns (bool) {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return false;\\n }\\n if (!FCL_Elliptic_ZZ.ecAff_isOnCurve(Qx, Qy)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, FCL_Elliptic_ZZ.n);\\n uint256 scalar_v = mulmod(r, sInv, FCL_Elliptic_ZZ.n);\\n uint256 x1;\\n\\n x1 = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(Qx, Qy, scalar_u, scalar_v);\\n x1= addmod(x1, n-r,n );\\n \\n \\n return x1 == 0;\\n }\\n\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256[2] calldata Q) internal view returns (bool) {\\n return ecdsa_verify(message, rs, Q[0], Q[1]);\\n }\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) internal view returns (address)\\n {\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return address(0);\\n }\\n uint256 y=FCL_Elliptic_ZZ.ec_Decompress(r, v-27);\\n uint256 rinv=FCL_Elliptic_ZZ.FCL_nModInv(r);\\n uint256 u1=mulmod(FCL_Elliptic_ZZ.n-addmod(0,h,FCL_Elliptic_ZZ.n), rinv,FCL_Elliptic_ZZ.n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,FCL_Elliptic_ZZ.n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=FCL_Elliptic_ZZ.ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n\\n //ecdsa signature for test purpose only (who would like to have a private key onchain anyway ?)\\n //K is nonce, kpriv is private key\\n function ecdsa_sign(bytes32 message, uint256 k , uint256 kpriv) internal view returns(uint256 r, uint256 s)\\n {\\n r=FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(0,0, k, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n r=addmod(0,r, FCL_Elliptic_ZZ.n); \\n s=mulmod(FCL_Elliptic_ZZ.FCL_nModInv(k), addmod(uint256(message), mulmod(r, kpriv, FCL_Elliptic_ZZ.n),FCL_Elliptic_ZZ.n),FCL_Elliptic_ZZ.n);//s=k^-1.(h+r.kpriv)\\n\\n \\n if(r==0||s==0){\\n revert();\\n }\\n\\n\\n }\\n\\n //ecdsa key derivation\\n //kpriv is private key return (x,y) coordinates of associated Pubkey\\n function ecdsa_derivKpub(uint256 kpriv) internal view returns(uint256 x, uint256 y)\\n {\\n \\n x=FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(0,0, kpriv, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n y=FCL_Elliptic_ZZ.ec_Decompress(x, 1);\\n \\n if (FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(x, y, kpriv, FCL_Elliptic_ZZ.n - 1) != 0) //extract correct y value\\n {\\n y=FCL_Elliptic_ZZ.p-y;\\n } \\n\\n }\\n \\n //precomputations for 8 dimensional trick\\n function Precalc_8dim( uint256 Qx, uint256 Qy) internal view returns( uint[2][256] memory Prec)\\n {\\n \\n uint[2][8] memory Pow64_PQ; //store P, 64P, 128P, 192P, Q, 64Q, 128Q, 192Q\\n \\n //the trivial private keys 1 and -1 are forbidden\\n if(Qx==FCL_Elliptic_ZZ.gx)\\n {\\n revert();\\n }\\n Pow64_PQ[0][0]=FCL_Elliptic_ZZ.gx;\\n Pow64_PQ[0][1]=FCL_Elliptic_ZZ.gy;\\n \\n Pow64_PQ[4][0]=Qx;\\n Pow64_PQ[4][1]=Qy;\\n \\n /* raise to multiplication by 64 by 6 consecutive doubling*/\\n for(uint j=1;j<4;j++){\\n uint256 x;\\n uint256 y;\\n uint256 zz;\\n uint256 zzz;\\n \\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j-1][0], Pow64_PQ[j-1][1], 1, 1);\\n \\t(Pow64_PQ[j][0], Pow64_PQ[j][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n (x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j+3][0], Pow64_PQ[j+3][1], 1, 1);\\n \\t(Pow64_PQ[j+4][0], Pow64_PQ[j+4][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n\\n \\tfor(uint i=0;i<63;i++){\\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j][0], Pow64_PQ[j][1],1,1);\\n (Pow64_PQ[j][0], Pow64_PQ[j][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j+4][0], Pow64_PQ[j+4][1],1,1);\\n (Pow64_PQ[j+4][0], Pow64_PQ[j+4][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n \\t}\\n }\\n \\n /* neutral point */\\n Prec[0][0]=0;\\n Prec[0][1]=0;\\n \\n \\t\\n for(uint i=1;i<256;i++)\\n { \\n Prec[i][0]=0;\\n Prec[i][1]=0;\\n \\n for(uint j=0;j<8;j++)\\n {\\n \\tif( (i&(1<=0.8.19 <0.9.0;\\n\\nlibrary FCL_Elliptic_ZZ {\\n // Set parameters for curve sec256r1.\\n\\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\\n //curve prime field modulus\\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n //short weierstrass first coefficient\\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\\n //short weierstrass second coefficient\\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\\n //generating point affine coordinates\\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\\n //curve order (number of points)\\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\\n /* -2 mod n constant, used to speed up inversion*/\\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\\n\\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\\n //P+1 div 4\\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\\n //arbitrary constant to express no quadratic residuosity\\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n\\n /**\\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\\n */\\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2modn)\\n mstore(add(pointer, 0xa0), n)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n /**\\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\\n */\\n\\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2)\\n mstore(add(pointer, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n\\n //Coron projective shuffling, take as input alpha as blinding factor\\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n \\n uint256 alpha2=mulmod(alpha,alpha,p);\\n \\n x3=mulmod(alpha2, x,p); //alpha^-2.x\\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\\n\\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\\n \\n return (x3, y3, zz3, zzz3);\\n }\\n\\n\\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\\n u2=addmod(u2, p-u1, p);// P = U2-U1\\n x1=mulmod(u2, u2, p);//PP\\n x2=mulmod(x1, u2, p);//PPP\\n \\n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \\n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\\n\\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \\n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\\n\\n return (x3, y3, zz3, zzz3);\\n }\\n\\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\\n/// @param self The integer of which to find the modular inverse\\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\\n\\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\\n assembly (\\\"memory-safe\\\") {\\n // load the free memory pointer value\\n let pointer := mload(0x40)\\n\\n // Define length of base (Bsize)\\n mstore(pointer, 0x20)\\n // Define the exponent size (Esize)\\n mstore(add(pointer, 0x20), 0x20)\\n // Define the modulus size (Msize)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base (B)\\n mstore(add(pointer, 0x60), self)\\n // Define the exponent (E)\\n mstore(add(pointer, 0x80), pp1div4)\\n // We save the point of the last argument, it will be override by the result\\n // of the precompile call in order to avoid paying for the memory expansion properly\\n let _result := add(pointer, 0xa0)\\n // Define the modulus (M)\\n mstore(_result, p)\\n\\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\\n if iszero(\\n staticcall(\\n not(0), // amount of gas to send\\n MODEXP_PRECOMPILE, // target\\n pointer, // argsOffset\\n 0xc0, // argsSize (6 * 32 bytes)\\n _result, // retOffset (we override M to avoid paying for the memory expansion)\\n 0x20 // retSize (32 bytes)\\n )\\n ) { revert(0, 0) }\\n\\n result := mload(_result)\\n// result :=addmod(result,0,p)\\n }\\n if(mulmod(result,result,p)!=self){\\n result=_NOTSQUARE;\\n }\\n \\n return result;\\n}\\n /**\\n * /* @dev Convert from affine rep to XYZZ rep\\n */\\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\\n unchecked {\\n P[2] = 1; //ZZ\\n P[3] = 1; //ZZZ\\n P[0] = x0;\\n P[1] = y0;\\n }\\n }\\n\\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \\n\\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\\n\\n y=SqrtMod(y2);\\n if(y==_NOTSQUARE){\\n return _NOTONCURVE;\\n }\\n if((y&1)!=(parity&1)){\\n y=p-y;\\n }\\n }\\n\\n /**\\n * /* @dev Convert from XYZZ rep to affine rep\\n */\\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\\n y1 = mulmod(y, zzzInv, p); //Y/zzz\\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\\n zzzInv = mulmod(_b, _b, p); //1/zz\\n x1 = mulmod(x, zzzInv, p); //X/zz\\n }\\n\\n /**\\n * /* @dev Sutherland2008 doubling\\n */\\n /* The \\\"dbl-2008-s-1\\\" doubling formulas */\\n\\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n assembly {\\n P0 := mulmod(2, y, p) //U = 2*Y1\\n P2 := mulmod(P0, P0, p) // V=U^2\\n P3 := mulmod(x, P2, p) // S = X1*V\\n P1 := mulmod(P0, P2, p) // W=UV\\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\\n }\\n }\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\\n */\\n\\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n if (y1 == 0) {\\n return (x2, y2, 1, 1);\\n }\\n\\n assembly {\\n y1 := sub(p, y1)\\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\\n P0 := mulmod(x2, x2, p) //PP = P^2\\n P1 := mulmod(P0, x2, p) //PPP = P*PP\\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\\n }\\n //end assembly\\n } //end unchecked\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Return the zero curve in XYZZ coordinates.\\n */\\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\\n return (0, 0, 0, 0);\\n }\\n /**\\n * @dev Check if point is the neutral of the curve\\n */\\n\\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\\n return y0 == 0;\\n }\\n /**\\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\\n */\\n\\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\\n return (0, 0);\\n }\\n\\n /**\\n * @dev Check if the curve is the zero curve in affine rep.\\n */\\n // uint256 x, uint256 y)\\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\\n return (y == 0);\\n }\\n\\n /**\\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\\n */\\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\\n if ( ((0 == x)&&( 0 == y)) || x == p || y == p) {\\n return false;\\n }\\n unchecked {\\n uint256 LHS = mulmod(y, y, p); // y^2\\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\\n\\n return LHS == RHS;\\n }\\n }\\n\\n /**\\n * @dev Add two elliptic curve points in affine coordinates. Deal with P=Q\\n */\\n\\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\\n uint256 zz0;\\n uint256 zzz0;\\n\\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\\n if((x0==x1)&&(y0==y1)) {\\n (x0, y0, zz0, zzz0) = ecZZ_Dbl(x0, y0,1,1);\\n }\\n else{\\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\\n }\\n\\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\\n }\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns only x for ECDSA use \\n * */\\n function ecZZ_mulmuladd_S_asm(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 Y;\\n uint256 index = 255;\\n uint256 H0;\\n uint256 H1;\\n\\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return 0;\\n\\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); \\n if((H0==0)&&(H1==0))//handling Q=-G\\n {\\n scalar_u=addmod(scalar_u, n-scalar_v, n);\\n scalar_v=0;\\n\\n }\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n X := H0\\n Y := H1\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := H0\\n T2 := H1\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := mulmod(addmod(X, zz, p), addmod(X, sub(p, zz), p), p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M=3*(X-ZZ)(X+ZZ)\\n\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n let T := mload(0x40)\\n mstore(add(T, 0x60), zz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n //Y:=mulmod(Y,zzz,p)//Y/zzz\\n //zz :=mulmod(zz, mload(T),p) //1/z\\n //zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, mload(T), p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return X;\\n }\\n\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns affine representation of point (normalized) \\n * */\\n function ecZZ_mulmuladd(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X, uint256 Y) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 index = 255;\\n uint256[6] memory T;\\n uint256[2] memory H;\\n \\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\\n\\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n Y := mload(add(H,32))\\n X := mload(H)\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := mload(H)\\n T2 := mload(add(H,32))\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zzz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n Y:=mulmod(Y,mload(T),p)//Y/zzz\\n zz :=mulmod(zz, mload(T),p) //1/z\\n zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, zz, p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return (X,Y);\\n }\\n\\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\\n //contract at given address dataPointer\\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\\n // the external tool to generate tables from public key is in the /sage directory\\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n unchecked {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n extcodecopy(dataPointer, T, mload(T), 64)\\n let index := sub(zz, 1)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for {} gt(index, 191) { index := add(index, 191) } {\\n //inline Double\\n {\\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(TT1, TT1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n let T1 := mulmod(TT1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n }\\n {\\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n let index2 := sub(index, 64)\\n let T3 :=\\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\\n let index3 := sub(index2, 64)\\n let T2 :=\\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\\n index := sub(index3, 64)\\n let T1 :=\\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T1) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n extcodecopy(dataPointer, T, T1, 64)\\n }\\n\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n\\n // inlined EcZZ_AddN\\n if iszero(zz) {\\n X := mload(T)\\n Y := mload(add(T, 32))\\n zz := 1\\n zzz := 1\\n\\n continue\\n }\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n\\n //special case ecAdd(P,P)=EcDbl\\n if iszero(y2) {\\n if iszero(T2) {\\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n let T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n let T4 := mulmod(T2, T2, p)\\n let T1 := mulmod(T4, T2, p) //\\n zz := mulmod(zz, T4, p)\\n //zzz3=V*ZZ1\\n zzz := mulmod(zzz, T1, p) // W=UV/\\n let zz1 := mulmod(X, T4, p)\\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n \\n\\n // improving the extcodecopy trick : append array at end of contract\\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n unchecked {\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n codecopy(T, add(mload(T), dataPointer), 64)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n //index:=add(index,192), restore index, interleaved with loop\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T4) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n codecopy(T, add(T4, dataPointer), 64)\\n\\n // inlined EcZZ_AddN\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n T4 := mulmod(T2, T2, p)\\n T1 := mulmod(T4, T2, p)\\n T2 := mulmod(zz, T4, p) // W=UV\\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\\n let zz1 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\\n zz := T2\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n\\n\\n} //EOF\\n\",\"keccak256\":\"0xa09802f3ca65d654d56260f40db449f9fbefbadb64429772e6f133ad6370eab9\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"FreshCryptoLib/FCL_elliptic.sol":{"FCL_Elliptic_ZZ":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e7ab0b3825695b2a217a3739a7a46963208636b10d8ba64ee0ee3077a118f4ed64736f6c63430008140033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE7 0xAB SIGNEXTEND CODESIZE 0x25 PUSH10 0x5B2A217A3739A7A46963 KECCAK256 DUP7 CALLDATASIZE 0xB1 0xD DUP12 0xA6 0x4E 0xE0 0xEE ADDRESS PUSH24 0xA118F4ED64736F6C63430008140033000000000000000000 ","sourceMap":"1220:39430:3:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1220:39430:3;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e7ab0b3825695b2a217a3739a7a46963208636b10d8ba64ee0ee3077a118f4ed64736f6c63430008140033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE7 0xAB SIGNEXTEND CODESIZE 0x25 PUSH10 0x5B2A217A3739A7A46963 KECCAK256 DUP7 CALLDATASIZE 0xB1 0xD DUP12 0xA6 0x4E 0xE0 0xEE ADDRESS PUSH24 0xA118F4ED64736F6C63430008140033000000000000000000 ","sourceMap":"1220:39430:3:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"FCL_nModInv(uint256)":"infinite","FCL_pModInv(uint256)":"infinite","SqrtMod(uint256)":"infinite","ecAff_IsZero(uint256,uint256)":"infinite","ecAff_SetZZ(uint256,uint256)":"infinite","ecAff_SetZero()":"infinite","ecAff_add(uint256,uint256,uint256,uint256)":"infinite","ecAff_isOnCurve(uint256,uint256)":"infinite","ecZZ_Add(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)":"infinite","ecZZ_AddN(uint256,uint256,uint256,uint256,uint256,uint256)":"infinite","ecZZ_Coronize(uint256,uint256,uint256,uint256,uint256)":"infinite","ecZZ_Dbl(uint256,uint256,uint256,uint256)":"infinite","ecZZ_IsZero(uint256,uint256,uint256,uint256)":"infinite","ecZZ_SetAff(uint256,uint256,uint256,uint256)":"infinite","ecZZ_SetZero()":"infinite","ecZZ_mulmuladd(uint256,uint256,uint256,uint256)":"infinite","ecZZ_mulmuladd_S8_extcode(uint256,uint256,address)":"infinite","ecZZ_mulmuladd_S8_hackmem(uint256,uint256,uint256)":"infinite","ecZZ_mulmuladd_S_asm(uint256,uint256,uint256,uint256)":"infinite","ec_Decompress(uint256,uint256)":"infinite","ecdsa_precomputed_hackmem(bytes32,uint256[2] calldata,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"FreshCryptoLib/FCL_elliptic.sol\":\"FCL_Elliptic_ZZ\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/FCL_elliptic.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: modified XYZZ system coordinates for EVM elliptic point multiplication\\n///* optimization\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\nlibrary FCL_Elliptic_ZZ {\\n // Set parameters for curve sec256r1.\\n\\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\\n //curve prime field modulus\\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n //short weierstrass first coefficient\\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\\n //short weierstrass second coefficient\\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\\n //generating point affine coordinates\\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\\n //curve order (number of points)\\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\\n /* -2 mod n constant, used to speed up inversion*/\\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\\n\\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\\n //P+1 div 4\\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\\n //arbitrary constant to express no quadratic residuosity\\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n\\n /**\\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\\n */\\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2modn)\\n mstore(add(pointer, 0xa0), n)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n /**\\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\\n */\\n\\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2)\\n mstore(add(pointer, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n\\n //Coron projective shuffling, take as input alpha as blinding factor\\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n \\n uint256 alpha2=mulmod(alpha,alpha,p);\\n \\n x3=mulmod(alpha2, x,p); //alpha^-2.x\\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\\n\\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\\n \\n return (x3, y3, zz3, zzz3);\\n }\\n\\n\\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\\n u2=addmod(u2, p-u1, p);// P = U2-U1\\n x1=mulmod(u2, u2, p);//PP\\n x2=mulmod(x1, u2, p);//PPP\\n \\n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \\n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\\n\\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \\n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\\n\\n return (x3, y3, zz3, zzz3);\\n }\\n\\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\\n/// @param self The integer of which to find the modular inverse\\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\\n\\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\\n assembly (\\\"memory-safe\\\") {\\n // load the free memory pointer value\\n let pointer := mload(0x40)\\n\\n // Define length of base (Bsize)\\n mstore(pointer, 0x20)\\n // Define the exponent size (Esize)\\n mstore(add(pointer, 0x20), 0x20)\\n // Define the modulus size (Msize)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base (B)\\n mstore(add(pointer, 0x60), self)\\n // Define the exponent (E)\\n mstore(add(pointer, 0x80), pp1div4)\\n // We save the point of the last argument, it will be override by the result\\n // of the precompile call in order to avoid paying for the memory expansion properly\\n let _result := add(pointer, 0xa0)\\n // Define the modulus (M)\\n mstore(_result, p)\\n\\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\\n if iszero(\\n staticcall(\\n not(0), // amount of gas to send\\n MODEXP_PRECOMPILE, // target\\n pointer, // argsOffset\\n 0xc0, // argsSize (6 * 32 bytes)\\n _result, // retOffset (we override M to avoid paying for the memory expansion)\\n 0x20 // retSize (32 bytes)\\n )\\n ) { revert(0, 0) }\\n\\n result := mload(_result)\\n// result :=addmod(result,0,p)\\n }\\n if(mulmod(result,result,p)!=self){\\n result=_NOTSQUARE;\\n }\\n \\n return result;\\n}\\n /**\\n * /* @dev Convert from affine rep to XYZZ rep\\n */\\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\\n unchecked {\\n P[2] = 1; //ZZ\\n P[3] = 1; //ZZZ\\n P[0] = x0;\\n P[1] = y0;\\n }\\n }\\n\\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \\n\\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\\n\\n y=SqrtMod(y2);\\n if(y==_NOTSQUARE){\\n return _NOTONCURVE;\\n }\\n if((y&1)!=(parity&1)){\\n y=p-y;\\n }\\n }\\n\\n /**\\n * /* @dev Convert from XYZZ rep to affine rep\\n */\\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\\n y1 = mulmod(y, zzzInv, p); //Y/zzz\\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\\n zzzInv = mulmod(_b, _b, p); //1/zz\\n x1 = mulmod(x, zzzInv, p); //X/zz\\n }\\n\\n /**\\n * /* @dev Sutherland2008 doubling\\n */\\n /* The \\\"dbl-2008-s-1\\\" doubling formulas */\\n\\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n assembly {\\n P0 := mulmod(2, y, p) //U = 2*Y1\\n P2 := mulmod(P0, P0, p) // V=U^2\\n P3 := mulmod(x, P2, p) // S = X1*V\\n P1 := mulmod(P0, P2, p) // W=UV\\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\\n }\\n }\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\\n */\\n\\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n if (y1 == 0) {\\n return (x2, y2, 1, 1);\\n }\\n\\n assembly {\\n y1 := sub(p, y1)\\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\\n P0 := mulmod(x2, x2, p) //PP = P^2\\n P1 := mulmod(P0, x2, p) //PPP = P*PP\\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\\n }\\n //end assembly\\n } //end unchecked\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Return the zero curve in XYZZ coordinates.\\n */\\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\\n return (0, 0, 0, 0);\\n }\\n /**\\n * @dev Check if point is the neutral of the curve\\n */\\n\\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\\n return y0 == 0;\\n }\\n /**\\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\\n */\\n\\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\\n return (0, 0);\\n }\\n\\n /**\\n * @dev Check if the curve is the zero curve in affine rep.\\n */\\n // uint256 x, uint256 y)\\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\\n return (y == 0);\\n }\\n\\n /**\\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\\n */\\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\\n if ( ((0 == x)&&( 0 == y)) || x == p || y == p) {\\n return false;\\n }\\n unchecked {\\n uint256 LHS = mulmod(y, y, p); // y^2\\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\\n\\n return LHS == RHS;\\n }\\n }\\n\\n /**\\n * @dev Add two elliptic curve points in affine coordinates. Deal with P=Q\\n */\\n\\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\\n uint256 zz0;\\n uint256 zzz0;\\n\\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\\n if((x0==x1)&&(y0==y1)) {\\n (x0, y0, zz0, zzz0) = ecZZ_Dbl(x0, y0,1,1);\\n }\\n else{\\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\\n }\\n\\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\\n }\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns only x for ECDSA use \\n * */\\n function ecZZ_mulmuladd_S_asm(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 Y;\\n uint256 index = 255;\\n uint256 H0;\\n uint256 H1;\\n\\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return 0;\\n\\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); \\n if((H0==0)&&(H1==0))//handling Q=-G\\n {\\n scalar_u=addmod(scalar_u, n-scalar_v, n);\\n scalar_v=0;\\n\\n }\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n X := H0\\n Y := H1\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := H0\\n T2 := H1\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := mulmod(addmod(X, zz, p), addmod(X, sub(p, zz), p), p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M=3*(X-ZZ)(X+ZZ)\\n\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n let T := mload(0x40)\\n mstore(add(T, 0x60), zz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n //Y:=mulmod(Y,zzz,p)//Y/zzz\\n //zz :=mulmod(zz, mload(T),p) //1/z\\n //zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, mload(T), p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return X;\\n }\\n\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns affine representation of point (normalized) \\n * */\\n function ecZZ_mulmuladd(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X, uint256 Y) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 index = 255;\\n uint256[6] memory T;\\n uint256[2] memory H;\\n \\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\\n\\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n Y := mload(add(H,32))\\n X := mload(H)\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := mload(H)\\n T2 := mload(add(H,32))\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zzz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n Y:=mulmod(Y,mload(T),p)//Y/zzz\\n zz :=mulmod(zz, mload(T),p) //1/z\\n zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, zz, p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return (X,Y);\\n }\\n\\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\\n //contract at given address dataPointer\\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\\n // the external tool to generate tables from public key is in the /sage directory\\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n unchecked {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n extcodecopy(dataPointer, T, mload(T), 64)\\n let index := sub(zz, 1)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for {} gt(index, 191) { index := add(index, 191) } {\\n //inline Double\\n {\\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(TT1, TT1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n let T1 := mulmod(TT1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n }\\n {\\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n let index2 := sub(index, 64)\\n let T3 :=\\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\\n let index3 := sub(index2, 64)\\n let T2 :=\\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\\n index := sub(index3, 64)\\n let T1 :=\\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T1) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n extcodecopy(dataPointer, T, T1, 64)\\n }\\n\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n\\n // inlined EcZZ_AddN\\n if iszero(zz) {\\n X := mload(T)\\n Y := mload(add(T, 32))\\n zz := 1\\n zzz := 1\\n\\n continue\\n }\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n\\n //special case ecAdd(P,P)=EcDbl\\n if iszero(y2) {\\n if iszero(T2) {\\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n let T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n let T4 := mulmod(T2, T2, p)\\n let T1 := mulmod(T4, T2, p) //\\n zz := mulmod(zz, T4, p)\\n //zzz3=V*ZZ1\\n zzz := mulmod(zzz, T1, p) // W=UV/\\n let zz1 := mulmod(X, T4, p)\\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n \\n\\n // improving the extcodecopy trick : append array at end of contract\\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n unchecked {\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n codecopy(T, add(mload(T), dataPointer), 64)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n //index:=add(index,192), restore index, interleaved with loop\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T4) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n codecopy(T, add(T4, dataPointer), 64)\\n\\n // inlined EcZZ_AddN\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n T4 := mulmod(T2, T2, p)\\n T1 := mulmod(T4, T2, p)\\n T2 := mulmod(zz, T4, p) // W=UV\\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\\n let zz1 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\\n zz := T2\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n\\n\\n} //EOF\\n\",\"keccak256\":\"0xa09802f3ca65d654d56260f40db449f9fbefbadb64429772e6f133ad6370eab9\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"FreshCryptoLib/utils/Base64Url.sol":{"Base64Url":{"abi":[],"devdoc":{"author":"evmbrahmin, adapted from hiromin's Base64URL libraries","details":"Encode (without '=' padding) ","kind":"dev","methods":{},"stateVariables":{"ENCODING_TABLE":{"details":"Base64Url Encoding Table"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220dd0fb3e368a541ad90e70b9ff44a2b95cab5a3874a7a68ec142b3bf9a4e367c664736f6c63430008140033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0xF 0xB3 0xE3 PUSH9 0xA541AD90E70B9FF44A 0x2B SWAP6 0xCA 0xB5 LOG3 DUP8 0x4A PUSH27 0x68EC142B3BF9A4E367C664736F6C63430008140033000000000000 ","sourceMap":"176:2116:4:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;176:2116:4;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220dd0fb3e368a541ad90e70b9ff44a2b95cab5a3874a7a68ec142b3bf9a4e367c664736f6c63430008140033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0xF 0xB3 0xE3 PUSH9 0xA541AD90E70B9FF44A 0x2B SWAP6 0xCA 0xB5 LOG3 DUP8 0x4A PUSH27 0x68EC142B3BF9A4E367C664736F6C63430008140033000000000000 ","sourceMap":"176:2116:4:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"encode(bytes memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"evmbrahmin, adapted from hiromin's Base64URL libraries\",\"details\":\"Encode (without '=' padding) \",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ENCODING_TABLE\":{\"details\":\"Base64Url Encoding Table\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"FreshCryptoLib/utils/Base64Url.sol\":\"Base64Url\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/utils/Base64Url.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Encode (without '=' padding) \\n * @author evmbrahmin, adapted from hiromin's Base64URL libraries\\n */\\nlibrary Base64Url {\\n /**\\n * @dev Base64Url Encoding Table\\n */\\n string internal constant ENCODING_TABLE =\\n \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\\\";\\n\\n function encode(bytes memory data) internal pure returns (string memory) {\\n if (data.length == 0) return \\\"\\\";\\n\\n // Load the table into memory\\n string memory table = ENCODING_TABLE;\\n\\n string memory result = new string(4 * ((data.length + 2) / 3));\\n\\n // @solidity memory-safe-assembly\\n assembly {\\n let tablePtr := add(table, 1)\\n let resultPtr := add(result, 32)\\n\\n for {\\n let dataPtr := data\\n let endPtr := add(data, mload(data))\\n } lt(dataPtr, endPtr) {\\n\\n } {\\n dataPtr := add(dataPtr, 3)\\n let input := mload(dataPtr)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(18, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(12, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(6, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))\\n resultPtr := add(resultPtr, 1)\\n }\\n\\n // Remove the padding adjustment logic\\n switch mod(mload(data), 3)\\n case 1 {\\n // Adjust for the last byte of data\\n resultPtr := sub(resultPtr, 2)\\n }\\n case 2 {\\n // Adjust for the last two bytes of data\\n resultPtr := sub(resultPtr, 1)\\n }\\n \\n // Set the correct length of the result string\\n mstore(result, sub(resultPtr, add(result, 32)))\\n }\\n\\n return result; \\n }\\n}\\n\",\"keccak256\":\"0xc9d5fbb0ef9ff0756eb5aabe7a32b2bf0f8f3c533d4451dd5778fe77aee7f0c1\",\"license\":\"Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/P256Signer.sol":{"P256Signer":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"InvalidAuthenticatorData","type":"error"},{"inputs":[],"name":"InvalidClientData","type":"error"},{"inputs":[],"name":"InvalidHash","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"x_","type":"uint256"},{"internalType":"uint256","name":"y_","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_hash","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"y","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"This contract is the implementation. It is meant to be used through proxy clone.","kind":"dev","methods":{"initialize(uint256,uint256)":{"details":"This function is only callable once and needs to be called immediately after deployment by the factory in the same transaction.","params":{"x_":"The x coordinate of the public key","y_":"The y coordinate of the public key"}},"isValidSignature(bytes,bytes)":{"details":"This is the old version of the function of EIP-1271 using bytes memory instead of bytes32","params":{"_hash":"The hash of the data signed","_signature":"The signature"},"returns":{"_0":"The EIP-1271 magic value"}},"isValidSignature(bytes32,bytes)":{"params":{"_hash":"The hash of the data signed","_signature":"The signature"},"returns":{"_0":"The EIP-1271 magic value"}}},"title":"P256Signer","version":1},"evm":{"bytecode":{"functionDebugData":{"@_2882":{"entryPoint":null,"id":2882,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506000805460ff1916600117905561204b8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806320c13b0b1161005057806320c13b0b146100f4578063a56dfe4a14610107578063e4a301161461011057600080fd5b80630c55699c14610077578063158ef93e146100935780631626ba7e146100b0575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6000546100a09060ff1681565b604051901515815260200161008a565b6100c36100be366004611cb9565b610125565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161008a565b6100c3610102366004611d34565b61017c565b61008060025481565b61012361011e366004611e20565b6101b2565b005b60006101538460405160200161013d91815260200190565b6040516020818303038152906040528484610226565b507f1626ba7e000000000000000000000000000000000000000000000000000000009392505050565b6000610189848484610226565b507f20c13b0b000000000000000000000000000000000000000000000000000000009392505050565b60005460ff16156101ef576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591909155600255565b8251602084012082600061028061023d8380611e42565b7f010000000000000000000000000000000000000000000000000000000000000061026b6020870187611e42565b888860400135896060016001546002546102c1565b9050806102b9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000806102d48c8c8c8c8c8c8c8c6102f5565b905060006102e482878787610598565b9d9c50505050505050505050505050565b60007fff000000000000000000000000000000000000000000000000000000000000008716878a8a602081811061032e5761032e611ea7565b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610392576040517ffc93479200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006103be856040516020016103aa91815260200190565b6040516020818303038152906040526106f7565b90506000815167ffffffffffffffff8111156103dc576103dc611d05565b6040519080825280601f01601f191660200182016040528015610406576020820181803683370190505b50905080518589016020830137600081516020830120905080836040516020016104309190611ed6565b604051602081830303815290604052805190602001201461047d576040517febab5d2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000915061048f9050896020611f34565b67ffffffffffffffff8111156104a7576104a7611d05565b6040519080825280601f01601f1916602001820160405280156104d1576020820181803683370190505b509050888a60208301376000600288886040516104ef929190611f47565b602060405180830381855afa15801561050c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061052f9190611f57565b90508060208b018301526002826040516105499190611ed6565b602060405180830381855afa158015610566573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105899190611f57565b9b9a5050505050505050505050565b6000833560208501358115806105ce57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b806105d7575080155b8061060257507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518110155b15610612576000925050506106ef565b61061c8585610866565b61062b576000925050506106ef565b6000610636826109e0565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828a09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518386099050600061069689898585610a64565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516106e3877fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551611f70565b82081596505050505050505b949350505050565b6060815160000361071657505060408051602081019091526000815290565b6000604051806060016040528060408152602001611fd660409139905060006003845160026107459190611f34565b61074f9190611f83565b61075a906004611fbe565b67ffffffffffffffff81111561077257610772611d05565b6040519080825280601f01601f19166020018201604052801561079c576020820181803683370190505b509050600182016020820185865187015b80821015610808576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506107ad565b5050600386510660018114610824576002811461082f57610836565b600282039150610836565b6001820391505b508290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018252509392505050565b600082158015610874575081155b8061089e57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83145b806108c857507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82145b156108d5575060006109da565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8208919091149150505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa610a5d57600080fd5b5192915050565b600080808060ff818088158015610a79575087155b15610a8d57600096505050505050506106ef565b610ad97f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611561565b909250905081158015610aea575080155b15610b3c577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a089850600097505b600189841c16600189851c1660011b015b80610b6f5760018403935060018a851c1660018a861c1660011b019050610b4d565b50600189841c16600189851c1660011b01955060018603610bd1577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603610be0578a96508993505b60038603610bef578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11156114b1577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080610eda57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff039750505050506114a6565b60018103610f29577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610f38578e93508d92505b60038103610f47578593508492505b89610f6057509198506001975087965094506114a69050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d88090893508061129f578361129f577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a87098508985050505050506114a6565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250610bfe565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61152c57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099c9b505050505050505050505050565b6000808080866115785785859350935050506115e6565b8461158a5787879350935050506115e6565b858814801561159857508487145b156115b9576115aa88886001806115ef565b929a50909850925090506115d3565b6115c888886001808a8a611879565b929a50909850925090505b6115df88888484611b3e565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361189857508492508391506001905080611b31565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b6000806000611b4c84611bf3565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa610a5d57600080fd5b60008083601f840112611c8257600080fd5b50813567ffffffffffffffff811115611c9a57600080fd5b602083019150836020828501011115611cb257600080fd5b9250929050565b600080600060408486031215611cce57600080fd5b83359250602084013567ffffffffffffffff811115611cec57600080fd5b611cf886828701611c70565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060408486031215611d4957600080fd5b833567ffffffffffffffff80821115611d6157600080fd5b818601915086601f830112611d7557600080fd5b813581811115611d8757611d87611d05565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611dcd57611dcd611d05565b81604052828152896020848701011115611de657600080fd5b826020860160208301376000602084830101528097505050506020860135915080821115611e1357600080fd5b50611cf886828701611c70565b60008060408385031215611e3357600080fd5b50508035926020909101359150565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611e7757600080fd5b83018035915067ffffffffffffffff821115611e9257600080fd5b602001915036819003821315611cb257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000825160005b81811015611ef75760208186018101518583015201611edd565b506000920191825250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156109da576109da611f05565b8183823760009101908152919050565b600060208284031215611f6957600080fd5b5051919050565b818103818111156109da576109da611f05565b600082611fb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820281158282048414176109da576109da611f0556fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa264697066735822122010b19bcb302b393f0f07ede9ec3810838497a4931544263dc93726e735cb3b0e64736f6c63430008140033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x204B DUP1 PUSH2 0x2D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x72 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x20C13B0B GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x20C13B0B EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xA56DFE4A EQ PUSH2 0x107 JUMPI DUP1 PUSH4 0xE4A30116 EQ PUSH2 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC55699C EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0x158EF93E EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0xB0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x80 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH2 0xA0 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A JUMP JUMPDEST PUSH2 0xC3 PUSH2 0xBE CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB9 JUMP JUMPDEST PUSH2 0x125 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A JUMP JUMPDEST PUSH2 0xC3 PUSH2 0x102 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D34 JUMP JUMPDEST PUSH2 0x17C JUMP JUMPDEST PUSH2 0x80 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x123 PUSH2 0x11E CALLDATASIZE PUSH1 0x4 PUSH2 0x1E20 JUMP JUMPDEST PUSH2 0x1B2 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH2 0x153 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x13D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP5 DUP5 PUSH2 0x226 JUMP JUMPDEST POP PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x189 DUP5 DUP5 DUP5 PUSH2 0x226 JUMP JUMPDEST POP PUSH32 0x20C13B0B00000000000000000000000000000000000000000000000000000000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1EF JUMPI PUSH1 0x40 MLOAD PUSH32 0xDC149F000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x2 SSTORE JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP5 ADD KECCAK256 DUP3 PUSH1 0x0 PUSH2 0x280 PUSH2 0x23D DUP4 DUP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 PUSH2 0x26B PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x1E42 JUMP JUMPDEST DUP9 DUP9 PUSH1 0x40 ADD CALLDATALOAD DUP10 PUSH1 0x60 ADD PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD PUSH2 0x2C1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x2B9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8BAA579F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2D4 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH2 0x2F5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2E4 DUP3 DUP8 DUP8 DUP8 PUSH2 0x598 JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 DUP8 AND DUP8 DUP11 DUP11 PUSH1 0x20 DUP2 DUP2 LT PUSH2 0x32E JUMPI PUSH2 0x32E PUSH2 0x1EA7 JUMP JUMPDEST SWAP1 POP ADD CALLDATALOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL AND PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0xFC93479200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3BE DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3AA SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x6F7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3DC JUMPI PUSH2 0x3DC PUSH2 0x1D05 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP1 MLOAD DUP6 DUP10 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 DUP4 ADD KECCAK256 SWAP1 POP DUP1 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x430 SWAP2 SWAP1 PUSH2 0x1ED6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x47D JUMPI PUSH1 0x40 MLOAD PUSH32 0xEBAB5D2900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP2 POP PUSH2 0x48F SWAP1 POP DUP10 PUSH1 0x20 PUSH2 0x1F34 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4A7 JUMPI PUSH2 0x4A7 PUSH2 0x1D05 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP11 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x2 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x4EF SWAP3 SWAP2 SWAP1 PUSH2 0x1F47 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x50C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x52F SWAP2 SWAP1 PUSH2 0x1F57 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP12 ADD DUP4 ADD MSTORE PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD PUSH2 0x549 SWAP2 SWAP1 PUSH2 0x1ED6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x566 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x589 SWAP2 SWAP1 PUSH2 0x1F57 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 CALLDATALOAD PUSH1 0x20 DUP6 ADD CALLDATALOAD DUP2 ISZERO DUP1 PUSH2 0x5CE JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 LT ISZERO JUMPDEST DUP1 PUSH2 0x5D7 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x602 JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP2 LT ISZERO JUMPDEST ISZERO PUSH2 0x612 JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x6EF JUMP JUMPDEST PUSH2 0x61C DUP6 DUP6 PUSH2 0x866 JUMP JUMPDEST PUSH2 0x62B JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x6EF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x636 DUP3 PUSH2 0x9E0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 DUP11 MULMOD SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP4 DUP7 MULMOD SWAP1 POP PUSH1 0x0 PUSH2 0x696 DUP10 DUP10 DUP6 DUP6 PUSH2 0xA64 JUMP JUMPDEST SWAP1 POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH2 0x6E3 DUP8 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH2 0x1F70 JUMP JUMPDEST DUP3 ADDMOD ISZERO SWAP7 POP POP POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD PUSH1 0x0 SUB PUSH2 0x716 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FD6 PUSH1 0x40 SWAP2 CODECOPY SWAP1 POP PUSH1 0x0 PUSH1 0x3 DUP5 MLOAD PUSH1 0x2 PUSH2 0x745 SWAP2 SWAP1 PUSH2 0x1F34 JUMP JUMPDEST PUSH2 0x74F SWAP2 SWAP1 PUSH2 0x1F83 JUMP JUMPDEST PUSH2 0x75A SWAP1 PUSH1 0x4 PUSH2 0x1FBE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x772 JUMPI PUSH2 0x772 PUSH2 0x1D05 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x79C JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x1 DUP3 ADD PUSH1 0x20 DUP3 ADD DUP6 DUP7 MLOAD DUP8 ADD JUMPDEST DUP1 DUP3 LT ISZERO PUSH2 0x808 JUMPI PUSH1 0x3 DUP3 ADD SWAP2 POP DUP2 MLOAD PUSH1 0x3F DUP2 PUSH1 0x12 SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 PUSH1 0xC SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 PUSH1 0x6 SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 AND DUP6 ADD MLOAD DUP5 MSTORE8 POP PUSH1 0x1 DUP4 ADD SWAP3 POP PUSH2 0x7AD JUMP JUMPDEST POP POP PUSH1 0x3 DUP7 MLOAD MOD PUSH1 0x1 DUP2 EQ PUSH2 0x824 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x82F JUMPI PUSH2 0x836 JUMP JUMPDEST PUSH1 0x2 DUP3 SUB SWAP2 POP PUSH2 0x836 JUMP JUMPDEST PUSH1 0x1 DUP3 SUB SWAP2 POP JUMPDEST POP DUP3 SWAP1 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD DUP3 MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO PUSH2 0x874 JUMPI POP DUP2 ISZERO JUMPDEST DUP1 PUSH2 0x89E JUMPI POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 EQ JUMPDEST DUP1 PUSH2 0x8C8 JUMPI POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ JUMPDEST ISZERO PUSH2 0x8D5 JUMPI POP PUSH1 0x0 PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC DUP8 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP11 MULMOD MULMOD ADDMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B DUP3 ADDMOD SWAP2 SWAP1 SWAP2 EQ SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0xA5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH1 0xFF DUP2 DUP1 DUP9 ISZERO DUP1 ISZERO PUSH2 0xA79 JUMPI POP DUP8 ISZERO JUMPDEST ISZERO PUSH2 0xA8D JUMPI PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x6EF JUMP JUMPDEST PUSH2 0xAD9 PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 DUP14 DUP14 PUSH2 0x1561 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xAEA JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xB3C JUMPI PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP9 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 SUB DUP11 ADDMOD SWAP9 POP PUSH1 0x0 SWAP8 POP JUMPDEST PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD JUMPDEST DUP1 PUSH2 0xB6F JUMPI PUSH1 0x1 DUP5 SUB SWAP4 POP PUSH1 0x1 DUP11 DUP6 SHR AND PUSH1 0x1 DUP11 DUP7 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP PUSH2 0xB4D JUMP JUMPDEST POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD SWAP6 POP PUSH1 0x1 DUP7 SUB PUSH2 0xBD1 JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP7 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP4 POP JUMPDEST PUSH1 0x2 DUP7 SUB PUSH2 0xBE0 JUMPI DUP11 SWAP7 POP DUP10 SWAP4 POP JUMPDEST PUSH1 0x3 DUP7 SUB PUSH2 0xBEF JUMPI DUP2 SWAP7 POP DUP1 SWAP4 POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH1 0x1 SWAP6 POP PUSH1 0x1 SWAP5 POP JUMPDEST DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF GT ISZERO PUSH2 0x14B1 JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH1 0x2 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP11 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP5 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP15 ADDMOD MULMOD PUSH1 0x3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP6 MULMOD SWAP9 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP5 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD ADDMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD DUP3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP8 MULMOD ADDMOD SWAP8 POP PUSH1 0x1 DUP14 DUP9 SHR AND PUSH1 0x1 DUP14 DUP10 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP DUP1 PUSH2 0xEDA JUMPI DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB SWAP8 POP POP POP POP POP PUSH2 0x14A6 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0xF29 JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP4 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP3 POP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0xF38 JUMPI DUP15 SWAP4 POP DUP14 SWAP3 POP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0xF47 JUMPI DUP6 SWAP4 POP DUP5 SWAP3 POP JUMPDEST DUP10 PUSH2 0xF60 JUMPI POP SWAP2 SWAP9 POP PUSH1 0x1 SWAP8 POP DUP8 SWAP7 POP SWAP5 POP PUSH2 0x14A6 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP7 MULMOD ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP9 MULMOD ADDMOD SWAP4 POP DUP1 PUSH2 0x129F JUMPI DUP4 PUSH2 0x129F JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP7 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP14 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP15 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP16 ADDMOD MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH1 0x3 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP7 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP6 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD ADDMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP6 ADDMOD DUP4 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 DUP8 MULMOD DUP6 ADDMOD SWAP9 POP POP POP POP POP POP PUSH2 0x14A6 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP4 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP14 MULMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP13 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP15 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP9 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 DUP14 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP7 ADDMOD MULMOD ADDMOD SWAP11 POP POP POP POP DUP1 SWAP11 POP POP POP POP POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH2 0xBFE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x152C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD DUP10 MULMOD SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP7 PUSH2 0x1578 JUMPI DUP6 DUP6 SWAP4 POP SWAP4 POP POP POP PUSH2 0x15E6 JUMP JUMPDEST DUP5 PUSH2 0x158A JUMPI DUP8 DUP8 SWAP4 POP SWAP4 POP POP POP PUSH2 0x15E6 JUMP JUMPDEST DUP6 DUP9 EQ DUP1 ISZERO PUSH2 0x1598 JUMPI POP DUP5 DUP8 EQ JUMPDEST ISZERO PUSH2 0x15B9 JUMPI PUSH2 0x15AA DUP9 DUP9 PUSH1 0x1 DUP1 PUSH2 0x15EF JUMP JUMPDEST SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP3 POP SWAP1 POP PUSH2 0x15D3 JUMP JUMPDEST PUSH2 0x15C8 DUP9 DUP9 PUSH1 0x1 DUP1 DUP11 DUP11 PUSH2 0x1879 JUMP JUMPDEST SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP3 POP SWAP1 POP JUMPDEST PUSH2 0x15DF DUP9 DUP9 DUP5 DUP5 PUSH2 0x1B3E JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH1 0x2 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP10 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP6 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP4 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP12 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP13 ADDMOD MULMOD PUSH1 0x3 MULMOD SWAP6 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP10 MULMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP4 ADDMOD DUP8 MULMOD SWAP8 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP5 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 DUP6 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP10 ADDMOD SWAP3 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 PUSH1 0x0 SUB PUSH2 0x1898 JUMPI POP DUP5 SWAP3 POP DUP4 SWAP2 POP PUSH1 0x1 SWAP1 POP DUP1 PUSH2 0x1B31 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 SUB SWAP9 DUP10 DUP2 DUP10 DUP9 MULMOD ADDMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP10 MULMOD ADDMOD SWAP6 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP8 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP6 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP10 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP9 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP12 MULMOD SWAP8 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP11 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 DUP12 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD MULMOD ADDMOD SWAP3 POP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1B4C DUP5 PUSH2 0x1BF3 JUMP JUMPDEST SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP8 MULMOD SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP8 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP10 MULMOD SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0xA5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1C82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1C9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1CB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1CCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1CEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1CF8 DUP7 DUP3 DUP8 ADD PUSH2 0x1C70 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1D49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1D87 JUMPI PUSH2 0x1D87 PUSH2 0x1D05 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x1DCD JUMPI PUSH2 0x1DCD PUSH2 0x1D05 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x1DE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP8 POP POP POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1E13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CF8 DUP7 DUP3 DUP8 ADD PUSH2 0x1C70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x1E77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x1CB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1EF7 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x1EDD JUMP JUMPDEST POP PUSH1 0x0 SWAP3 ADD SWAP2 DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x9DA JUMPI PUSH2 0x9DA PUSH2 0x1F05 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x9DA JUMPI PUSH2 0x9DA PUSH2 0x1F05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1FB9 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x9DA JUMPI PUSH2 0x9DA PUSH2 0x1F05 JUMP INVALID COINBASE TIMESTAMP NUMBER PREVRANDAO GASLIMIT CHAINID SELFBALANCE BASEFEE 0x49 0x4A 0x4B 0x4C 0x4D 0x4E 0x4F POP MLOAD MSTORE MSTORE8 SLOAD SSTORE JUMP JUMPI PC MSIZE GAS PUSH2 0x6263 PUSH5 0x6566676869 PUSH11 0x6B6C6D6E6F707172737475 PUSH23 0x7778797A303132333435363738392D5FA2646970667358 0x22 SLT KECCAK256 LT 0xB1 SWAP12 0xCB ADDRESS 0x2B CODECOPY EXTCODEHASH 0xF SMOD 0xED 0xE9 0xEC CODESIZE LT DUP4 DUP5 SWAP8 LOG4 SWAP4 ISZERO PREVRANDAO 0x26 RETURNDATASIZE 0xC9 CALLDATACOPY 0x26 0xE7 CALLDATALOAD 0xCB EXTCODESIZE 0xE PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"330:3371:5:-:0;;;1104:49;;;;;;;;;-1:-1:-1;1128:11:5;:18;;-1:-1:-1;;1128:18:5;1142:4;1128:18;;;330:3371;;;;;;"},"deployedBytecode":{"functionDebugData":{"@FCL_nModInv_1517":{"entryPoint":2528,"id":1517,"parameterSlots":1,"returnSlots":1},"@FCL_pModInv_1527":{"entryPoint":7155,"id":1527,"parameterSlots":1,"returnSlots":1},"@WebAuthn_format_113":{"entryPoint":757,"id":113,"parameterSlots":8,"returnSlots":1},"@_validate_2976":{"entryPoint":550,"id":2976,"parameterSlots":3,"returnSlots":0},"@checkSignature_200":{"entryPoint":705,"id":200,"parameterSlots":10,"returnSlots":1},"@ecAff_IsZero_2109":{"entryPoint":null,"id":2109,"parameterSlots":2,"returnSlots":1},"@ecAff_add_2271":{"entryPoint":5473,"id":2271,"parameterSlots":4,"returnSlots":2},"@ecAff_isOnCurve_2183":{"entryPoint":2150,"id":2183,"parameterSlots":2,"returnSlots":1},"@ecZZ_AddN_2042":{"entryPoint":6265,"id":2042,"parameterSlots":6,"returnSlots":4},"@ecZZ_Dbl_1998":{"entryPoint":5615,"id":1998,"parameterSlots":4,"returnSlots":4},"@ecZZ_SetAff_1969":{"entryPoint":6974,"id":1969,"parameterSlots":4,"returnSlots":2},"@ecZZ_mulmuladd_S_asm_2355":{"entryPoint":2660,"id":2355,"parameterSlots":4,"returnSlots":1},"@ecdsa_verify_808":{"entryPoint":1432,"id":808,"parameterSlots":4,"returnSlots":1},"@encode_2842":{"entryPoint":1783,"id":2842,"parameterSlots":1,"returnSlots":1},"@initialize_3002":{"entryPoint":434,"id":3002,"parameterSlots":2,"returnSlots":0},"@initialized_2859":{"entryPoint":null,"id":2859,"parameterSlots":0,"returnSlots":0},"@isValidSignature_2903":{"entryPoint":293,"id":2903,"parameterSlots":3,"returnSlots":1},"@isValidSignature_2921":{"entryPoint":380,"id":2921,"parameterSlots":3,"returnSlots":1},"@x_2862":{"entryPoint":null,"id":2862,"parameterSlots":0,"returnSlots":0},"@y_2865":{"entryPoint":null,"id":2865,"parameterSlots":0,"returnSlots":0},"abi_decode_bytes_calldata":{"entryPoint":7280,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":8023,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_bytes_calldata_ptr":{"entryPoint":7353,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bytes_memory_ptrt_bytes_calldata_ptr":{"entryPoint":7476,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":7712,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":8007,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":7894,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":7746,"id":null,"parameterSlots":2,"returnSlots":2},"checked_add_t_uint256":{"entryPoint":7988,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":8067,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":8126,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":8048,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":7941,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":7847,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":7429,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:6314:8","statements":[{"nodeType":"YulBlock","src":"6:3:8","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:8","statements":[{"nodeType":"YulAssignment","src":"125:26:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:8"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:8","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:8"},"nodeType":"YulFunctionCall","src":"133:18:8"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:8"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:8"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:8"},"nodeType":"YulFunctionCall","src":"160:25:8"},"nodeType":"YulExpressionStatement","src":"160:25:8"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:8","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:8","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:8","type":""}],"src":"14:177:8"},{"body":{"nodeType":"YulBlock","src":"291:92:8","statements":[{"nodeType":"YulAssignment","src":"301:26:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"313:9:8"},{"kind":"number","nodeType":"YulLiteral","src":"324:2:8","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"309:3:8"},"nodeType":"YulFunctionCall","src":"309:18:8"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"301:4:8"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"343:9:8"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"368:6:8"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"361:6:8"},"nodeType":"YulFunctionCall","src":"361:14:8"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"354:6:8"},"nodeType":"YulFunctionCall","src":"354:22:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"336:6:8"},"nodeType":"YulFunctionCall","src":"336:41:8"},"nodeType":"YulExpressionStatement","src":"336:41:8"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"260:9:8","type":""},{"name":"value0","nodeType":"YulTypedName","src":"271:6:8","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"282:4:8","type":""}],"src":"196:187:8"},{"body":{"nodeType":"YulBlock","src":"460:275:8","statements":[{"body":{"nodeType":"YulBlock","src":"509:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"518:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"521:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"511:6:8"},"nodeType":"YulFunctionCall","src":"511:12:8"},"nodeType":"YulExpressionStatement","src":"511:12:8"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"488:6:8"},{"kind":"number","nodeType":"YulLiteral","src":"496:4:8","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"484:3:8"},"nodeType":"YulFunctionCall","src":"484:17:8"},{"name":"end","nodeType":"YulIdentifier","src":"503:3:8"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"480:3:8"},"nodeType":"YulFunctionCall","src":"480:27:8"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"473:6:8"},"nodeType":"YulFunctionCall","src":"473:35:8"},"nodeType":"YulIf","src":"470:55:8"},{"nodeType":"YulAssignment","src":"534:30:8","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"557:6:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"544:12:8"},"nodeType":"YulFunctionCall","src":"544:20:8"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"534:6:8"}]},{"body":{"nodeType":"YulBlock","src":"607:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"616:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"619:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"609:6:8"},"nodeType":"YulFunctionCall","src":"609:12:8"},"nodeType":"YulExpressionStatement","src":"609:12:8"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"579:6:8"},{"kind":"number","nodeType":"YulLiteral","src":"587:18:8","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"576:2:8"},"nodeType":"YulFunctionCall","src":"576:30:8"},"nodeType":"YulIf","src":"573:50:8"},{"nodeType":"YulAssignment","src":"632:29:8","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"648:6:8"},{"kind":"number","nodeType":"YulLiteral","src":"656:4:8","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"644:3:8"},"nodeType":"YulFunctionCall","src":"644:17:8"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"632:8:8"}]},{"body":{"nodeType":"YulBlock","src":"713:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"722:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"725:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"715:6:8"},"nodeType":"YulFunctionCall","src":"715:12:8"},"nodeType":"YulExpressionStatement","src":"715:12:8"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"684:6:8"},{"name":"length","nodeType":"YulIdentifier","src":"692:6:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"680:3:8"},"nodeType":"YulFunctionCall","src":"680:19:8"},{"kind":"number","nodeType":"YulLiteral","src":"701:4:8","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"676:3:8"},"nodeType":"YulFunctionCall","src":"676:30:8"},{"name":"end","nodeType":"YulIdentifier","src":"708:3:8"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"673:2:8"},"nodeType":"YulFunctionCall","src":"673:39:8"},"nodeType":"YulIf","src":"670:59:8"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"423:6:8","type":""},{"name":"end","nodeType":"YulTypedName","src":"431:3:8","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"439:8:8","type":""},{"name":"length","nodeType":"YulTypedName","src":"449:6:8","type":""}],"src":"388:347:8"},{"body":{"nodeType":"YulBlock","src":"846:371:8","statements":[{"body":{"nodeType":"YulBlock","src":"892:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"901:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"904:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"894:6:8"},"nodeType":"YulFunctionCall","src":"894:12:8"},"nodeType":"YulExpressionStatement","src":"894:12:8"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"867:7:8"},{"name":"headStart","nodeType":"YulIdentifier","src":"876:9:8"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"863:3:8"},"nodeType":"YulFunctionCall","src":"863:23:8"},{"kind":"number","nodeType":"YulLiteral","src":"888:2:8","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"859:3:8"},"nodeType":"YulFunctionCall","src":"859:32:8"},"nodeType":"YulIf","src":"856:52:8"},{"nodeType":"YulAssignment","src":"917:33:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"940:9:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"927:12:8"},"nodeType":"YulFunctionCall","src":"927:23:8"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"917:6:8"}]},{"nodeType":"YulVariableDeclaration","src":"959:46:8","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"990:9:8"},{"kind":"number","nodeType":"YulLiteral","src":"1001:2:8","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"986:3:8"},"nodeType":"YulFunctionCall","src":"986:18:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"973:12:8"},"nodeType":"YulFunctionCall","src":"973:32:8"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"963:6:8","type":""}]},{"body":{"nodeType":"YulBlock","src":"1048:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1057:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1060:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1050:6:8"},"nodeType":"YulFunctionCall","src":"1050:12:8"},"nodeType":"YulExpressionStatement","src":"1050:12:8"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1020:6:8"},{"kind":"number","nodeType":"YulLiteral","src":"1028:18:8","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1017:2:8"},"nodeType":"YulFunctionCall","src":"1017:30:8"},"nodeType":"YulIf","src":"1014:50:8"},{"nodeType":"YulVariableDeclaration","src":"1073:84:8","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1129:9:8"},{"name":"offset","nodeType":"YulIdentifier","src":"1140:6:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1125:3:8"},"nodeType":"YulFunctionCall","src":"1125:22:8"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1149:7:8"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"1099:25:8"},"nodeType":"YulFunctionCall","src":"1099:58:8"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"1077:8:8","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"1087:8:8","type":""}]},{"nodeType":"YulAssignment","src":"1166:18:8","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"1176:8:8"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1166:6:8"}]},{"nodeType":"YulAssignment","src":"1193:18:8","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"1203:8:8"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1193:6:8"}]}]},"name":"abi_decode_tuple_t_bytes32t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"796:9:8","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"807:7:8","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"819:6:8","type":""},{"name":"value1","nodeType":"YulTypedName","src":"827:6:8","type":""},{"name":"value2","nodeType":"YulTypedName","src":"835:6:8","type":""}],"src":"740:477:8"},{"body":{"nodeType":"YulBlock","src":"1321:149:8","statements":[{"nodeType":"YulAssignment","src":"1331:26:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1343:9:8"},{"kind":"number","nodeType":"YulLiteral","src":"1354:2:8","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1339:3:8"},"nodeType":"YulFunctionCall","src":"1339:18:8"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1331:4:8"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1373:9:8"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1388:6:8"},{"kind":"number","nodeType":"YulLiteral","src":"1396:66:8","type":"","value":"0xffffffff00000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1384:3:8"},"nodeType":"YulFunctionCall","src":"1384:79:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1366:6:8"},"nodeType":"YulFunctionCall","src":"1366:98:8"},"nodeType":"YulExpressionStatement","src":"1366:98:8"}]},"name":"abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1290:9:8","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1301:6:8","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1312:4:8","type":""}],"src":"1222:248:8"},{"body":{"nodeType":"YulBlock","src":"1507:152:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1524:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1527:77:8","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1517:6:8"},"nodeType":"YulFunctionCall","src":"1517:88:8"},"nodeType":"YulExpressionStatement","src":"1517:88:8"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1621:1:8","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1624:4:8","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1614:6:8"},"nodeType":"YulFunctionCall","src":"1614:15:8"},"nodeType":"YulExpressionStatement","src":"1614:15:8"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1645:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1648:4:8","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1638:6:8"},"nodeType":"YulFunctionCall","src":"1638:15:8"},"nodeType":"YulExpressionStatement","src":"1638:15:8"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1475:184:8"},{"body":{"nodeType":"YulBlock","src":"1779:1162:8","statements":[{"body":{"nodeType":"YulBlock","src":"1825:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1834:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1837:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1827:6:8"},"nodeType":"YulFunctionCall","src":"1827:12:8"},"nodeType":"YulExpressionStatement","src":"1827:12:8"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1800:7:8"},{"name":"headStart","nodeType":"YulIdentifier","src":"1809:9:8"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1796:3:8"},"nodeType":"YulFunctionCall","src":"1796:23:8"},{"kind":"number","nodeType":"YulLiteral","src":"1821:2:8","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1792:3:8"},"nodeType":"YulFunctionCall","src":"1792:32:8"},"nodeType":"YulIf","src":"1789:52:8"},{"nodeType":"YulVariableDeclaration","src":"1850:37:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1877:9:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1864:12:8"},"nodeType":"YulFunctionCall","src":"1864:23:8"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1854:6:8","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1896:28:8","value":{"kind":"number","nodeType":"YulLiteral","src":"1906:18:8","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1900:2:8","type":""}]},{"body":{"nodeType":"YulBlock","src":"1951:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1960:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1963:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1953:6:8"},"nodeType":"YulFunctionCall","src":"1953:12:8"},"nodeType":"YulExpressionStatement","src":"1953:12:8"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1939:6:8"},{"name":"_1","nodeType":"YulIdentifier","src":"1947:2:8"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1936:2:8"},"nodeType":"YulFunctionCall","src":"1936:14:8"},"nodeType":"YulIf","src":"1933:34:8"},{"nodeType":"YulVariableDeclaration","src":"1976:32:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1990:9:8"},{"name":"offset","nodeType":"YulIdentifier","src":"2001:6:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1986:3:8"},"nodeType":"YulFunctionCall","src":"1986:22:8"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1980:2:8","type":""}]},{"body":{"nodeType":"YulBlock","src":"2056:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2065:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2068:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2058:6:8"},"nodeType":"YulFunctionCall","src":"2058:12:8"},"nodeType":"YulExpressionStatement","src":"2058:12:8"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2035:2:8"},{"kind":"number","nodeType":"YulLiteral","src":"2039:4:8","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2031:3:8"},"nodeType":"YulFunctionCall","src":"2031:13:8"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2046:7:8"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2027:3:8"},"nodeType":"YulFunctionCall","src":"2027:27:8"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2020:6:8"},"nodeType":"YulFunctionCall","src":"2020:35:8"},"nodeType":"YulIf","src":"2017:55:8"},{"nodeType":"YulVariableDeclaration","src":"2081:26:8","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2104:2:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2091:12:8"},"nodeType":"YulFunctionCall","src":"2091:16:8"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2085:2:8","type":""}]},{"body":{"nodeType":"YulBlock","src":"2130:22:8","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2132:16:8"},"nodeType":"YulFunctionCall","src":"2132:18:8"},"nodeType":"YulExpressionStatement","src":"2132:18:8"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2122:2:8"},{"name":"_1","nodeType":"YulIdentifier","src":"2126:2:8"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2119:2:8"},"nodeType":"YulFunctionCall","src":"2119:10:8"},"nodeType":"YulIf","src":"2116:36:8"},{"nodeType":"YulVariableDeclaration","src":"2161:76:8","value":{"kind":"number","nodeType":"YulLiteral","src":"2171:66:8","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2165:2:8","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2246:23:8","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2266:2:8","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2260:5:8"},"nodeType":"YulFunctionCall","src":"2260:9:8"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2250:6:8","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2278:71:8","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2300:6:8"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2324:2:8"},{"kind":"number","nodeType":"YulLiteral","src":"2328:4:8","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2320:3:8"},"nodeType":"YulFunctionCall","src":"2320:13:8"},{"name":"_4","nodeType":"YulIdentifier","src":"2335:2:8"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2316:3:8"},"nodeType":"YulFunctionCall","src":"2316:22:8"},{"kind":"number","nodeType":"YulLiteral","src":"2340:2:8","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2312:3:8"},"nodeType":"YulFunctionCall","src":"2312:31:8"},{"name":"_4","nodeType":"YulIdentifier","src":"2345:2:8"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2308:3:8"},"nodeType":"YulFunctionCall","src":"2308:40:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2296:3:8"},"nodeType":"YulFunctionCall","src":"2296:53:8"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2282:10:8","type":""}]},{"body":{"nodeType":"YulBlock","src":"2408:22:8","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2410:16:8"},"nodeType":"YulFunctionCall","src":"2410:18:8"},"nodeType":"YulExpressionStatement","src":"2410:18:8"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2367:10:8"},{"name":"_1","nodeType":"YulIdentifier","src":"2379:2:8"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2364:2:8"},"nodeType":"YulFunctionCall","src":"2364:18:8"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2387:10:8"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2399:6:8"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2384:2:8"},"nodeType":"YulFunctionCall","src":"2384:22:8"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2361:2:8"},"nodeType":"YulFunctionCall","src":"2361:46:8"},"nodeType":"YulIf","src":"2358:72:8"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2446:2:8","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2450:10:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2439:6:8"},"nodeType":"YulFunctionCall","src":"2439:22:8"},"nodeType":"YulExpressionStatement","src":"2439:22:8"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2477:6:8"},{"name":"_3","nodeType":"YulIdentifier","src":"2485:2:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2470:6:8"},"nodeType":"YulFunctionCall","src":"2470:18:8"},"nodeType":"YulExpressionStatement","src":"2470:18:8"},{"body":{"nodeType":"YulBlock","src":"2536:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2545:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2548:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2538:6:8"},"nodeType":"YulFunctionCall","src":"2538:12:8"},"nodeType":"YulExpressionStatement","src":"2538:12:8"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2511:2:8"},{"name":"_3","nodeType":"YulIdentifier","src":"2515:2:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2507:3:8"},"nodeType":"YulFunctionCall","src":"2507:11:8"},{"kind":"number","nodeType":"YulLiteral","src":"2520:4:8","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2503:3:8"},"nodeType":"YulFunctionCall","src":"2503:22:8"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2527:7:8"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2500:2:8"},"nodeType":"YulFunctionCall","src":"2500:35:8"},"nodeType":"YulIf","src":"2497:55:8"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2578:6:8"},{"kind":"number","nodeType":"YulLiteral","src":"2586:4:8","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2574:3:8"},"nodeType":"YulFunctionCall","src":"2574:17:8"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2597:2:8"},{"kind":"number","nodeType":"YulLiteral","src":"2601:4:8","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2593:3:8"},"nodeType":"YulFunctionCall","src":"2593:13:8"},{"name":"_3","nodeType":"YulIdentifier","src":"2608:2:8"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2561:12:8"},"nodeType":"YulFunctionCall","src":"2561:50:8"},"nodeType":"YulExpressionStatement","src":"2561:50:8"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2635:6:8"},{"name":"_3","nodeType":"YulIdentifier","src":"2643:2:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2631:3:8"},"nodeType":"YulFunctionCall","src":"2631:15:8"},{"kind":"number","nodeType":"YulLiteral","src":"2648:4:8","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2627:3:8"},"nodeType":"YulFunctionCall","src":"2627:26:8"},{"kind":"number","nodeType":"YulLiteral","src":"2655:1:8","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2620:6:8"},"nodeType":"YulFunctionCall","src":"2620:37:8"},"nodeType":"YulExpressionStatement","src":"2620:37:8"},{"nodeType":"YulAssignment","src":"2666:16:8","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2676:6:8"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2666:6:8"}]},{"nodeType":"YulVariableDeclaration","src":"2691:50:8","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2724:9:8"},{"kind":"number","nodeType":"YulLiteral","src":"2735:4:8","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2720:3:8"},"nodeType":"YulFunctionCall","src":"2720:20:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2707:12:8"},"nodeType":"YulFunctionCall","src":"2707:34:8"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"2695:8:8","type":""}]},{"body":{"nodeType":"YulBlock","src":"2770:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2779:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2782:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2772:6:8"},"nodeType":"YulFunctionCall","src":"2772:12:8"},"nodeType":"YulExpressionStatement","src":"2772:12:8"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"2756:8:8"},{"name":"_1","nodeType":"YulIdentifier","src":"2766:2:8"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2753:2:8"},"nodeType":"YulFunctionCall","src":"2753:16:8"},"nodeType":"YulIf","src":"2750:36:8"},{"nodeType":"YulVariableDeclaration","src":"2795:86:8","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2851:9:8"},{"name":"offset_1","nodeType":"YulIdentifier","src":"2862:8:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2847:3:8"},"nodeType":"YulFunctionCall","src":"2847:24:8"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2873:7:8"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"2821:25:8"},"nodeType":"YulFunctionCall","src":"2821:60:8"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"2799:8:8","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"2809:8:8","type":""}]},{"nodeType":"YulAssignment","src":"2890:18:8","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"2900:8:8"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2890:6:8"}]},{"nodeType":"YulAssignment","src":"2917:18:8","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"2927:8:8"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2917:6:8"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1729:9:8","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1740:7:8","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1752:6:8","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1760:6:8","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1768:6:8","type":""}],"src":"1664:1277:8"},{"body":{"nodeType":"YulBlock","src":"3033:161:8","statements":[{"body":{"nodeType":"YulBlock","src":"3079:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3088:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3091:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3081:6:8"},"nodeType":"YulFunctionCall","src":"3081:12:8"},"nodeType":"YulExpressionStatement","src":"3081:12:8"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3054:7:8"},{"name":"headStart","nodeType":"YulIdentifier","src":"3063:9:8"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3050:3:8"},"nodeType":"YulFunctionCall","src":"3050:23:8"},{"kind":"number","nodeType":"YulLiteral","src":"3075:2:8","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3046:3:8"},"nodeType":"YulFunctionCall","src":"3046:32:8"},"nodeType":"YulIf","src":"3043:52:8"},{"nodeType":"YulAssignment","src":"3104:33:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3127:9:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3114:12:8"},"nodeType":"YulFunctionCall","src":"3114:23:8"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3104:6:8"}]},{"nodeType":"YulAssignment","src":"3146:42:8","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3173:9:8"},{"kind":"number","nodeType":"YulLiteral","src":"3184:2:8","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3169:3:8"},"nodeType":"YulFunctionCall","src":"3169:18:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3156:12:8"},"nodeType":"YulFunctionCall","src":"3156:32:8"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3146:6:8"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2991:9:8","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3002:7:8","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3014:6:8","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3022:6:8","type":""}],"src":"2946:248:8"},{"body":{"nodeType":"YulBlock","src":"3300:76:8","statements":[{"nodeType":"YulAssignment","src":"3310:26:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3322:9:8"},{"kind":"number","nodeType":"YulLiteral","src":"3333:2:8","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3318:3:8"},"nodeType":"YulFunctionCall","src":"3318:18:8"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3310:4:8"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3352:9:8"},{"name":"value0","nodeType":"YulIdentifier","src":"3363:6:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3345:6:8"},"nodeType":"YulFunctionCall","src":"3345:25:8"},"nodeType":"YulExpressionStatement","src":"3345:25:8"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3269:9:8","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3280:6:8","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3291:4:8","type":""}],"src":"3199:177:8"},{"body":{"nodeType":"YulBlock","src":"3475:486:8","statements":[{"nodeType":"YulVariableDeclaration","src":"3485:51:8","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"3524:11:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3511:12:8"},"nodeType":"YulFunctionCall","src":"3511:25:8"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"3489:18:8","type":""}]},{"body":{"nodeType":"YulBlock","src":"3684:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3693:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3696:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3686:6:8"},"nodeType":"YulFunctionCall","src":"3686:12:8"},"nodeType":"YulExpressionStatement","src":"3686:12:8"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"3559:18:8"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"3587:12:8"},"nodeType":"YulFunctionCall","src":"3587:14:8"},{"name":"base_ref","nodeType":"YulIdentifier","src":"3603:8:8"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3583:3:8"},"nodeType":"YulFunctionCall","src":"3583:29:8"},{"kind":"number","nodeType":"YulLiteral","src":"3614:66:8","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3579:3:8"},"nodeType":"YulFunctionCall","src":"3579:102:8"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3555:3:8"},"nodeType":"YulFunctionCall","src":"3555:127:8"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3548:6:8"},"nodeType":"YulFunctionCall","src":"3548:135:8"},"nodeType":"YulIf","src":"3545:155:8"},{"nodeType":"YulVariableDeclaration","src":"3709:47:8","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"3727:8:8"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"3737:18:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3723:3:8"},"nodeType":"YulFunctionCall","src":"3723:33:8"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"3713:6:8","type":""}]},{"nodeType":"YulAssignment","src":"3765:30:8","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"3788:6:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3775:12:8"},"nodeType":"YulFunctionCall","src":"3775:20:8"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3765:6:8"}]},{"body":{"nodeType":"YulBlock","src":"3838:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3847:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3850:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3840:6:8"},"nodeType":"YulFunctionCall","src":"3840:12:8"},"nodeType":"YulExpressionStatement","src":"3840:12:8"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3810:6:8"},{"kind":"number","nodeType":"YulLiteral","src":"3818:18:8","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3807:2:8"},"nodeType":"YulFunctionCall","src":"3807:30:8"},"nodeType":"YulIf","src":"3804:50:8"},{"nodeType":"YulAssignment","src":"3863:25:8","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"3875:6:8"},{"kind":"number","nodeType":"YulLiteral","src":"3883:4:8","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3871:3:8"},"nodeType":"YulFunctionCall","src":"3871:17:8"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"3863:4:8"}]},{"body":{"nodeType":"YulBlock","src":"3939:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3948:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3951:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3941:6:8"},"nodeType":"YulFunctionCall","src":"3941:12:8"},"nodeType":"YulExpressionStatement","src":"3941:12:8"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"3904:4:8"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"3914:12:8"},"nodeType":"YulFunctionCall","src":"3914:14:8"},{"name":"length","nodeType":"YulIdentifier","src":"3930:6:8"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3910:3:8"},"nodeType":"YulFunctionCall","src":"3910:27:8"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"3900:3:8"},"nodeType":"YulFunctionCall","src":"3900:38:8"},"nodeType":"YulIf","src":"3897:58:8"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"3432:8:8","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"3442:11:8","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"3458:4:8","type":""},{"name":"length","nodeType":"YulTypedName","src":"3464:6:8","type":""}],"src":"3381:580:8"},{"body":{"nodeType":"YulBlock","src":"3998:152:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4015:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4018:77:8","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4008:6:8"},"nodeType":"YulFunctionCall","src":"4008:88:8"},"nodeType":"YulExpressionStatement","src":"4008:88:8"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4112:1:8","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4115:4:8","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4105:6:8"},"nodeType":"YulFunctionCall","src":"4105:15:8"},"nodeType":"YulExpressionStatement","src":"4105:15:8"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4136:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4139:4:8","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4129:6:8"},"nodeType":"YulFunctionCall","src":"4129:15:8"},"nodeType":"YulExpressionStatement","src":"4129:15:8"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"3966:184:8"},{"body":{"nodeType":"YulBlock","src":"4274:63:8","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4291:3:8"},{"name":"value0","nodeType":"YulIdentifier","src":"4296:6:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4284:6:8"},"nodeType":"YulFunctionCall","src":"4284:19:8"},"nodeType":"YulExpressionStatement","src":"4284:19:8"},{"nodeType":"YulAssignment","src":"4312:19:8","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4323:3:8"},{"kind":"number","nodeType":"YulLiteral","src":"4328:2:8","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4319:3:8"},"nodeType":"YulFunctionCall","src":"4319:12:8"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4312:3:8"}]}]},"name":"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"4250:3:8","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4255:6:8","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4266:3:8","type":""}],"src":"4155:182:8"},{"body":{"nodeType":"YulBlock","src":"4479:275:8","statements":[{"nodeType":"YulVariableDeclaration","src":"4489:27:8","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4509:6:8"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4503:5:8"},"nodeType":"YulFunctionCall","src":"4503:13:8"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4493:6:8","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4525:10:8","value":{"kind":"number","nodeType":"YulLiteral","src":"4534:1:8","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4529:1:8","type":""}]},{"body":{"nodeType":"YulBlock","src":"4596:77:8","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4621:3:8"},{"name":"i","nodeType":"YulIdentifier","src":"4626:1:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4617:3:8"},"nodeType":"YulFunctionCall","src":"4617:11:8"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4644:6:8"},{"name":"i","nodeType":"YulIdentifier","src":"4652:1:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4640:3:8"},"nodeType":"YulFunctionCall","src":"4640:14:8"},{"kind":"number","nodeType":"YulLiteral","src":"4656:4:8","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4636:3:8"},"nodeType":"YulFunctionCall","src":"4636:25:8"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4630:5:8"},"nodeType":"YulFunctionCall","src":"4630:32:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4610:6:8"},"nodeType":"YulFunctionCall","src":"4610:53:8"},"nodeType":"YulExpressionStatement","src":"4610:53:8"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4555:1:8"},{"name":"length","nodeType":"YulIdentifier","src":"4558:6:8"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4552:2:8"},"nodeType":"YulFunctionCall","src":"4552:13:8"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4566:21:8","statements":[{"nodeType":"YulAssignment","src":"4568:17:8","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4577:1:8"},{"kind":"number","nodeType":"YulLiteral","src":"4580:4:8","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4573:3:8"},"nodeType":"YulFunctionCall","src":"4573:12:8"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4568:1:8"}]}]},"pre":{"nodeType":"YulBlock","src":"4548:3:8","statements":[]},"src":"4544:129:8"},{"nodeType":"YulVariableDeclaration","src":"4682:26:8","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4696:3:8"},{"name":"length","nodeType":"YulIdentifier","src":"4701:6:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4692:3:8"},"nodeType":"YulFunctionCall","src":"4692:16:8"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4686:2:8","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4724:2:8"},{"kind":"number","nodeType":"YulLiteral","src":"4728:1:8","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4717:6:8"},"nodeType":"YulFunctionCall","src":"4717:13:8"},"nodeType":"YulExpressionStatement","src":"4717:13:8"},{"nodeType":"YulAssignment","src":"4739:9:8","value":{"name":"_1","nodeType":"YulIdentifier","src":"4746:2:8"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4739:3:8"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"4455:3:8","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4460:6:8","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4471:3:8","type":""}],"src":"4342:412:8"},{"body":{"nodeType":"YulBlock","src":"4791:152:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4808:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4811:77:8","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4801:6:8"},"nodeType":"YulFunctionCall","src":"4801:88:8"},"nodeType":"YulExpressionStatement","src":"4801:88:8"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4905:1:8","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4908:4:8","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4898:6:8"},"nodeType":"YulFunctionCall","src":"4898:15:8"},"nodeType":"YulExpressionStatement","src":"4898:15:8"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4929:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4932:4:8","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4922:6:8"},"nodeType":"YulFunctionCall","src":"4922:15:8"},"nodeType":"YulExpressionStatement","src":"4922:15:8"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"4759:184:8"},{"body":{"nodeType":"YulBlock","src":"4996:77:8","statements":[{"nodeType":"YulAssignment","src":"5006:16:8","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5017:1:8"},{"name":"y","nodeType":"YulIdentifier","src":"5020:1:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5013:3:8"},"nodeType":"YulFunctionCall","src":"5013:9:8"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"5006:3:8"}]},{"body":{"nodeType":"YulBlock","src":"5045:22:8","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5047:16:8"},"nodeType":"YulFunctionCall","src":"5047:18:8"},"nodeType":"YulExpressionStatement","src":"5047:18:8"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5037:1:8"},{"name":"sum","nodeType":"YulIdentifier","src":"5040:3:8"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5034:2:8"},"nodeType":"YulFunctionCall","src":"5034:10:8"},"nodeType":"YulIf","src":"5031:36:8"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4979:1:8","type":""},{"name":"y","nodeType":"YulTypedName","src":"4982:1:8","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"4988:3:8","type":""}],"src":"4948:125:8"},{"body":{"nodeType":"YulBlock","src":"5225:124:8","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5248:3:8"},{"name":"value0","nodeType":"YulIdentifier","src":"5253:6:8"},{"name":"value1","nodeType":"YulIdentifier","src":"5261:6:8"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"5235:12:8"},"nodeType":"YulFunctionCall","src":"5235:33:8"},"nodeType":"YulExpressionStatement","src":"5235:33:8"},{"nodeType":"YulVariableDeclaration","src":"5277:26:8","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5291:3:8"},{"name":"value1","nodeType":"YulIdentifier","src":"5296:6:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5287:3:8"},"nodeType":"YulFunctionCall","src":"5287:16:8"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5281:2:8","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"5319:2:8"},{"kind":"number","nodeType":"YulLiteral","src":"5323:1:8","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5312:6:8"},"nodeType":"YulFunctionCall","src":"5312:13:8"},"nodeType":"YulExpressionStatement","src":"5312:13:8"},{"nodeType":"YulAssignment","src":"5334:9:8","value":{"name":"_1","nodeType":"YulIdentifier","src":"5341:2:8"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5334:3:8"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"5193:3:8","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5198:6:8","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5206:6:8","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5217:3:8","type":""}],"src":"5078:271:8"},{"body":{"nodeType":"YulBlock","src":"5435:103:8","statements":[{"body":{"nodeType":"YulBlock","src":"5481:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5490:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5493:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5483:6:8"},"nodeType":"YulFunctionCall","src":"5483:12:8"},"nodeType":"YulExpressionStatement","src":"5483:12:8"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5456:7:8"},{"name":"headStart","nodeType":"YulIdentifier","src":"5465:9:8"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5452:3:8"},"nodeType":"YulFunctionCall","src":"5452:23:8"},{"kind":"number","nodeType":"YulLiteral","src":"5477:2:8","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5448:3:8"},"nodeType":"YulFunctionCall","src":"5448:32:8"},"nodeType":"YulIf","src":"5445:52:8"},{"nodeType":"YulAssignment","src":"5506:26:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5522:9:8"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5516:5:8"},"nodeType":"YulFunctionCall","src":"5516:16:8"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5506:6:8"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5401:9:8","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5412:7:8","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5424:6:8","type":""}],"src":"5354:184:8"},{"body":{"nodeType":"YulBlock","src":"5575:152:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5592:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5595:77:8","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5585:6:8"},"nodeType":"YulFunctionCall","src":"5585:88:8"},"nodeType":"YulExpressionStatement","src":"5585:88:8"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5689:1:8","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5692:4:8","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5682:6:8"},"nodeType":"YulFunctionCall","src":"5682:15:8"},"nodeType":"YulExpressionStatement","src":"5682:15:8"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5713:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5716:4:8","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5706:6:8"},"nodeType":"YulFunctionCall","src":"5706:15:8"},"nodeType":"YulExpressionStatement","src":"5706:15:8"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"5543:184:8"},{"body":{"nodeType":"YulBlock","src":"5781:79:8","statements":[{"nodeType":"YulAssignment","src":"5791:17:8","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5803:1:8"},{"name":"y","nodeType":"YulIdentifier","src":"5806:1:8"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5799:3:8"},"nodeType":"YulFunctionCall","src":"5799:9:8"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"5791:4:8"}]},{"body":{"nodeType":"YulBlock","src":"5832:22:8","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5834:16:8"},"nodeType":"YulFunctionCall","src":"5834:18:8"},"nodeType":"YulExpressionStatement","src":"5834:18:8"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"5823:4:8"},{"name":"x","nodeType":"YulIdentifier","src":"5829:1:8"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5820:2:8"},"nodeType":"YulFunctionCall","src":"5820:11:8"},"nodeType":"YulIf","src":"5817:37:8"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5763:1:8","type":""},{"name":"y","nodeType":"YulTypedName","src":"5766:1:8","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"5772:4:8","type":""}],"src":"5732:128:8"},{"body":{"nodeType":"YulBlock","src":"5911:228:8","statements":[{"body":{"nodeType":"YulBlock","src":"5942:168:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5963:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5966:77:8","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5956:6:8"},"nodeType":"YulFunctionCall","src":"5956:88:8"},"nodeType":"YulExpressionStatement","src":"5956:88:8"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6064:1:8","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6067:4:8","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6057:6:8"},"nodeType":"YulFunctionCall","src":"6057:15:8"},"nodeType":"YulExpressionStatement","src":"6057:15:8"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6092:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6095:4:8","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6085:6:8"},"nodeType":"YulFunctionCall","src":"6085:15:8"},"nodeType":"YulExpressionStatement","src":"6085:15:8"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"5931:1:8"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5924:6:8"},"nodeType":"YulFunctionCall","src":"5924:9:8"},"nodeType":"YulIf","src":"5921:189:8"},{"nodeType":"YulAssignment","src":"6119:14:8","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6128:1:8"},{"name":"y","nodeType":"YulIdentifier","src":"6131:1:8"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"6124:3:8"},"nodeType":"YulFunctionCall","src":"6124:9:8"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"6119:1:8"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5896:1:8","type":""},{"name":"y","nodeType":"YulTypedName","src":"5899:1:8","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"5905:1:8","type":""}],"src":"5865:274:8"},{"body":{"nodeType":"YulBlock","src":"6196:116:8","statements":[{"nodeType":"YulAssignment","src":"6206:20:8","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6221:1:8"},{"name":"y","nodeType":"YulIdentifier","src":"6224:1:8"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"6217:3:8"},"nodeType":"YulFunctionCall","src":"6217:9:8"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"6206:7:8"}]},{"body":{"nodeType":"YulBlock","src":"6284:22:8","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6286:16:8"},"nodeType":"YulFunctionCall","src":"6286:18:8"},"nodeType":"YulExpressionStatement","src":"6286:18:8"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6255:1:8"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6248:6:8"},"nodeType":"YulFunctionCall","src":"6248:9:8"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"6262:1:8"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"6269:7:8"},{"name":"x","nodeType":"YulIdentifier","src":"6278:1:8"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"6265:3:8"},"nodeType":"YulFunctionCall","src":"6265:15:8"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6259:2:8"},"nodeType":"YulFunctionCall","src":"6259:22:8"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6245:2:8"},"nodeType":"YulFunctionCall","src":"6245:37:8"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6238:6:8"},"nodeType":"YulFunctionCall","src":"6238:45:8"},"nodeType":"YulIf","src":"6235:71:8"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6175:1:8","type":""},{"name":"y","nodeType":"YulTypedName","src":"6178:1:8","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"6184:7:8","type":""}],"src":"6144:168:8"}]},"contents":"{\n { }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_bytes32t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value1_1, value2_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value1 := value1_1\n value2 := value2_1\n }\n function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff00000000000000000000000000000000000000000000000000000000))\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_tuple_t_bytes_memory_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := calldataload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 0x20), dataEnd) { revert(0, 0) }\n calldatacopy(add(memPtr, 0x20), add(_2, 0x20), _3)\n mstore(add(add(memPtr, _3), 0x20), 0)\n value0 := memPtr\n let offset_1 := calldataload(add(headStart, 0x20))\n if gt(offset_1, _1) { revert(0, 0) }\n let value1_1, value2_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n value1 := value1_1\n value2 := value2_1\n }\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n {\n let rel_offset_of_tail := calldataload(ptr_to_tail)\n if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1))) { revert(0, 0) }\n let addr_1 := add(base_ref, rel_offset_of_tail)\n length := calldataload(addr_1)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n addr := add(addr_1, 0x20)\n if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n mstore(pos, value0)\n end := add(pos, 32)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n let i := 0\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n }\n let _1 := add(pos, length)\n mstore(_1, 0)\n end := _1\n }\n function panic_error_0x11()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n calldatacopy(pos, value0, value1)\n let _1 := add(pos, value1)\n mstore(_1, 0)\n end := _1\n }\n function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function panic_error_0x12()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x) { panic_error_0x11() }\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n}","id":8,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100725760003560e01c806320c13b0b1161005057806320c13b0b146100f4578063a56dfe4a14610107578063e4a301161461011057600080fd5b80630c55699c14610077578063158ef93e146100935780631626ba7e146100b0575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6000546100a09060ff1681565b604051901515815260200161008a565b6100c36100be366004611cb9565b610125565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161008a565b6100c3610102366004611d34565b61017c565b61008060025481565b61012361011e366004611e20565b6101b2565b005b60006101538460405160200161013d91815260200190565b6040516020818303038152906040528484610226565b507f1626ba7e000000000000000000000000000000000000000000000000000000009392505050565b6000610189848484610226565b507f20c13b0b000000000000000000000000000000000000000000000000000000009392505050565b60005460ff16156101ef576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591909155600255565b8251602084012082600061028061023d8380611e42565b7f010000000000000000000000000000000000000000000000000000000000000061026b6020870187611e42565b888860400135896060016001546002546102c1565b9050806102b9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000806102d48c8c8c8c8c8c8c8c6102f5565b905060006102e482878787610598565b9d9c50505050505050505050505050565b60007fff000000000000000000000000000000000000000000000000000000000000008716878a8a602081811061032e5761032e611ea7565b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610392576040517ffc93479200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006103be856040516020016103aa91815260200190565b6040516020818303038152906040526106f7565b90506000815167ffffffffffffffff8111156103dc576103dc611d05565b6040519080825280601f01601f191660200182016040528015610406576020820181803683370190505b50905080518589016020830137600081516020830120905080836040516020016104309190611ed6565b604051602081830303815290604052805190602001201461047d576040517febab5d2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000915061048f9050896020611f34565b67ffffffffffffffff8111156104a7576104a7611d05565b6040519080825280601f01601f1916602001820160405280156104d1576020820181803683370190505b509050888a60208301376000600288886040516104ef929190611f47565b602060405180830381855afa15801561050c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061052f9190611f57565b90508060208b018301526002826040516105499190611ed6565b602060405180830381855afa158015610566573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105899190611f57565b9b9a5050505050505050505050565b6000833560208501358115806105ce57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b806105d7575080155b8061060257507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518110155b15610612576000925050506106ef565b61061c8585610866565b61062b576000925050506106ef565b6000610636826109e0565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828a09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518386099050600061069689898585610a64565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516106e3877fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551611f70565b82081596505050505050505b949350505050565b6060815160000361071657505060408051602081019091526000815290565b6000604051806060016040528060408152602001611fd660409139905060006003845160026107459190611f34565b61074f9190611f83565b61075a906004611fbe565b67ffffffffffffffff81111561077257610772611d05565b6040519080825280601f01601f19166020018201604052801561079c576020820181803683370190505b509050600182016020820185865187015b80821015610808576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506107ad565b5050600386510660018114610824576002811461082f57610836565b600282039150610836565b6001820391505b508290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018252509392505050565b600082158015610874575081155b8061089e57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83145b806108c857507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82145b156108d5575060006109da565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8208919091149150505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa610a5d57600080fd5b5192915050565b600080808060ff818088158015610a79575087155b15610a8d57600096505050505050506106ef565b610ad97f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611561565b909250905081158015610aea575080155b15610b3c577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a089850600097505b600189841c16600189851c1660011b015b80610b6f5760018403935060018a851c1660018a861c1660011b019050610b4d565b50600189841c16600189851c1660011b01955060018603610bd1577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603610be0578a96508993505b60038603610bef578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11156114b1577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080610eda57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff039750505050506114a6565b60018103610f29577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610f38578e93508d92505b60038103610f47578593508492505b89610f6057509198506001975087965094506114a69050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d88090893508061129f578361129f577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a87098508985050505050506114a6565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250610bfe565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61152c57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099c9b505050505050505050505050565b6000808080866115785785859350935050506115e6565b8461158a5787879350935050506115e6565b858814801561159857508487145b156115b9576115aa88886001806115ef565b929a50909850925090506115d3565b6115c888886001808a8a611879565b929a50909850925090505b6115df88888484611b3e565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361189857508492508391506001905080611b31565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b6000806000611b4c84611bf3565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa610a5d57600080fd5b60008083601f840112611c8257600080fd5b50813567ffffffffffffffff811115611c9a57600080fd5b602083019150836020828501011115611cb257600080fd5b9250929050565b600080600060408486031215611cce57600080fd5b83359250602084013567ffffffffffffffff811115611cec57600080fd5b611cf886828701611c70565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060408486031215611d4957600080fd5b833567ffffffffffffffff80821115611d6157600080fd5b818601915086601f830112611d7557600080fd5b813581811115611d8757611d87611d05565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611dcd57611dcd611d05565b81604052828152896020848701011115611de657600080fd5b826020860160208301376000602084830101528097505050506020860135915080821115611e1357600080fd5b50611cf886828701611c70565b60008060408385031215611e3357600080fd5b50508035926020909101359150565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611e7757600080fd5b83018035915067ffffffffffffffff821115611e9257600080fd5b602001915036819003821315611cb257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000825160005b81811015611ef75760208186018101518583015201611edd565b506000920191825250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156109da576109da611f05565b8183823760009101908152919050565b600060208284031215611f6957600080fd5b5051919050565b818103818111156109da576109da611f05565b600082611fb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820281158282048414176109da576109da611f0556fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa264697066735822122010b19bcb302b393f0f07ede9ec3810838497a4931544263dc93726e735cb3b0e64736f6c63430008140033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x72 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x20C13B0B GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x20C13B0B EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xA56DFE4A EQ PUSH2 0x107 JUMPI DUP1 PUSH4 0xE4A30116 EQ PUSH2 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC55699C EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0x158EF93E EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0xB0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x80 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH2 0xA0 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A JUMP JUMPDEST PUSH2 0xC3 PUSH2 0xBE CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB9 JUMP JUMPDEST PUSH2 0x125 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A JUMP JUMPDEST PUSH2 0xC3 PUSH2 0x102 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D34 JUMP JUMPDEST PUSH2 0x17C JUMP JUMPDEST PUSH2 0x80 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x123 PUSH2 0x11E CALLDATASIZE PUSH1 0x4 PUSH2 0x1E20 JUMP JUMPDEST PUSH2 0x1B2 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH2 0x153 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x13D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP5 DUP5 PUSH2 0x226 JUMP JUMPDEST POP PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x189 DUP5 DUP5 DUP5 PUSH2 0x226 JUMP JUMPDEST POP PUSH32 0x20C13B0B00000000000000000000000000000000000000000000000000000000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1EF JUMPI PUSH1 0x40 MLOAD PUSH32 0xDC149F000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x2 SSTORE JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP5 ADD KECCAK256 DUP3 PUSH1 0x0 PUSH2 0x280 PUSH2 0x23D DUP4 DUP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 PUSH2 0x26B PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x1E42 JUMP JUMPDEST DUP9 DUP9 PUSH1 0x40 ADD CALLDATALOAD DUP10 PUSH1 0x60 ADD PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD PUSH2 0x2C1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x2B9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8BAA579F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2D4 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH2 0x2F5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2E4 DUP3 DUP8 DUP8 DUP8 PUSH2 0x598 JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 DUP8 AND DUP8 DUP11 DUP11 PUSH1 0x20 DUP2 DUP2 LT PUSH2 0x32E JUMPI PUSH2 0x32E PUSH2 0x1EA7 JUMP JUMPDEST SWAP1 POP ADD CALLDATALOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL AND PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0xFC93479200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3BE DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3AA SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x6F7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3DC JUMPI PUSH2 0x3DC PUSH2 0x1D05 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP1 MLOAD DUP6 DUP10 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 DUP4 ADD KECCAK256 SWAP1 POP DUP1 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x430 SWAP2 SWAP1 PUSH2 0x1ED6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x47D JUMPI PUSH1 0x40 MLOAD PUSH32 0xEBAB5D2900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP2 POP PUSH2 0x48F SWAP1 POP DUP10 PUSH1 0x20 PUSH2 0x1F34 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4A7 JUMPI PUSH2 0x4A7 PUSH2 0x1D05 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP11 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x2 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x4EF SWAP3 SWAP2 SWAP1 PUSH2 0x1F47 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x50C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x52F SWAP2 SWAP1 PUSH2 0x1F57 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP12 ADD DUP4 ADD MSTORE PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD PUSH2 0x549 SWAP2 SWAP1 PUSH2 0x1ED6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x566 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x589 SWAP2 SWAP1 PUSH2 0x1F57 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 CALLDATALOAD PUSH1 0x20 DUP6 ADD CALLDATALOAD DUP2 ISZERO DUP1 PUSH2 0x5CE JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 LT ISZERO JUMPDEST DUP1 PUSH2 0x5D7 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x602 JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP2 LT ISZERO JUMPDEST ISZERO PUSH2 0x612 JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x6EF JUMP JUMPDEST PUSH2 0x61C DUP6 DUP6 PUSH2 0x866 JUMP JUMPDEST PUSH2 0x62B JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x6EF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x636 DUP3 PUSH2 0x9E0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 DUP11 MULMOD SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP4 DUP7 MULMOD SWAP1 POP PUSH1 0x0 PUSH2 0x696 DUP10 DUP10 DUP6 DUP6 PUSH2 0xA64 JUMP JUMPDEST SWAP1 POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH2 0x6E3 DUP8 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH2 0x1F70 JUMP JUMPDEST DUP3 ADDMOD ISZERO SWAP7 POP POP POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD PUSH1 0x0 SUB PUSH2 0x716 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FD6 PUSH1 0x40 SWAP2 CODECOPY SWAP1 POP PUSH1 0x0 PUSH1 0x3 DUP5 MLOAD PUSH1 0x2 PUSH2 0x745 SWAP2 SWAP1 PUSH2 0x1F34 JUMP JUMPDEST PUSH2 0x74F SWAP2 SWAP1 PUSH2 0x1F83 JUMP JUMPDEST PUSH2 0x75A SWAP1 PUSH1 0x4 PUSH2 0x1FBE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x772 JUMPI PUSH2 0x772 PUSH2 0x1D05 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x79C JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x1 DUP3 ADD PUSH1 0x20 DUP3 ADD DUP6 DUP7 MLOAD DUP8 ADD JUMPDEST DUP1 DUP3 LT ISZERO PUSH2 0x808 JUMPI PUSH1 0x3 DUP3 ADD SWAP2 POP DUP2 MLOAD PUSH1 0x3F DUP2 PUSH1 0x12 SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 PUSH1 0xC SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 PUSH1 0x6 SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 AND DUP6 ADD MLOAD DUP5 MSTORE8 POP PUSH1 0x1 DUP4 ADD SWAP3 POP PUSH2 0x7AD JUMP JUMPDEST POP POP PUSH1 0x3 DUP7 MLOAD MOD PUSH1 0x1 DUP2 EQ PUSH2 0x824 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x82F JUMPI PUSH2 0x836 JUMP JUMPDEST PUSH1 0x2 DUP3 SUB SWAP2 POP PUSH2 0x836 JUMP JUMPDEST PUSH1 0x1 DUP3 SUB SWAP2 POP JUMPDEST POP DUP3 SWAP1 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD DUP3 MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO PUSH2 0x874 JUMPI POP DUP2 ISZERO JUMPDEST DUP1 PUSH2 0x89E JUMPI POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 EQ JUMPDEST DUP1 PUSH2 0x8C8 JUMPI POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ JUMPDEST ISZERO PUSH2 0x8D5 JUMPI POP PUSH1 0x0 PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC DUP8 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP11 MULMOD MULMOD ADDMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B DUP3 ADDMOD SWAP2 SWAP1 SWAP2 EQ SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0xA5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH1 0xFF DUP2 DUP1 DUP9 ISZERO DUP1 ISZERO PUSH2 0xA79 JUMPI POP DUP8 ISZERO JUMPDEST ISZERO PUSH2 0xA8D JUMPI PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x6EF JUMP JUMPDEST PUSH2 0xAD9 PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 DUP14 DUP14 PUSH2 0x1561 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xAEA JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xB3C JUMPI PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP9 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 SUB DUP11 ADDMOD SWAP9 POP PUSH1 0x0 SWAP8 POP JUMPDEST PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD JUMPDEST DUP1 PUSH2 0xB6F JUMPI PUSH1 0x1 DUP5 SUB SWAP4 POP PUSH1 0x1 DUP11 DUP6 SHR AND PUSH1 0x1 DUP11 DUP7 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP PUSH2 0xB4D JUMP JUMPDEST POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD SWAP6 POP PUSH1 0x1 DUP7 SUB PUSH2 0xBD1 JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP7 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP4 POP JUMPDEST PUSH1 0x2 DUP7 SUB PUSH2 0xBE0 JUMPI DUP11 SWAP7 POP DUP10 SWAP4 POP JUMPDEST PUSH1 0x3 DUP7 SUB PUSH2 0xBEF JUMPI DUP2 SWAP7 POP DUP1 SWAP4 POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH1 0x1 SWAP6 POP PUSH1 0x1 SWAP5 POP JUMPDEST DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF GT ISZERO PUSH2 0x14B1 JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH1 0x2 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP11 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP5 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP15 ADDMOD MULMOD PUSH1 0x3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP6 MULMOD SWAP9 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP5 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD ADDMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD DUP3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP8 MULMOD ADDMOD SWAP8 POP PUSH1 0x1 DUP14 DUP9 SHR AND PUSH1 0x1 DUP14 DUP10 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP DUP1 PUSH2 0xEDA JUMPI DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB SWAP8 POP POP POP POP POP PUSH2 0x14A6 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0xF29 JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP4 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP3 POP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0xF38 JUMPI DUP15 SWAP4 POP DUP14 SWAP3 POP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0xF47 JUMPI DUP6 SWAP4 POP DUP5 SWAP3 POP JUMPDEST DUP10 PUSH2 0xF60 JUMPI POP SWAP2 SWAP9 POP PUSH1 0x1 SWAP8 POP DUP8 SWAP7 POP SWAP5 POP PUSH2 0x14A6 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP7 MULMOD ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP9 MULMOD ADDMOD SWAP4 POP DUP1 PUSH2 0x129F JUMPI DUP4 PUSH2 0x129F JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP7 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP14 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP15 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP16 ADDMOD MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH1 0x3 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP7 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP6 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD ADDMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP6 ADDMOD DUP4 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 DUP8 MULMOD DUP6 ADDMOD SWAP9 POP POP POP POP POP POP PUSH2 0x14A6 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP4 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP14 MULMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP13 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP15 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP9 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 DUP14 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP7 ADDMOD MULMOD ADDMOD SWAP11 POP POP POP POP DUP1 SWAP11 POP POP POP POP POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH2 0xBFE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x152C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD DUP10 MULMOD SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP7 PUSH2 0x1578 JUMPI DUP6 DUP6 SWAP4 POP SWAP4 POP POP POP PUSH2 0x15E6 JUMP JUMPDEST DUP5 PUSH2 0x158A JUMPI DUP8 DUP8 SWAP4 POP SWAP4 POP POP POP PUSH2 0x15E6 JUMP JUMPDEST DUP6 DUP9 EQ DUP1 ISZERO PUSH2 0x1598 JUMPI POP DUP5 DUP8 EQ JUMPDEST ISZERO PUSH2 0x15B9 JUMPI PUSH2 0x15AA DUP9 DUP9 PUSH1 0x1 DUP1 PUSH2 0x15EF JUMP JUMPDEST SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP3 POP SWAP1 POP PUSH2 0x15D3 JUMP JUMPDEST PUSH2 0x15C8 DUP9 DUP9 PUSH1 0x1 DUP1 DUP11 DUP11 PUSH2 0x1879 JUMP JUMPDEST SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP3 POP SWAP1 POP JUMPDEST PUSH2 0x15DF DUP9 DUP9 DUP5 DUP5 PUSH2 0x1B3E JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH1 0x2 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP10 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP6 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP4 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP12 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP13 ADDMOD MULMOD PUSH1 0x3 MULMOD SWAP6 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP10 MULMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP4 ADDMOD DUP8 MULMOD SWAP8 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP5 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 DUP6 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP10 ADDMOD SWAP3 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 PUSH1 0x0 SUB PUSH2 0x1898 JUMPI POP DUP5 SWAP3 POP DUP4 SWAP2 POP PUSH1 0x1 SWAP1 POP DUP1 PUSH2 0x1B31 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 SUB SWAP9 DUP10 DUP2 DUP10 DUP9 MULMOD ADDMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP10 MULMOD ADDMOD SWAP6 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP8 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP6 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP10 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP9 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP12 MULMOD SWAP8 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP11 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 DUP12 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD MULMOD ADDMOD SWAP3 POP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1B4C DUP5 PUSH2 0x1BF3 JUMP JUMPDEST SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP8 MULMOD SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP8 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP10 MULMOD SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0xA5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1C82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1C9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1CB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1CCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1CEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1CF8 DUP7 DUP3 DUP8 ADD PUSH2 0x1C70 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1D49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1D87 JUMPI PUSH2 0x1D87 PUSH2 0x1D05 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x1DCD JUMPI PUSH2 0x1DCD PUSH2 0x1D05 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x1DE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP8 POP POP POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1E13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CF8 DUP7 DUP3 DUP8 ADD PUSH2 0x1C70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x1E77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x1CB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1EF7 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x1EDD JUMP JUMPDEST POP PUSH1 0x0 SWAP3 ADD SWAP2 DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x9DA JUMPI PUSH2 0x9DA PUSH2 0x1F05 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x9DA JUMPI PUSH2 0x9DA PUSH2 0x1F05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1FB9 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x9DA JUMPI PUSH2 0x9DA PUSH2 0x1F05 JUMP INVALID COINBASE TIMESTAMP NUMBER PREVRANDAO GASLIMIT CHAINID SELFBALANCE BASEFEE 0x49 0x4A 0x4B 0x4C 0x4D 0x4E 0x4F POP MLOAD MSTORE MSTORE8 SLOAD SSTORE JUMP JUMPI PC MSIZE GAS PUSH2 0x6263 PUSH5 0x6566676869 PUSH11 0x6B6C6D6E6F707172737475 PUSH23 0x7778797A303132333435363738392D5FA2646970667358 0x22 SLT KECCAK256 LT 0xB1 SWAP12 0xCB ADDRESS 0x2B CODECOPY EXTCODEHASH 0xF SMOD 0xED 0xE9 0xEC CODESIZE LT DUP4 DUP5 SWAP8 LOG4 SWAP4 ISZERO PREVRANDAO 0x26 RETURNDATASIZE 0xC9 CALLDATACOPY 0x26 0xE7 CALLDATALOAD 0xCB EXTCODESIZE 0xE PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"330:3371:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;721:16;;;;;;;;;160:25:8;;;148:2;133:18;721:16:5;;;;;;;;630:23;;;;;;;;;;;;361:14:8;;354:22;336:41;;324:2;309:18;630:23:5;196:187:8;1372:189:5;;;;;;:::i;:::-;;:::i;:::-;;;1396:66:8;1384:79;;;1366:98;;1354:2;1339:18;1372:189:5;1222:248:8;1896:186:5;;;;;;:::i;:::-;;:::i;805:16::-;;;;;;3525:174;;;;;;:::i;:::-;;:::i;:::-;;1372:189;1461:6;1479:40;1500:5;1489:17;;;;;;160:25:8;;148:2;133:18;;14:177;1489:17:5;;;;;;;;;;;;;1508:10;;1479:9;:40::i;:::-;-1:-1:-1;1536:18:5;1372:189;;;;;:::o;1896:186::-;1990:6;2008:28;2018:5;2025:10;;2008:9;:28::i;:::-;-1:-1:-1;2053:22:5;1896:186;;;;;:::o;3525:174::-;3592:11;;;;3588:44;;;3612:20;;;;;;;;;;;;;;3588:44;3642:11;:18;;;;3656:4;3642:18;;;;;;3670:6;;;;3686:1;:6;3525:174::o;2355:904::-;2459:15;;;;;;2882:17;2443:13;2932:272;2973:34;2882:17;;2973:34;:::i;:::-;2932:272;3039:27;;;;:16;:27;:::i;:::-;3080:5;3099:16;:32;;;3145:16;:19;;3178:1;;3193;;2932:27;:272::i;:::-;2919:285;;3220:5;3215:37;;3234:18;;;;;;;;;;;;;;3215:37;2433:826;;;2355:904;;;:::o;4158:710:0:-;4480:4;4589:15;4607:156;4649:17;;4668:25;4695:10;;4707:15;4724:25;4751:2;4607:28;:156::i;:::-;4589:174;;4774:11;4788:49;4817:7;4826:2;4830;4834;4788:28;:49::i;:::-;4774:63;4158:710;-1:-1:-1;;;;;;;;;;;;;4158:710:0:o;1590:2081::-;1874:14;2010:80;;;2065:25;2011:17;;2029:2;2011:21;;;;;;;:::i;:::-;;;;;;;;;:49;2010:80;;;;2006:152;;2117:26;;;;;;;;;;;;;;2006:152;2355:30;2388:51;2422:15;2405:33;;;;;;4284:19:8;;4328:2;4319:12;;4155:182;2405:33:0;;;;;;;;;;;;;2388:16;:51::i;:::-;2355:84;;2453:31;2516:16;2510:30;2487:63;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2487:63:0;;2453:97;;2752:18;2746:25;2698;2679:17;2675:49;2650:2;2630:18;2626:27;2592:197;2817:16;2983:18;2977:25;2972:2;2952:18;2948:27;2938:65;2926:77;;3091:8;3068:16;3045:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;3035:52;;;;;;:64;3031:129;;3126:19;;;;;;;;;;;;;;3031:129;-1:-1:-1;3284:23:0;;-1:-1:-1;3320:29:0;;-1:-1:-1;3320:17:0;3347:2;3320:29;:::i;:::-;3310:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3310:40:0;;3284:66;;3444:24;3418;3413:2;3401:10;3397:19;3384:85;3489:12;3504:18;3511:10;;3504:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3489:33;;3614:4;3608:2;3582:24;3578:33;3566:10;3562:50;3555:64;3646:18;3653:10;3646:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3639:25;1590:2081;-1:-1:-1;;;;;;;;;;;1590:2081:0:o;1466:760:2:-;1576:4;1604:5;;;1631;;;1650:6;;;:32;;;2162:66:3;1660:1:2;:22;;1650:32;:42;;;-1:-1:-1;1686:6:2;;1650:42;:68;;;;2162:66:3;1696:1:2;:22;;1650:68;1646:111;;;1741:5;1734:12;;;;;;1646:111;1771:39;1803:2;1807;1771:31;:39::i;:::-;1766:83;;1833:5;1826:12;;;;;;1766:83;1859:12;1874:30;1902:1;1874:27;:30::i;:::-;1859:45;-1:-1:-1;1915:16:2;2162:66:3;1959:4:2;1949:7;1934:49;1915:68;-1:-1:-1;1993:16:2;2162:66:3;2022:4:2;2019:1;2012:34;1993:53;;2056:10;2082:64;2119:2;2123;2127:8;2137;2082:36;:64::i;:::-;2077:69;-1:-1:-1;2162:66:3;2171:3:2;2173:1;2162:66:3;2171:3:2;:::i;:::-;2167:2;2160:18;2212:7;;-1:-1:-1;;;;;;;1466:760:2;;;;;;;:::o;376:1914:4:-;434:13;463:4;:11;478:1;463:16;459:31;;-1:-1:-1;;481:9:4;;;;;;;;;-1:-1:-1;481:9:4;;;376:1914::o;459:31::-;539:19;561:14;;;;;;;;;;;;;;;;;539:36;;586:20;645:1;626:4;:11;640:1;626:15;;;;:::i;:::-;625:21;;;;:::i;:::-;620:27;;:1;:27;:::i;:::-;609:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;609:39:4;;586:62;;751:1;744:5;740:13;795:2;787:6;783:15;849:4;900;894:11;888:4;884:22;812:940;933:6;924:7;921:19;812:940;;;1000:1;991:7;987:15;976:26;;1038:7;1032:14;1164:4;1156:5;1152:2;1148:14;1144:25;1134:8;1130:40;1124:47;1093:9;1064:125;1234:1;1223:9;1219:17;1206:30;;1354:4;1346:5;1342:2;1338:14;1334:25;1324:8;1320:40;1314:47;1283:9;1254:125;1424:1;1413:9;1409:17;1396:30;;1543:4;1535:5;1532:1;1528:13;1524:24;1514:8;1510:39;1504:46;1473:9;1444:124;1613:1;1602:9;1598:17;1585:30;;1683:4;1676:5;1672:16;1662:8;1658:31;1652:38;1641:9;1633:58;;1736:1;1725:9;1721:17;1708:30;;812:940;;;816:104;;1841:1;1834:4;1828:11;1824:19;1861:1;1856:121;;;;1995:1;1990:126;;;;1817:299;;1856:121;1961:1;1950:9;1946:17;1933:30;;1856:121;;1990:126;2100:1;2089:9;2085:17;2072:30;;1817:299;-1:-1:-1;2216:31:4;;;;;2201:47;;-1:-1:-1;2216:31:4;2235:6;-1:-1:-1;;;376:1914:4:o;12684:440:3:-;12754:4;12777:6;;12776:19;;;;-1:-1:-1;12788:6:3;;12776:19;12775:31;;;;1531:66;12800:1;:6;12775:31;:43;;;;1531:66;12812:1;:6;12775:43;12770:87;;;-1:-1:-1;12841:5:3;12834:12;;12770:87;12890:11;1531:66;12914:1;12911;12904:15;12890:29;-1:-1:-1;12940:11:3;1531:66;;1666;12999:1;12992:15;1531:66;12985:1;1531:66;12978:1;12975;12968:15;12961:29;12954:57;12940:71;-1:-1:-1;1531:66:3;1802;13048:3;13041:17;13097:10;;;;;-1:-1:-1;;12684:440:3;;;;;:::o;3154:734::-;3209:14;3279:4;3273:11;3390:4;3381:7;3374:21;3435:4;3428;3419:7;3415:18;3408:32;3480:4;3473;3464:7;3460:18;3453:32;3584:1;3577:4;3568:7;3564:18;3557:29;3626:11;3619:4;3610:7;3606:18;3599:39;3678:1;3671:4;3662:7;3658:18;3651:29;3812:4;3803:7;3797:4;3788:7;3782:4;3778:1;3774:6;3763:54;3753:82;;3831:1;3828;3821:12;3753:82;3858:14;;3154:734;-1:-1:-1;;3154:734:3:o;13897:6526::-;14079:9;;;;14176:3;14079:9;;14258:13;;:30;;;;-1:-1:-1;14275:13:3;;14258:30;14254:44;;;14297:1;14290:8;;;;;;;;;;14254:44;14324:25;1938:66;2032;14342:2;14346;14324:9;:25::i;:::-;14313:36;;-1:-1:-1;14313:36:3;-1:-1:-1;14368:5:3;;14367:16;;;;-1:-1:-1;14377:5:3;;14367:16;14364:150;;;2162:66;14458:8;2162:66;14456:10;14446:8;14439:31;14430:40;;14497:1;14488:10;;14364:150;14638:1;14627:8;14620:5;14616:20;14612:28;14607:1;14596:8;14589:5;14585:20;14581:28;14578:1;14574:36;14570:71;14554:263;14647:2;14554:263;;14696:1;14689:5;14685:13;14676:22;;14793:1;14782:8;14775:5;14771:20;14767:28;14762:1;14751:8;14744:5;14740:20;14736:28;14733:1;14729:36;14725:71;14719:77;;14554:263;;;14558:85;14908:1;14897:8;14890:5;14886:20;14882:28;14877:1;14866:8;14859:5;14855:20;14851:28;14848:1;14844:36;14840:71;14834:77;;14939:1;14935:2;14932:9;14929:88;;14969:2;14964:7;;14997:2;14992:7;;14929:88;15044:1;15040:2;15037:9;15034:88;;15074:2;15069:7;;15102:2;15097:7;;15034:88;15149:1;15145:2;15142:9;15139:88;;15179:2;15174:7;;15207:2;15202:7;;15139:88;15265:1;15258:5;15254:13;15245:22;;15290:1;15284:7;;15315:1;15308:8;;15334:4025;15353:5;15344:7;15341:18;15334:4025;;;15472:1;15469;15466;15459:15;15539:1;15535:2;15531;15524:17;15595:1;15591:2;15588:1;15581:16;15651:1;15647:2;15643;15636:17;15630:23;;15757:1;15753;15749;15745:2;15742:1;15735:16;15731:1;15726:2;15723:1;15719:10;15716:1;15709:24;15702:53;15699:1;15692:67;15827:1;15822:3;15818:2;15811:18;15804:25;;15885:1;15881:2;15877;15870:17;15864:23;;15984:1;15980;15976:2;15967:7;15960:22;15956:1;15952:2;15948;15941:17;15934:52;15929:57;;16062:1;16058;16053:2;16050:1;16046:10;16043:1;16036:24;16032:2;16025:39;16019:45;;16138:1;16134:2;16130:1;16127;16123:2;16116:16;16109:31;16104:36;;16367:1;16356:8;16349:5;16345:20;16341:28;16336:1;16325:8;16318:5;16314:20;16310:28;16307:1;16303:36;16299:71;16293:77;;16406:2;16396:148;;16452:1;16449;16445:9;16440:14;;16510:8;;;;;;16396:148;16592:1;16588:2;16585:9;16582:114;;16631:2;16625:8;;16668:2;16662:8;;16582:114;16731:1;16727:2;16724:9;16721:114;;16770:2;16764:8;;16807:2;16801:8;;16721:114;16870:1;16866:2;16863:9;16860:114;;16909:2;16903:8;;16946:2;16940:8;;16860:114;17009:2;16999:223;;-1:-1:-1;17048:2:3;;-1:-1:-1;17121:1:3;;-1:-1:-1;17121:1:3;;-1:-1:-1;17084:2:3;-1:-1:-1;17188:8:3;;-1:-1:-1;17188:8:3;16999:223;17405:1;17402;17398;17393:3;17389:2;17382:18;17375:32;17479:1;17475;17472;17468:9;17464:1;17460:2;17456;17449:17;17442:39;17436:45;;17706:2;17696:1043;;17750:2;17740:973;;17813:1;17810;17801:7;17794:21;17788:27;;17888:1;17884:2;17880;17873:17;17867:23;;17952:1;17948:2;17945:1;17938:16;17932:22;;18021:1;18017:2;18013;18006:17;18000:23;;18121:1;18117;18112:2;18109:1;18105:10;18102:1;18095:24;18091:1;18087:2;18084:1;18077:16;18070:53;18064:59;;18191:1;18187:2;18184:1;18177:16;18171:22;;18269:1;18264:3;18260:2;18253:18;18246:25;;18339:1;18335:2;18331;18324:17;18318:23;;18450:1;18446;18442:2;18433:7;18426:22;18422:1;18418:2;18414;18407:17;18400:52;18395:57;;18540:1;18536;18532;18529;18525:9;18521:2;18514:24;18510:2;18503:39;18497:45;;18620:1;18616;18613;18609:2;18602:16;18598:2;18591:31;18586:36;;18675:8;;;;;;;17740:973;18786:1;18782:2;18778;18771:17;18765:23;;18844:1;18840:2;18836;18829:17;18960:1;18956:2;18952;18945:17;18939:23;;19011:1;19006:3;19001;18994:19;18987:26;;19075:1;19071:2;19068:1;19061:16;19183:1;19179;19174:3;19165:7;19158:23;19154:1;19148:3;19145:1;19141:11;19137:1;19133:2;19129;19122:17;19115:41;19108:77;19102:83;;19284:1;19280;19275:3;19272:1;19265:17;19261:1;19257:2;19253:1;19248:2;19245:1;19241:10;19236:3;19229:26;19222:41;19215:71;19210:76;;;;;19317:2;19312:7;;16226:3115;;;;15334:4025;15382:1;15375:5;15371:13;15362:22;;15334:4025;;;19402:4;19396:11;19445:2;19438:4;19435:1;19431:12;19424:24;19710:4;19707:1;19700:15;19753:4;19746;19743:1;19739:12;19732:26;19796:4;19789;19786:1;19782:12;19775:26;19950:7;19943:4;19940:1;19936:12;19929:29;19996:1;19989:4;19986:1;19982:12;19975:23;20126:4;20123:1;20117:4;20114:1;20108:4;20104:1;20100:6;20089:42;20079:70;;20145:1;20142;20135:12;20079:70;20334:1;20330;20324:8;20321:1;20314:22;20309:27;13897:6526;-1:-1:-1;;;;;;;;;;;;13897:6526:3:o;13226:499::-;13316:7;;;;12535:6;13388:41;;13422:2;13426;13414:15;;;;;;;;13388:41;12535:6;13439:41;;13473:2;13477;13465:15;;;;;;;;13439:41;13498:2;13494;:6;13493:18;;;;;13508:2;13504;:6;13493:18;13490:181;;;13549:20;13558:2;13562;13565:1;13567;13549:8;:20::i;:::-;13527:42;;-1:-1:-1;13527:42:3;;-1:-1:-1;13527:42:3;-1:-1:-1;13527:42:3;-1:-1:-1;13490:181:3;;;13629:31;13639:2;13643;13647:1;13650;13653:2;13657;13629:9;:31::i;:::-;13607:53;;-1:-1:-1;13607:53:3;;-1:-1:-1;13607:53:3;-1:-1:-1;13607:53:3;-1:-1:-1;13490:181:3;13688:30;13700:2;13704;13708:3;13713:4;13688:11;:30::i;:::-;13681:37;;;;;;13226:499;;;;;;;;:::o;9414:928::-;9526:10;9538;9550;9562;9658:1;9655;9652;9645:15;9639:21;;9709:1;9705:2;9701;9694:17;9688:23;;9757:1;9753:2;9750:1;9743:16;9737:22;;9809:1;9805:2;9801;9794:17;9788:23;;9857:1;9853:2;9849;9842:17;9836:23;;9959:1;9955;9951;9947:2;9944:1;9937:16;9933:1;9928:2;9925:1;9921:10;9918:1;9911:24;9904:53;9901:1;9894:67;9888:73;;10058:1;10054;10050:2;10041:7;10034:22;10030:1;10026:2;10022;10015:17;10008:52;10002:58;;10132:1;10128;10123:2;10120:1;10116:10;10112:2;10105:25;10101:2;10094:40;10089:45;;10183:1;10178:3;10174:2;10167:18;10161:24;;10258:1;10253;10250;10246:2;10239:16;10236:1;10232:24;10229:1;10222:38;10216:44;;9414:928;;;;;;;;;:::o;10559:1073::-;10700:10;10712;10724;10736;10790:2;10796:1;10790:7;10786:67;;-1:-1:-1;10825:2:3;;-1:-1:-1;10829:2:3;;-1:-1:-1;10833:1:3;;-1:-1:-1;10833:1:3;10817:21;;10786:67;10904:1;10900:10;;;;;10904:1;10951:4;10947:2;10940:19;10933:34;10927:40;;11029:1;11024:2;11021:1;11017:10;11013:1;11008:3;11004:2;10997:18;10990:41;10984:47;;11069:1;11065:2;11061;11054:17;11048:23;;11120:1;11116:2;11112;11105:17;11099:23;;11174:1;11170:2;11165:3;11158:18;11152:24;;11233:1;11229:2;11223:4;11216:19;11210:25;;11294:1;11290:2;11286;11279:17;11272:24;;11405:1;11401;11396:3;11387:7;11380:23;11376:1;11371:2;11368:1;11364:10;11360:1;11356:2;11352;11345:17;11338:40;11331:76;11325:82;;11513:1;11509;11505:2;11501;11494:17;11490:1;11486:2;11482:1;11477:2;11474:1;11470:10;11465:3;11458:26;11451:41;11444:71;11438:77;;10559:1073;;;;;;;;;;;;:::o;8954:351::-;9045:10;9057;9079:14;9096:16;9108:3;9096:11;:16::i;:::-;9079:33;-1:-1:-1;1531:66:3;9145:6;9142:1;9135:20;9130:25;-1:-1:-1;9173:10:3;1531:66;9197:6;9193:2;9186:21;9173:34;-1:-1:-1;1531:66:3;9243:2;9239;9232:17;9223:26;-1:-1:-1;1531:66:3;9281:6;9278:1;9271:20;9266:25;;9069:236;;8954:351;;;;;;;:::o;4000:730::-;4055:14;4125:4;4119:11;4236:4;4227:7;4220:21;4281:4;4274;4265:7;4261:18;4254:32;4326:4;4319;4310:7;4306:18;4299:32;4430:1;4423:4;4414:7;4410:18;4403:29;4472:7;4465:4;4456:7;4452:18;4445:35;4520:1;4513:4;4504:7;4500:18;4493:29;4654:4;4645:7;4639:4;4630:7;4624:4;4620:1;4616:6;4605:54;4595:82;;4673:1;4670;4663:12;388:347:8;439:8;449:6;503:3;496:4;488:6;484:17;480:27;470:55;;521:1;518;511:12;470:55;-1:-1:-1;544:20:8;;587:18;576:30;;573:50;;;619:1;616;609:12;573:50;656:4;648:6;644:17;632:29;;708:3;701:4;692:6;684;680:19;676:30;673:39;670:59;;;725:1;722;715:12;670:59;388:347;;;;;:::o;740:477::-;819:6;827;835;888:2;876:9;867:7;863:23;859:32;856:52;;;904:1;901;894:12;856:52;940:9;927:23;917:33;;1001:2;990:9;986:18;973:32;1028:18;1020:6;1017:30;1014:50;;;1060:1;1057;1050:12;1014:50;1099:58;1149:7;1140:6;1129:9;1125:22;1099:58;:::i;:::-;740:477;;1176:8;;-1:-1:-1;1073:84:8;;-1:-1:-1;;;;740:477:8:o;1475:184::-;1527:77;1524:1;1517:88;1624:4;1621:1;1614:15;1648:4;1645:1;1638:15;1664:1277;1752:6;1760;1768;1821:2;1809:9;1800:7;1796:23;1792:32;1789:52;;;1837:1;1834;1827:12;1789:52;1877:9;1864:23;1906:18;1947:2;1939:6;1936:14;1933:34;;;1963:1;1960;1953:12;1933:34;2001:6;1990:9;1986:22;1976:32;;2046:7;2039:4;2035:2;2031:13;2027:27;2017:55;;2068:1;2065;2058:12;2017:55;2104:2;2091:16;2126:2;2122;2119:10;2116:36;;;2132:18;;:::i;:::-;2266:2;2260:9;2328:4;2320:13;;2171:66;2316:22;;;2340:2;2312:31;2308:40;2296:53;;;2364:18;;;2384:22;;;2361:46;2358:72;;;2410:18;;:::i;:::-;2450:10;2446:2;2439:22;2485:2;2477:6;2470:18;2527:7;2520:4;2515:2;2511;2507:11;2503:22;2500:35;2497:55;;;2548:1;2545;2538:12;2497:55;2608:2;2601:4;2597:2;2593:13;2586:4;2578:6;2574:17;2561:50;2655:1;2648:4;2643:2;2635:6;2631:15;2627:26;2620:37;2676:6;2666:16;;;;;2735:4;2724:9;2720:20;2707:34;2691:50;;2766:2;2756:8;2753:16;2750:36;;;2782:1;2779;2772:12;2750:36;;2821:60;2873:7;2862:8;2851:9;2847:24;2821:60;:::i;2946:248::-;3014:6;3022;3075:2;3063:9;3054:7;3050:23;3046:32;3043:52;;;3091:1;3088;3081:12;3043:52;-1:-1:-1;;3114:23:8;;;3184:2;3169:18;;;3156:32;;-1:-1:-1;2946:248:8:o;3381:580::-;3458:4;3464:6;3524:11;3511:25;3614:66;3603:8;3587:14;3583:29;3579:102;3559:18;3555:127;3545:155;;3696:1;3693;3686:12;3545:155;3723:33;;3775:20;;;-1:-1:-1;3818:18:8;3807:30;;3804:50;;;3850:1;3847;3840:12;3804:50;3883:4;3871:17;;-1:-1:-1;3914:14:8;3910:27;;;3900:38;;3897:58;;;3951:1;3948;3941:12;3966:184;4018:77;4015:1;4008:88;4115:4;4112:1;4105:15;4139:4;4136:1;4129:15;4342:412;4471:3;4509:6;4503:13;4534:1;4544:129;4558:6;4555:1;4552:13;4544:129;;;4656:4;4640:14;;;4636:25;;4630:32;4617:11;;;4610:53;4573:12;4544:129;;;-1:-1:-1;4728:1:8;4692:16;;4717:13;;;-1:-1:-1;4692:16:8;4342:412;-1:-1:-1;4342:412:8:o;4759:184::-;4811:77;4808:1;4801:88;4908:4;4905:1;4898:15;4932:4;4929:1;4922:15;4948:125;5013:9;;;5034:10;;;5031:36;;;5047:18;;:::i;5078:271::-;5261:6;5253;5248:3;5235:33;5217:3;5287:16;;5312:13;;;5287:16;5078:271;-1:-1:-1;5078:271:8:o;5354:184::-;5424:6;5477:2;5465:9;5456:7;5452:23;5448:32;5445:52;;;5493:1;5490;5483:12;5445:52;-1:-1:-1;5516:16:8;;5354:184;-1:-1:-1;5354:184:8:o;5732:128::-;5799:9;;;5820:11;;;5817:37;;;5834:18;;:::i;5865:274::-;5905:1;5931;5921:189;;5966:77;5963:1;5956:88;6067:4;6064:1;6057:15;6095:4;6092:1;6085:15;5921:189;-1:-1:-1;6124:9:8;;5865:274::o;6144:168::-;6217:9;;;6248;;6265:15;;;6259:22;;6245:37;6235:71;;6286:18;;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"1653400","executionCost":"25960","totalCost":"1679360"},"external":{"initialize(uint256,uint256)":"70856","initialized()":"2333","isValidSignature(bytes,bytes)":"infinite","isValidSignature(bytes32,bytes)":"infinite","x()":"2285","y()":"2306"},"internal":{"_validate(bytes memory,bytes calldata)":"infinite"}},"methodIdentifiers":{"initialize(uint256,uint256)":"e4a30116","initialized()":"158ef93e","isValidSignature(bytes,bytes)":"20c13b0b","isValidSignature(bytes32,bytes)":"1626ba7e","x()":"0c55699c","y()":"a56dfe4a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAuthenticatorData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidClientData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y_\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_hash\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"y\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is the implementation. It is meant to be used through proxy clone.\",\"kind\":\"dev\",\"methods\":{\"initialize(uint256,uint256)\":{\"details\":\"This function is only callable once and needs to be called immediately after deployment by the factory in the same transaction.\",\"params\":{\"x_\":\"The x coordinate of the public key\",\"y_\":\"The y coordinate of the public key\"}},\"isValidSignature(bytes,bytes)\":{\"details\":\"This is the old version of the function of EIP-1271 using bytes memory instead of bytes32\",\"params\":{\"_hash\":\"The hash of the data signed\",\"_signature\":\"The signature\"},\"returns\":{\"_0\":\"The EIP-1271 magic value\"}},\"isValidSignature(bytes32,bytes)\":{\"params\":{\"_hash\":\"The hash of the data signed\",\"_signature\":\"The signature\"},\"returns\":{\"_0\":\"The EIP-1271 magic value\"}}},\"title\":\"P256Signer\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"notice\":\"Error message when the contract is already initialized\"}],\"InvalidHash()\":[{\"notice\":\"Error message when the hash is invalid\"}],\"InvalidSignature()\":[{\"notice\":\"Error message when the signature is invalid\"}]},\"kind\":\"user\",\"methods\":{\"initialized()\":{\"notice\":\"Whether the contract has been initialized\"},\"isValidSignature(bytes,bytes)\":{\"notice\":\"Verifies that the signer is the owner of the secp256r1 public key.\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies that the signer is the owner of the secp256r1 public key.\"},\"x()\":{\"notice\":\"The x coordinate of the secp256r1 public key\"},\"y()\":{\"notice\":\"The y coordinate of the secp256r1 public key\"}},\"notice\":\"A contract used to verify ECDSA signatures over secp256r1 through EIP-1271 of Webauthn payloads.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/P256Signer.sol\":\"P256Signer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/FCL_Webauthn.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: Implementation of the WebAuthn Authentication mechanism\\n///* https://www.w3.org/TR/webauthn-2/#sctn-intro\\n///* Original code extracted from https://github.com/btchip/Webauthn.sol\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\nimport {Base64Url} from \\\"./utils/Base64Url.sol\\\";\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\nimport {FCL_ecdsa} from \\\"./FCL_ecdsa.sol\\\";\\n\\nimport {FCL_ecdsa_utils} from \\\"./FCL_ecdsa_utils.sol\\\";\\n\\nlibrary FCL_WebAuthn {\\n error InvalidAuthenticatorData();\\n error InvalidClientData();\\n error InvalidSignature();\\n\\n function WebAuthn_format(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata // rs\\n ) internal pure returns (bytes32 result) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n {\\n if ((authenticatorData[32] & authenticatorDataFlagMask) != authenticatorDataFlagMask) {\\n revert InvalidAuthenticatorData();\\n }\\n // Verify that clientData commits to the expected client challenge\\n // Use the Base64Url encoding which omits padding characters to match WebAuthn Specification\\n string memory challengeEncoded = Base64Url.encode(abi.encodePacked(clientChallenge));\\n bytes memory challengeExtracted = new bytes(\\n bytes(challengeEncoded).length\\n );\\n\\n assembly {\\n calldatacopy(\\n add(challengeExtracted, 32),\\n add(clientData.offset, clientChallengeDataOffset),\\n mload(challengeExtracted)\\n )\\n }\\n\\n bytes32 moreData; //=keccak256(abi.encodePacked(challengeExtracted));\\n assembly {\\n moreData := keccak256(add(challengeExtracted, 32), mload(challengeExtracted))\\n }\\n\\n if (keccak256(abi.encodePacked(bytes(challengeEncoded))) != moreData) {\\n revert InvalidClientData();\\n }\\n } //avoid stack full\\n\\n // Verify the signature over sha256(authenticatorData || sha256(clientData))\\n bytes memory verifyData = new bytes(authenticatorData.length + 32);\\n\\n assembly {\\n calldatacopy(add(verifyData, 32), authenticatorData.offset, authenticatorData.length)\\n }\\n\\n bytes32 more = sha256(clientData);\\n assembly {\\n mstore(add(verifyData, add(authenticatorData.length, 32)), more)\\n }\\n\\n return sha256(verifyData);\\n }\\n\\n function checkSignature (\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256[2] calldata Q\\n ) internal view returns (bool) {\\n return checkSignature(authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs, Q[0], Q[1]);\\n }\\n\\n function checkSignature (\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256 Qx,\\n uint256 Qy\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_ecdsa_utils.ecdsa_verify(message, rs, Qx, Qy);\\n\\n return result;\\n }\\n\\n function checkSignature_prec(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n address dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_ecdsa.ecdsa_precomputed_verify(message, rs, dataPointer);\\n\\n return result;\\n }\\n\\n //beware that this implementation will not be compliant with EOF\\n function checkSignature_hackmem(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256 dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_hackmem(message, rs, dataPointer);\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0xc2811ef6e17ea1d5509a3d3f7d5af5e56583347b36093d05530425d7c1316dd6\",\"license\":\"MIT\"},\"FreshCryptoLib/FCL_ecdsa.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_ecdsa.sol\\n///*\\n///*\\n///* DESCRIPTION: ecdsa verification implementation\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\n\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\n\\n\\nlibrary FCL_ecdsa {\\n // Set parameters for curve sec256r1.public\\n //curve order (number of points)\\n uint256 constant n = FCL_Elliptic_ZZ.n;\\n \\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n\\n /**\\n * @dev ECDSA verification, given , signature, and public key, no calldata version\\n */\\n function ecdsa_verify(bytes32 message, uint256 r, uint256 s, uint256 Qx, uint256 Qy) internal view returns (bool){\\n\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return false;\\n }\\n \\n if (!FCL_Elliptic_ZZ.ecAff_isOnCurve(Qx, Qy)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, FCL_Elliptic_ZZ.n);\\n uint256 scalar_v = mulmod(r, sInv, FCL_Elliptic_ZZ.n);\\n uint256 x1;\\n\\n x1 = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(Qx, Qy, scalar_u, scalar_v);\\n\\n x1= addmod(x1, n-r,n );\\n \\n return x1 == 0;\\n }\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) internal view returns (address)\\n {\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return address(0);\\n }\\n uint256 y=FCL_Elliptic_ZZ.ec_Decompress(r, v-27);\\n uint256 rinv=FCL_Elliptic_ZZ.FCL_nModInv(r);\\n uint256 u1=mulmod(FCL_Elliptic_ZZ.n-addmod(0,h,FCL_Elliptic_ZZ.n), rinv,FCL_Elliptic_ZZ.n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,FCL_Elliptic_ZZ.n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=FCL_Elliptic_ZZ.ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256 r, uint256 s, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n \\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via the contract at address Shamir8 assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n X= addmod(X, n-r,n );\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256[2] calldata rs, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via the contract at address Shamir8 assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n X= addmod(X, n-r,n );\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n}\\n\",\"keccak256\":\"0x679d2e9a655cd7e156a0cfc24de0aca88d4e0b34a8e0dfe6a599f23af092f5a2\",\"license\":\"MIT\"},\"FreshCryptoLib/FCL_ecdsa_utils.sol\":{\"content\":\"\\n//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_ecdsa.sol\\n///*\\n///*\\n///* DESCRIPTION: ecdsa verification implementation\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\n\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\n\\n\\nlibrary FCL_ecdsa_utils {\\n // Set parameters for curve sec256r1.public\\n //curve order (number of points)\\n uint256 constant n = FCL_Elliptic_ZZ.n;\\n \\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256 Qx, uint256 Qy) internal view returns (bool) {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return false;\\n }\\n if (!FCL_Elliptic_ZZ.ecAff_isOnCurve(Qx, Qy)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, FCL_Elliptic_ZZ.n);\\n uint256 scalar_v = mulmod(r, sInv, FCL_Elliptic_ZZ.n);\\n uint256 x1;\\n\\n x1 = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(Qx, Qy, scalar_u, scalar_v);\\n x1= addmod(x1, n-r,n );\\n \\n \\n return x1 == 0;\\n }\\n\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256[2] calldata Q) internal view returns (bool) {\\n return ecdsa_verify(message, rs, Q[0], Q[1]);\\n }\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) internal view returns (address)\\n {\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return address(0);\\n }\\n uint256 y=FCL_Elliptic_ZZ.ec_Decompress(r, v-27);\\n uint256 rinv=FCL_Elliptic_ZZ.FCL_nModInv(r);\\n uint256 u1=mulmod(FCL_Elliptic_ZZ.n-addmod(0,h,FCL_Elliptic_ZZ.n), rinv,FCL_Elliptic_ZZ.n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,FCL_Elliptic_ZZ.n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=FCL_Elliptic_ZZ.ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n\\n //ecdsa signature for test purpose only (who would like to have a private key onchain anyway ?)\\n //K is nonce, kpriv is private key\\n function ecdsa_sign(bytes32 message, uint256 k , uint256 kpriv) internal view returns(uint256 r, uint256 s)\\n {\\n r=FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(0,0, k, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n r=addmod(0,r, FCL_Elliptic_ZZ.n); \\n s=mulmod(FCL_Elliptic_ZZ.FCL_nModInv(k), addmod(uint256(message), mulmod(r, kpriv, FCL_Elliptic_ZZ.n),FCL_Elliptic_ZZ.n),FCL_Elliptic_ZZ.n);//s=k^-1.(h+r.kpriv)\\n\\n \\n if(r==0||s==0){\\n revert();\\n }\\n\\n\\n }\\n\\n //ecdsa key derivation\\n //kpriv is private key return (x,y) coordinates of associated Pubkey\\n function ecdsa_derivKpub(uint256 kpriv) internal view returns(uint256 x, uint256 y)\\n {\\n \\n x=FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(0,0, kpriv, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n y=FCL_Elliptic_ZZ.ec_Decompress(x, 1);\\n \\n if (FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(x, y, kpriv, FCL_Elliptic_ZZ.n - 1) != 0) //extract correct y value\\n {\\n y=FCL_Elliptic_ZZ.p-y;\\n } \\n\\n }\\n \\n //precomputations for 8 dimensional trick\\n function Precalc_8dim( uint256 Qx, uint256 Qy) internal view returns( uint[2][256] memory Prec)\\n {\\n \\n uint[2][8] memory Pow64_PQ; //store P, 64P, 128P, 192P, Q, 64Q, 128Q, 192Q\\n \\n //the trivial private keys 1 and -1 are forbidden\\n if(Qx==FCL_Elliptic_ZZ.gx)\\n {\\n revert();\\n }\\n Pow64_PQ[0][0]=FCL_Elliptic_ZZ.gx;\\n Pow64_PQ[0][1]=FCL_Elliptic_ZZ.gy;\\n \\n Pow64_PQ[4][0]=Qx;\\n Pow64_PQ[4][1]=Qy;\\n \\n /* raise to multiplication by 64 by 6 consecutive doubling*/\\n for(uint j=1;j<4;j++){\\n uint256 x;\\n uint256 y;\\n uint256 zz;\\n uint256 zzz;\\n \\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j-1][0], Pow64_PQ[j-1][1], 1, 1);\\n \\t(Pow64_PQ[j][0], Pow64_PQ[j][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n (x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j+3][0], Pow64_PQ[j+3][1], 1, 1);\\n \\t(Pow64_PQ[j+4][0], Pow64_PQ[j+4][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n\\n \\tfor(uint i=0;i<63;i++){\\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j][0], Pow64_PQ[j][1],1,1);\\n (Pow64_PQ[j][0], Pow64_PQ[j][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j+4][0], Pow64_PQ[j+4][1],1,1);\\n (Pow64_PQ[j+4][0], Pow64_PQ[j+4][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n \\t}\\n }\\n \\n /* neutral point */\\n Prec[0][0]=0;\\n Prec[0][1]=0;\\n \\n \\t\\n for(uint i=1;i<256;i++)\\n { \\n Prec[i][0]=0;\\n Prec[i][1]=0;\\n \\n for(uint j=0;j<8;j++)\\n {\\n \\tif( (i&(1<=0.8.19 <0.9.0;\\n\\nlibrary FCL_Elliptic_ZZ {\\n // Set parameters for curve sec256r1.\\n\\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\\n //curve prime field modulus\\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n //short weierstrass first coefficient\\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\\n //short weierstrass second coefficient\\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\\n //generating point affine coordinates\\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\\n //curve order (number of points)\\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\\n /* -2 mod n constant, used to speed up inversion*/\\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\\n\\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\\n //P+1 div 4\\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\\n //arbitrary constant to express no quadratic residuosity\\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n\\n /**\\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\\n */\\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2modn)\\n mstore(add(pointer, 0xa0), n)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n /**\\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\\n */\\n\\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2)\\n mstore(add(pointer, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n\\n //Coron projective shuffling, take as input alpha as blinding factor\\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n \\n uint256 alpha2=mulmod(alpha,alpha,p);\\n \\n x3=mulmod(alpha2, x,p); //alpha^-2.x\\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\\n\\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\\n \\n return (x3, y3, zz3, zzz3);\\n }\\n\\n\\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\\n u2=addmod(u2, p-u1, p);// P = U2-U1\\n x1=mulmod(u2, u2, p);//PP\\n x2=mulmod(x1, u2, p);//PPP\\n \\n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \\n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\\n\\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \\n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\\n\\n return (x3, y3, zz3, zzz3);\\n }\\n\\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\\n/// @param self The integer of which to find the modular inverse\\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\\n\\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\\n assembly (\\\"memory-safe\\\") {\\n // load the free memory pointer value\\n let pointer := mload(0x40)\\n\\n // Define length of base (Bsize)\\n mstore(pointer, 0x20)\\n // Define the exponent size (Esize)\\n mstore(add(pointer, 0x20), 0x20)\\n // Define the modulus size (Msize)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base (B)\\n mstore(add(pointer, 0x60), self)\\n // Define the exponent (E)\\n mstore(add(pointer, 0x80), pp1div4)\\n // We save the point of the last argument, it will be override by the result\\n // of the precompile call in order to avoid paying for the memory expansion properly\\n let _result := add(pointer, 0xa0)\\n // Define the modulus (M)\\n mstore(_result, p)\\n\\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\\n if iszero(\\n staticcall(\\n not(0), // amount of gas to send\\n MODEXP_PRECOMPILE, // target\\n pointer, // argsOffset\\n 0xc0, // argsSize (6 * 32 bytes)\\n _result, // retOffset (we override M to avoid paying for the memory expansion)\\n 0x20 // retSize (32 bytes)\\n )\\n ) { revert(0, 0) }\\n\\n result := mload(_result)\\n// result :=addmod(result,0,p)\\n }\\n if(mulmod(result,result,p)!=self){\\n result=_NOTSQUARE;\\n }\\n \\n return result;\\n}\\n /**\\n * /* @dev Convert from affine rep to XYZZ rep\\n */\\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\\n unchecked {\\n P[2] = 1; //ZZ\\n P[3] = 1; //ZZZ\\n P[0] = x0;\\n P[1] = y0;\\n }\\n }\\n\\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \\n\\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\\n\\n y=SqrtMod(y2);\\n if(y==_NOTSQUARE){\\n return _NOTONCURVE;\\n }\\n if((y&1)!=(parity&1)){\\n y=p-y;\\n }\\n }\\n\\n /**\\n * /* @dev Convert from XYZZ rep to affine rep\\n */\\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\\n y1 = mulmod(y, zzzInv, p); //Y/zzz\\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\\n zzzInv = mulmod(_b, _b, p); //1/zz\\n x1 = mulmod(x, zzzInv, p); //X/zz\\n }\\n\\n /**\\n * /* @dev Sutherland2008 doubling\\n */\\n /* The \\\"dbl-2008-s-1\\\" doubling formulas */\\n\\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n assembly {\\n P0 := mulmod(2, y, p) //U = 2*Y1\\n P2 := mulmod(P0, P0, p) // V=U^2\\n P3 := mulmod(x, P2, p) // S = X1*V\\n P1 := mulmod(P0, P2, p) // W=UV\\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\\n }\\n }\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\\n */\\n\\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n if (y1 == 0) {\\n return (x2, y2, 1, 1);\\n }\\n\\n assembly {\\n y1 := sub(p, y1)\\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\\n P0 := mulmod(x2, x2, p) //PP = P^2\\n P1 := mulmod(P0, x2, p) //PPP = P*PP\\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\\n }\\n //end assembly\\n } //end unchecked\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Return the zero curve in XYZZ coordinates.\\n */\\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\\n return (0, 0, 0, 0);\\n }\\n /**\\n * @dev Check if point is the neutral of the curve\\n */\\n\\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\\n return y0 == 0;\\n }\\n /**\\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\\n */\\n\\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\\n return (0, 0);\\n }\\n\\n /**\\n * @dev Check if the curve is the zero curve in affine rep.\\n */\\n // uint256 x, uint256 y)\\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\\n return (y == 0);\\n }\\n\\n /**\\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\\n */\\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\\n if ( ((0 == x)&&( 0 == y)) || x == p || y == p) {\\n return false;\\n }\\n unchecked {\\n uint256 LHS = mulmod(y, y, p); // y^2\\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\\n\\n return LHS == RHS;\\n }\\n }\\n\\n /**\\n * @dev Add two elliptic curve points in affine coordinates. Deal with P=Q\\n */\\n\\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\\n uint256 zz0;\\n uint256 zzz0;\\n\\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\\n if((x0==x1)&&(y0==y1)) {\\n (x0, y0, zz0, zzz0) = ecZZ_Dbl(x0, y0,1,1);\\n }\\n else{\\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\\n }\\n\\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\\n }\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns only x for ECDSA use \\n * */\\n function ecZZ_mulmuladd_S_asm(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 Y;\\n uint256 index = 255;\\n uint256 H0;\\n uint256 H1;\\n\\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return 0;\\n\\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); \\n if((H0==0)&&(H1==0))//handling Q=-G\\n {\\n scalar_u=addmod(scalar_u, n-scalar_v, n);\\n scalar_v=0;\\n\\n }\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n X := H0\\n Y := H1\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := H0\\n T2 := H1\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := mulmod(addmod(X, zz, p), addmod(X, sub(p, zz), p), p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M=3*(X-ZZ)(X+ZZ)\\n\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n let T := mload(0x40)\\n mstore(add(T, 0x60), zz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n //Y:=mulmod(Y,zzz,p)//Y/zzz\\n //zz :=mulmod(zz, mload(T),p) //1/z\\n //zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, mload(T), p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return X;\\n }\\n\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns affine representation of point (normalized) \\n * */\\n function ecZZ_mulmuladd(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X, uint256 Y) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 index = 255;\\n uint256[6] memory T;\\n uint256[2] memory H;\\n \\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\\n\\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n Y := mload(add(H,32))\\n X := mload(H)\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := mload(H)\\n T2 := mload(add(H,32))\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zzz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n Y:=mulmod(Y,mload(T),p)//Y/zzz\\n zz :=mulmod(zz, mload(T),p) //1/z\\n zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, zz, p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return (X,Y);\\n }\\n\\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\\n //contract at given address dataPointer\\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\\n // the external tool to generate tables from public key is in the /sage directory\\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n unchecked {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n extcodecopy(dataPointer, T, mload(T), 64)\\n let index := sub(zz, 1)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for {} gt(index, 191) { index := add(index, 191) } {\\n //inline Double\\n {\\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(TT1, TT1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n let T1 := mulmod(TT1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n }\\n {\\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n let index2 := sub(index, 64)\\n let T3 :=\\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\\n let index3 := sub(index2, 64)\\n let T2 :=\\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\\n index := sub(index3, 64)\\n let T1 :=\\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T1) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n extcodecopy(dataPointer, T, T1, 64)\\n }\\n\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n\\n // inlined EcZZ_AddN\\n if iszero(zz) {\\n X := mload(T)\\n Y := mload(add(T, 32))\\n zz := 1\\n zzz := 1\\n\\n continue\\n }\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n\\n //special case ecAdd(P,P)=EcDbl\\n if iszero(y2) {\\n if iszero(T2) {\\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n let T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n let T4 := mulmod(T2, T2, p)\\n let T1 := mulmod(T4, T2, p) //\\n zz := mulmod(zz, T4, p)\\n //zzz3=V*ZZ1\\n zzz := mulmod(zzz, T1, p) // W=UV/\\n let zz1 := mulmod(X, T4, p)\\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n \\n\\n // improving the extcodecopy trick : append array at end of contract\\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n unchecked {\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n codecopy(T, add(mload(T), dataPointer), 64)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n //index:=add(index,192), restore index, interleaved with loop\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T4) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n codecopy(T, add(T4, dataPointer), 64)\\n\\n // inlined EcZZ_AddN\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n T4 := mulmod(T2, T2, p)\\n T1 := mulmod(T4, T2, p)\\n T2 := mulmod(zz, T4, p) // W=UV\\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\\n let zz1 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\\n zz := T2\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n\\n\\n} //EOF\\n\",\"keccak256\":\"0xa09802f3ca65d654d56260f40db449f9fbefbadb64429772e6f133ad6370eab9\",\"license\":\"MIT\"},\"FreshCryptoLib/utils/Base64Url.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Encode (without '=' padding) \\n * @author evmbrahmin, adapted from hiromin's Base64URL libraries\\n */\\nlibrary Base64Url {\\n /**\\n * @dev Base64Url Encoding Table\\n */\\n string internal constant ENCODING_TABLE =\\n \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\\\";\\n\\n function encode(bytes memory data) internal pure returns (string memory) {\\n if (data.length == 0) return \\\"\\\";\\n\\n // Load the table into memory\\n string memory table = ENCODING_TABLE;\\n\\n string memory result = new string(4 * ((data.length + 2) / 3));\\n\\n // @solidity memory-safe-assembly\\n assembly {\\n let tablePtr := add(table, 1)\\n let resultPtr := add(result, 32)\\n\\n for {\\n let dataPtr := data\\n let endPtr := add(data, mload(data))\\n } lt(dataPtr, endPtr) {\\n\\n } {\\n dataPtr := add(dataPtr, 3)\\n let input := mload(dataPtr)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(18, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(12, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(6, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))\\n resultPtr := add(resultPtr, 1)\\n }\\n\\n // Remove the padding adjustment logic\\n switch mod(mload(data), 3)\\n case 1 {\\n // Adjust for the last byte of data\\n resultPtr := sub(resultPtr, 2)\\n }\\n case 2 {\\n // Adjust for the last two bytes of data\\n resultPtr := sub(resultPtr, 1)\\n }\\n \\n // Set the correct length of the result string\\n mstore(result, sub(resultPtr, add(result, 32)))\\n }\\n\\n return result; \\n }\\n}\\n\",\"keccak256\":\"0xc9d5fbb0ef9ff0756eb5aabe7a32b2bf0f8f3c533d4451dd5778fe77aee7f0c1\",\"license\":\"Apache-2.0\"},\"contracts/P256Signer.sol\":{\"content\":\"pragma solidity ^0.8.0;\\n\\nimport {FCL_WebAuthn} from \\\"FreshCryptoLib/FCL_Webauthn.sol\\\";\\n\\n/// @title P256Signer\\n/// @notice A contract used to verify ECDSA signatures over secp256r1 through\\n/// EIP-1271 of Webauthn payloads.\\n/// @dev This contract is the implementation. It is meant to be used through\\n/// proxy clone.\\ncontract P256Signer {\\n /// @notice The EIP-1271 magic value\\n bytes4 internal constant EIP1271_MAGICVALUE = 0x1626ba7e;\\n\\n /// @notice The old EIP-1271 magic value\\n bytes4 internal constant OLD_EIP1271_MAGICVALUE = 0x20c13b0b;\\n\\n /// @notice Whether the contract has been initialized\\n bool public initialized;\\n\\n /// @notice The x coordinate of the secp256r1 public key\\n uint256 public x;\\n\\n /// @notice The y coordinate of the secp256r1 public key\\n uint256 public y;\\n\\n /// @notice Error message when the signature is invalid\\n error InvalidSignature();\\n\\n /// @notice Error message when the hash is invalid\\n error InvalidHash();\\n\\n /// @notice Error message when the contract is already initialized\\n error AlreadyInitialized();\\n\\n constructor() {\\n initialized = true;\\n }\\n\\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\\n /// @param _hash The hash of the data signed\\n /// @param _signature The signature\\n /// @return The EIP-1271 magic value\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) public view returns (bytes4) {\\n _validate(abi.encode(_hash), _signature);\\n return EIP1271_MAGICVALUE;\\n }\\n\\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\\n /// @dev This is the old version of the function of EIP-1271 using bytes\\n /// memory instead of bytes32\\n /// @param _hash The hash of the data signed\\n /// @param _signature The signature\\n /// @return The EIP-1271 magic value\\n function isValidSignature(bytes memory _hash, bytes calldata _signature) public view returns (bytes4) {\\n _validate(_hash, _signature);\\n return OLD_EIP1271_MAGICVALUE;\\n }\\n\\n struct SignatureLayout {\\n bytes authenticatorData;\\n bytes clientData;\\n uint256 challengeOffset;\\n uint256[2] rs;\\n }\\n\\n /// @notice Validates the signature\\n /// @param data The data signed\\n /// @param _signature The signature\\n function _validate(bytes memory data, bytes calldata _signature) private view {\\n bytes32 _hash = keccak256(data);\\n SignatureLayout calldata signaturePointer;\\n // This code should precalculate the offsets of variables as defined in the layout\\n // Calldata variables are represented as offsets, and, I think, length for dynamic types\\n // If the calldata is malformed (e.g., shorter than expected), this will revert with an out of bounds error\\n assembly {\\n signaturePointer := _signature.offset\\n }\\n\\n bool valid = FCL_WebAuthn.checkSignature(\\n signaturePointer.authenticatorData,\\n 0x01,\\n signaturePointer.clientData,\\n _hash,\\n signaturePointer.challengeOffset,\\n signaturePointer.rs,\\n x,\\n y\\n );\\n\\n if (!valid) revert InvalidSignature();\\n }\\n\\n /// @dev This function is only callable once and needs to be called immediately\\n /// after deployment by the factory in the same transaction.\\n /// @param x_ The x coordinate of the public key\\n /// @param y_ The y coordinate of the public key\\n function initialize(uint256 x_, uint256 y_) external {\\n if (initialized) revert AlreadyInitialized();\\n initialized = true;\\n x = x_;\\n y = y_;\\n }\\n}\\n\",\"keccak256\":\"0xfc1b006adb6ace0364918015a1aa64439374f813383bcc71290f6b37b66641e5\"}},\"version\":1}","storageLayout":{"storage":[{"astId":2859,"contract":"contracts/P256Signer.sol:P256Signer","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":2862,"contract":"contracts/P256Signer.sol:P256Signer","label":"x","offset":0,"slot":"1","type":"t_uint256"},{"astId":2865,"contract":"contracts/P256Signer.sol:P256Signer","label":"y","offset":0,"slot":"2","type":"t_uint256"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"errors":{"AlreadyInitialized()":[{"notice":"Error message when the contract is already initialized"}],"InvalidHash()":[{"notice":"Error message when the hash is invalid"}],"InvalidSignature()":[{"notice":"Error message when the signature is invalid"}]},"kind":"user","methods":{"initialized()":{"notice":"Whether the contract has been initialized"},"isValidSignature(bytes,bytes)":{"notice":"Verifies that the signer is the owner of the secp256r1 public key."},"isValidSignature(bytes32,bytes)":{"notice":"Verifies that the signer is the owner of the secp256r1 public key."},"x()":{"notice":"The x coordinate of the secp256r1 public key"},"y()":{"notice":"The y coordinate of the secp256r1 public key"}},"notice":"A contract used to verify ECDSA signatures over secp256r1 through EIP-1271 of Webauthn payloads.","version":1}}},"contracts/P256SignerFactory.sol":{"P256SignerFactory":{"abi":[{"inputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"y","type":"uint256"},{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"NewSignerCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"create","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"create(uint256,uint256)":{"params":{"x":"The x coordinate of the public key","y":"The y coordinate of the public key"}}},"title":"P256SignerFactory","version":1},"evm":{"bytecode":{"functionDebugData":{"@_3022":{"entryPoint":null,"id":3022,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":64,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:306:8","statements":[{"nodeType":"YulBlock","src":"6:3:8","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:8","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:8"},"nodeType":"YulFunctionCall","src":"143:12:8"},"nodeType":"YulExpressionStatement","src":"143:12:8"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:8"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:8"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:8"},"nodeType":"YulFunctionCall","src":"112:23:8"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:8","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:8"},"nodeType":"YulFunctionCall","src":"108:32:8"},"nodeType":"YulIf","src":"105:52:8"},{"nodeType":"YulVariableDeclaration","src":"166:29:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:8"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:8"},"nodeType":"YulFunctionCall","src":"179:16:8"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:8","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:8"},"nodeType":"YulFunctionCall","src":"260:12:8"},"nodeType":"YulExpressionStatement","src":"260:12:8"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:8"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:8"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:8","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:8","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:8"},"nodeType":"YulFunctionCall","src":"239:11:8"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:8","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:8"},"nodeType":"YulFunctionCall","src":"235:19:8"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:8"},"nodeType":"YulFunctionCall","src":"224:31:8"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:8"},"nodeType":"YulFunctionCall","src":"214:42:8"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:8"},"nodeType":"YulFunctionCall","src":"207:50:8"},"nodeType":"YulIf","src":"204:70:8"},{"nodeType":"YulAssignment","src":"283:15:8","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:8"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:8"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:8","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:8","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:8","type":""}],"src":"14:290:8"}]},"contents":"{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n}","id":8,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b5060405161031a38038061031a83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161028a610090600039600081816040015260d7015261028a6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80635c60da1b1461003b5780639f7b45791461008b575b600080fd5b6100627f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b610062610099366004610232565b60008083836040516020016100b8929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006100fc7f0000000000000000000000000000000000000000000000000000000000000000836101db565b6040517fe4a30116000000000000000000000000000000000000000000000000000000008152600481018790526024810186905290915073ffffffffffffffffffffffffffffffffffffffff82169063e4a3011690604401600060405180830381600087803b15801561016e57600080fd5b505af1158015610182573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681528692508791507f33b61205835e3063eb8935cac4b29d7fc333ad80d6cb11893ba4758adf8cdde19060200160405180910390a3949350505050565b60006c5af43d3d93803e602a57fd5bf36021528260145273602c3d8160093d39f33d3d3d3d363d3d37363d73600052816035600c6000f59050806102275763301164256000526004601cfd5b600060215292915050565b6000806040838503121561024557600080fd5b5050803592602090910135915056fea264697066735822122071f53aa036351be28c2415d8e5721596cc980c32c199aac9af70658e7c86902d64736f6c63430008140033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x31A CODESIZE SUB DUP1 PUSH2 0x31A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x28A PUSH2 0x90 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0x40 ADD MSTORE PUSH1 0xD7 ADD MSTORE PUSH2 0x28A PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x9F7B4579 EQ PUSH2 0x8B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x62 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0x99 CALLDATASIZE PUSH1 0x4 PUSH2 0x232 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB8 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xFC PUSH32 0x0 DUP4 PUSH2 0x1DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4A3011600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xE4A30116 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x182 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP2 MSTORE DUP7 SWAP3 POP DUP8 SWAP2 POP PUSH32 0x33B61205835E3063EB8935CAC4B29D7FC333AD80D6CB11893BA4758ADF8CDDE1 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH13 0x5AF43D3D93803E602A57FD5BF3 PUSH1 0x21 MSTORE DUP3 PUSH1 0x14 MSTORE PUSH20 0x602C3D8160093D39F33D3D3D3D363D3D37363D73 PUSH1 0x0 MSTORE DUP2 PUSH1 0x35 PUSH1 0xC PUSH1 0x0 CREATE2 SWAP1 POP DUP1 PUSH2 0x227 JUMPI PUSH4 0x30116425 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 PUSH1 0x21 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0xF53AA036351BE28C2415D8E5721596CC980C ORIGIN 0xC1 SWAP10 0xAA 0xC9 0xAF PUSH17 0x658E7C86902D64736F6C63430008140033 ","sourceMap":"205:877:6:-:0;;;354:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;401:32:6;;;205:877;;14:290:8;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:8;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:8:o;:::-;205:877:6;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@cloneDeterministic_3108":{"entryPoint":475,"id":3108,"parameterSlots":2,"returnSlots":1},"@create_3076":{"entryPoint":null,"id":3076,"parameterSlots":2,"returnSlots":1},"@implementation_3012":{"entryPoint":null,"id":3012,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":562,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_uint256_t_uint256__to_t_uint256_t_uint256__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1000:8","statements":[{"nodeType":"YulBlock","src":"6:3:8","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:125:8","statements":[{"nodeType":"YulAssignment","src":"125:26:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:8"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:8","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:8"},"nodeType":"YulFunctionCall","src":"133:18:8"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:8"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:8"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"182:6:8"},{"kind":"number","nodeType":"YulLiteral","src":"190:42:8","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"178:3:8"},"nodeType":"YulFunctionCall","src":"178:55:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:8"},"nodeType":"YulFunctionCall","src":"160:74:8"},"nodeType":"YulExpressionStatement","src":"160:74:8"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:8","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:8","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:8","type":""}],"src":"14:226:8"},{"body":{"nodeType":"YulBlock","src":"332:161:8","statements":[{"body":{"nodeType":"YulBlock","src":"378:16:8","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"387:1:8","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"390:1:8","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"380:6:8"},"nodeType":"YulFunctionCall","src":"380:12:8"},"nodeType":"YulExpressionStatement","src":"380:12:8"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"353:7:8"},{"name":"headStart","nodeType":"YulIdentifier","src":"362:9:8"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"349:3:8"},"nodeType":"YulFunctionCall","src":"349:23:8"},{"kind":"number","nodeType":"YulLiteral","src":"374:2:8","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"345:3:8"},"nodeType":"YulFunctionCall","src":"345:32:8"},"nodeType":"YulIf","src":"342:52:8"},{"nodeType":"YulAssignment","src":"403:33:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"426:9:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"413:12:8"},"nodeType":"YulFunctionCall","src":"413:23:8"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"403:6:8"}]},{"nodeType":"YulAssignment","src":"445:42:8","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"472:9:8"},{"kind":"number","nodeType":"YulLiteral","src":"483:2:8","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"468:3:8"},"nodeType":"YulFunctionCall","src":"468:18:8"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"455:12:8"},"nodeType":"YulFunctionCall","src":"455:32:8"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"445:6:8"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"290:9:8","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"301:7:8","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"313:6:8","type":""},{"name":"value1","nodeType":"YulTypedName","src":"321:6:8","type":""}],"src":"245:248:8"},{"body":{"nodeType":"YulBlock","src":"645:100:8","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"662:3:8"},{"name":"value0","nodeType":"YulIdentifier","src":"667:6:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"655:6:8"},"nodeType":"YulFunctionCall","src":"655:19:8"},"nodeType":"YulExpressionStatement","src":"655:19:8"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"694:3:8"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:8","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"690:3:8"},"nodeType":"YulFunctionCall","src":"690:12:8"},{"name":"value1","nodeType":"YulIdentifier","src":"704:6:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"683:6:8"},"nodeType":"YulFunctionCall","src":"683:28:8"},"nodeType":"YulExpressionStatement","src":"683:28:8"},{"nodeType":"YulAssignment","src":"720:19:8","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"731:3:8"},{"kind":"number","nodeType":"YulLiteral","src":"736:2:8","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"727:3:8"},"nodeType":"YulFunctionCall","src":"727:12:8"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"720:3:8"}]}]},"name":"abi_encode_tuple_packed_t_uint256_t_uint256__to_t_uint256_t_uint256__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"613:3:8","type":""},{"name":"value1","nodeType":"YulTypedName","src":"618:6:8","type":""},{"name":"value0","nodeType":"YulTypedName","src":"626:6:8","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"637:3:8","type":""}],"src":"498:247:8"},{"body":{"nodeType":"YulBlock","src":"879:119:8","statements":[{"nodeType":"YulAssignment","src":"889:26:8","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"901:9:8"},{"kind":"number","nodeType":"YulLiteral","src":"912:2:8","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"897:3:8"},"nodeType":"YulFunctionCall","src":"897:18:8"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"889:4:8"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"931:9:8"},{"name":"value0","nodeType":"YulIdentifier","src":"942:6:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"924:6:8"},"nodeType":"YulFunctionCall","src":"924:25:8"},"nodeType":"YulExpressionStatement","src":"924:25:8"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"969:9:8"},{"kind":"number","nodeType":"YulLiteral","src":"980:2:8","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"965:3:8"},"nodeType":"YulFunctionCall","src":"965:18:8"},{"name":"value1","nodeType":"YulIdentifier","src":"985:6:8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"958:6:8"},"nodeType":"YulFunctionCall","src":"958:34:8"},"nodeType":"YulExpressionStatement","src":"958:34:8"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"840:9:8","type":""},{"name":"value1","nodeType":"YulTypedName","src":"851:6:8","type":""},{"name":"value0","nodeType":"YulTypedName","src":"859:6:8","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"870:4:8","type":""}],"src":"750:248:8"}]},"contents":"{\n { }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_packed_t_uint256_t_uint256__to_t_uint256_t_uint256__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n mstore(pos, value0)\n mstore(add(pos, 32), value1)\n end := add(pos, 64)\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n}","id":8,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"3012":[{"length":32,"start":64},{"length":32,"start":215}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c80635c60da1b1461003b5780639f7b45791461008b575b600080fd5b6100627f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b610062610099366004610232565b60008083836040516020016100b8929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006100fc7f0000000000000000000000000000000000000000000000000000000000000000836101db565b6040517fe4a30116000000000000000000000000000000000000000000000000000000008152600481018790526024810186905290915073ffffffffffffffffffffffffffffffffffffffff82169063e4a3011690604401600060405180830381600087803b15801561016e57600080fd5b505af1158015610182573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681528692508791507f33b61205835e3063eb8935cac4b29d7fc333ad80d6cb11893ba4758adf8cdde19060200160405180910390a3949350505050565b60006c5af43d3d93803e602a57fd5bf36021528260145273602c3d8160093d39f33d3d3d3d363d3d37363d73600052816035600c6000f59050806102275763301164256000526004601cfd5b600060215292915050565b6000806040838503121561024557600080fd5b5050803592602090910135915056fea264697066735822122071f53aa036351be28c2415d8e5721596cc980c32c199aac9af70658e7c86902d64736f6c63430008140033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x9F7B4579 EQ PUSH2 0x8B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x62 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0x99 CALLDATASIZE PUSH1 0x4 PUSH2 0x232 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB8 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xFC PUSH32 0x0 DUP4 PUSH2 0x1DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4A3011600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xE4A30116 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x182 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP2 MSTORE DUP7 SWAP3 POP DUP8 SWAP2 POP PUSH32 0x33B61205835E3063EB8935CAC4B29D7FC333AD80D6CB11893BA4758ADF8CDDE1 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH13 0x5AF43D3D93803E602A57FD5BF3 PUSH1 0x21 MSTORE DUP3 PUSH1 0x14 MSTORE PUSH20 0x602C3D8160093D39F33D3D3D3D363D3D37363D73 PUSH1 0x0 MSTORE DUP2 PUSH1 0x35 PUSH1 0xC PUSH1 0x0 CREATE2 SWAP1 POP DUP1 PUSH2 0x227 JUMPI PUSH4 0x30116425 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 PUSH1 0x21 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0xF53AA036351BE28C2415D8E5721596CC980C ORIGIN 0xC1 SWAP10 0xAA 0xC9 0xAF PUSH17 0x658E7C86902D64736F6C63430008140033 ","sourceMap":"205:877:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;308:39;;;;;;;;190:42:8;178:55;;;160:74;;148:2;133:18;308:39:6;;;;;;;761:319;;;;;;:::i;:::-;817:7;836:12;878:1;881;861:22;;;;;;;;655:19:8;;;699:2;690:12;;683:28;736:2;727:12;;498:247;861:22:6;;;;;;;;;;;;;851:33;;;;;;836:48;;894:14;911:49;939:14;955:4;911:27;:49::i;:::-;970:35;;;;;;;;924:25:8;;;965:18;;;958:34;;;894:66:6;;-1:-1:-1;970:29:6;;;;;;897:18:8;;970:35:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1020:30:6;;190:42:8;178:55;;160:74;;1040:1:6;;-1:-1:-1;1037:1:6;;-1:-1:-1;1020:30:6;;148:2:8;133:18;1020:30:6;;;;;;;1067:6;761:319;-1:-1:-1;;;;761:319:6:o;8126:822:7:-;8226:16;8337:28;8331:4;8324:42;8392:14;8386:4;8379:28;8433:42;8427:4;8420:56;8524:4;8518;8512;8509:1;8501:28;8489:40;;8598:8;8588:230;;8711:10;8705:4;8698:24;8799:4;8793;8786:18;8588:230;8930:1;8924:4;8917:15;8126:822;;;;:::o;245:248:8:-;313:6;321;374:2;362:9;353:7;349:23;345:32;342:52;;;390:1;387;380:12;342:52;-1:-1:-1;;413:23:8;;;483:2;468:18;;;455:32;;-1:-1:-1;245:248:8:o"},"gasEstimates":{"creation":{"codeDepositCost":"130000","executionCost":"infinite","totalCost":"infinite"},"external":{"create(uint256,uint256)":"infinite","implementation()":"infinite"}},"methodIdentifiers":{"create(uint256,uint256)":"9f7b4579","implementation()":"5c60da1b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"NewSignerCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create(uint256,uint256)\":{\"params\":{\"x\":\"The x coordinate of the public key\",\"y\":\"The y coordinate of the public key\"}}},\"title\":\"P256SignerFactory\",\"version\":1},\"userdoc\":{\"events\":{\"NewSignerCreated(uint256,uint256,address)\":{\"notice\":\"Emitted when a new P256Signer proxy contract is created\"}},\"kind\":\"user\",\"methods\":{\"create(uint256,uint256)\":{\"notice\":\"Creates a new P256Signer proxy contract\"},\"implementation()\":{\"notice\":\"The implementation address of the P256Signer contract\"}},\"notice\":\"Factory contract for creating proxies for P256Signer\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/P256SignerFactory.sol\":\"P256SignerFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/FCL_Webauthn.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: Implementation of the WebAuthn Authentication mechanism\\n///* https://www.w3.org/TR/webauthn-2/#sctn-intro\\n///* Original code extracted from https://github.com/btchip/Webauthn.sol\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\nimport {Base64Url} from \\\"./utils/Base64Url.sol\\\";\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\nimport {FCL_ecdsa} from \\\"./FCL_ecdsa.sol\\\";\\n\\nimport {FCL_ecdsa_utils} from \\\"./FCL_ecdsa_utils.sol\\\";\\n\\nlibrary FCL_WebAuthn {\\n error InvalidAuthenticatorData();\\n error InvalidClientData();\\n error InvalidSignature();\\n\\n function WebAuthn_format(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata // rs\\n ) internal pure returns (bytes32 result) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n {\\n if ((authenticatorData[32] & authenticatorDataFlagMask) != authenticatorDataFlagMask) {\\n revert InvalidAuthenticatorData();\\n }\\n // Verify that clientData commits to the expected client challenge\\n // Use the Base64Url encoding which omits padding characters to match WebAuthn Specification\\n string memory challengeEncoded = Base64Url.encode(abi.encodePacked(clientChallenge));\\n bytes memory challengeExtracted = new bytes(\\n bytes(challengeEncoded).length\\n );\\n\\n assembly {\\n calldatacopy(\\n add(challengeExtracted, 32),\\n add(clientData.offset, clientChallengeDataOffset),\\n mload(challengeExtracted)\\n )\\n }\\n\\n bytes32 moreData; //=keccak256(abi.encodePacked(challengeExtracted));\\n assembly {\\n moreData := keccak256(add(challengeExtracted, 32), mload(challengeExtracted))\\n }\\n\\n if (keccak256(abi.encodePacked(bytes(challengeEncoded))) != moreData) {\\n revert InvalidClientData();\\n }\\n } //avoid stack full\\n\\n // Verify the signature over sha256(authenticatorData || sha256(clientData))\\n bytes memory verifyData = new bytes(authenticatorData.length + 32);\\n\\n assembly {\\n calldatacopy(add(verifyData, 32), authenticatorData.offset, authenticatorData.length)\\n }\\n\\n bytes32 more = sha256(clientData);\\n assembly {\\n mstore(add(verifyData, add(authenticatorData.length, 32)), more)\\n }\\n\\n return sha256(verifyData);\\n }\\n\\n function checkSignature (\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256[2] calldata Q\\n ) internal view returns (bool) {\\n return checkSignature(authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs, Q[0], Q[1]);\\n }\\n\\n function checkSignature (\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256 Qx,\\n uint256 Qy\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_ecdsa_utils.ecdsa_verify(message, rs, Qx, Qy);\\n\\n return result;\\n }\\n\\n function checkSignature_prec(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n address dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_ecdsa.ecdsa_precomputed_verify(message, rs, dataPointer);\\n\\n return result;\\n }\\n\\n //beware that this implementation will not be compliant with EOF\\n function checkSignature_hackmem(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256 dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_hackmem(message, rs, dataPointer);\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0xc2811ef6e17ea1d5509a3d3f7d5af5e56583347b36093d05530425d7c1316dd6\",\"license\":\"MIT\"},\"FreshCryptoLib/FCL_ecdsa.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_ecdsa.sol\\n///*\\n///*\\n///* DESCRIPTION: ecdsa verification implementation\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\n\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\n\\n\\nlibrary FCL_ecdsa {\\n // Set parameters for curve sec256r1.public\\n //curve order (number of points)\\n uint256 constant n = FCL_Elliptic_ZZ.n;\\n \\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n\\n /**\\n * @dev ECDSA verification, given , signature, and public key, no calldata version\\n */\\n function ecdsa_verify(bytes32 message, uint256 r, uint256 s, uint256 Qx, uint256 Qy) internal view returns (bool){\\n\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return false;\\n }\\n \\n if (!FCL_Elliptic_ZZ.ecAff_isOnCurve(Qx, Qy)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, FCL_Elliptic_ZZ.n);\\n uint256 scalar_v = mulmod(r, sInv, FCL_Elliptic_ZZ.n);\\n uint256 x1;\\n\\n x1 = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(Qx, Qy, scalar_u, scalar_v);\\n\\n x1= addmod(x1, n-r,n );\\n \\n return x1 == 0;\\n }\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) internal view returns (address)\\n {\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return address(0);\\n }\\n uint256 y=FCL_Elliptic_ZZ.ec_Decompress(r, v-27);\\n uint256 rinv=FCL_Elliptic_ZZ.FCL_nModInv(r);\\n uint256 u1=mulmod(FCL_Elliptic_ZZ.n-addmod(0,h,FCL_Elliptic_ZZ.n), rinv,FCL_Elliptic_ZZ.n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,FCL_Elliptic_ZZ.n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=FCL_Elliptic_ZZ.ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256 r, uint256 s, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n \\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via the contract at address Shamir8 assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n X= addmod(X, n-r,n );\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256[2] calldata rs, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via the contract at address Shamir8 assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n X= addmod(X, n-r,n );\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n}\\n\",\"keccak256\":\"0x679d2e9a655cd7e156a0cfc24de0aca88d4e0b34a8e0dfe6a599f23af092f5a2\",\"license\":\"MIT\"},\"FreshCryptoLib/FCL_ecdsa_utils.sol\":{\"content\":\"\\n//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_ecdsa.sol\\n///*\\n///*\\n///* DESCRIPTION: ecdsa verification implementation\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.19 <0.9.0;\\n\\n\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\n\\n\\nlibrary FCL_ecdsa_utils {\\n // Set parameters for curve sec256r1.public\\n //curve order (number of points)\\n uint256 constant n = FCL_Elliptic_ZZ.n;\\n \\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256 Qx, uint256 Qy) internal view returns (bool) {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return false;\\n }\\n if (!FCL_Elliptic_ZZ.ecAff_isOnCurve(Qx, Qy)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_Elliptic_ZZ.FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, FCL_Elliptic_ZZ.n);\\n uint256 scalar_v = mulmod(r, sInv, FCL_Elliptic_ZZ.n);\\n uint256 x1;\\n\\n x1 = FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(Qx, Qy, scalar_u, scalar_v);\\n x1= addmod(x1, n-r,n );\\n \\n \\n return x1 == 0;\\n }\\n\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256[2] calldata Q) internal view returns (bool) {\\n return ecdsa_verify(message, rs, Q[0], Q[1]);\\n }\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) internal view returns (address)\\n {\\n if (r == 0 || r >= FCL_Elliptic_ZZ.n || s == 0 || s >= FCL_Elliptic_ZZ.n) {\\n return address(0);\\n }\\n uint256 y=FCL_Elliptic_ZZ.ec_Decompress(r, v-27);\\n uint256 rinv=FCL_Elliptic_ZZ.FCL_nModInv(r);\\n uint256 u1=mulmod(FCL_Elliptic_ZZ.n-addmod(0,h,FCL_Elliptic_ZZ.n), rinv,FCL_Elliptic_ZZ.n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,FCL_Elliptic_ZZ.n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=FCL_Elliptic_ZZ.ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n\\n //ecdsa signature for test purpose only (who would like to have a private key onchain anyway ?)\\n //K is nonce, kpriv is private key\\n function ecdsa_sign(bytes32 message, uint256 k , uint256 kpriv) internal view returns(uint256 r, uint256 s)\\n {\\n r=FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(0,0, k, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n r=addmod(0,r, FCL_Elliptic_ZZ.n); \\n s=mulmod(FCL_Elliptic_ZZ.FCL_nModInv(k), addmod(uint256(message), mulmod(r, kpriv, FCL_Elliptic_ZZ.n),FCL_Elliptic_ZZ.n),FCL_Elliptic_ZZ.n);//s=k^-1.(h+r.kpriv)\\n\\n \\n if(r==0||s==0){\\n revert();\\n }\\n\\n\\n }\\n\\n //ecdsa key derivation\\n //kpriv is private key return (x,y) coordinates of associated Pubkey\\n function ecdsa_derivKpub(uint256 kpriv) internal view returns(uint256 x, uint256 y)\\n {\\n \\n x=FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(0,0, kpriv, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n y=FCL_Elliptic_ZZ.ec_Decompress(x, 1);\\n \\n if (FCL_Elliptic_ZZ.ecZZ_mulmuladd_S_asm(x, y, kpriv, FCL_Elliptic_ZZ.n - 1) != 0) //extract correct y value\\n {\\n y=FCL_Elliptic_ZZ.p-y;\\n } \\n\\n }\\n \\n //precomputations for 8 dimensional trick\\n function Precalc_8dim( uint256 Qx, uint256 Qy) internal view returns( uint[2][256] memory Prec)\\n {\\n \\n uint[2][8] memory Pow64_PQ; //store P, 64P, 128P, 192P, Q, 64Q, 128Q, 192Q\\n \\n //the trivial private keys 1 and -1 are forbidden\\n if(Qx==FCL_Elliptic_ZZ.gx)\\n {\\n revert();\\n }\\n Pow64_PQ[0][0]=FCL_Elliptic_ZZ.gx;\\n Pow64_PQ[0][1]=FCL_Elliptic_ZZ.gy;\\n \\n Pow64_PQ[4][0]=Qx;\\n Pow64_PQ[4][1]=Qy;\\n \\n /* raise to multiplication by 64 by 6 consecutive doubling*/\\n for(uint j=1;j<4;j++){\\n uint256 x;\\n uint256 y;\\n uint256 zz;\\n uint256 zzz;\\n \\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j-1][0], Pow64_PQ[j-1][1], 1, 1);\\n \\t(Pow64_PQ[j][0], Pow64_PQ[j][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n (x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j+3][0], Pow64_PQ[j+3][1], 1, 1);\\n \\t(Pow64_PQ[j+4][0], Pow64_PQ[j+4][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n\\n \\tfor(uint i=0;i<63;i++){\\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j][0], Pow64_PQ[j][1],1,1);\\n (Pow64_PQ[j][0], Pow64_PQ[j][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n \\t(x,y,zz,zzz)=FCL_Elliptic_ZZ.ecZZ_Dbl(Pow64_PQ[j+4][0], Pow64_PQ[j+4][1],1,1);\\n (Pow64_PQ[j+4][0], Pow64_PQ[j+4][1])=FCL_Elliptic_ZZ.ecZZ_SetAff(x,y,zz,zzz);\\n \\t}\\n }\\n \\n /* neutral point */\\n Prec[0][0]=0;\\n Prec[0][1]=0;\\n \\n \\t\\n for(uint i=1;i<256;i++)\\n { \\n Prec[i][0]=0;\\n Prec[i][1]=0;\\n \\n for(uint j=0;j<8;j++)\\n {\\n \\tif( (i&(1<=0.8.19 <0.9.0;\\n\\nlibrary FCL_Elliptic_ZZ {\\n // Set parameters for curve sec256r1.\\n\\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\\n //curve prime field modulus\\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n //short weierstrass first coefficient\\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\\n //short weierstrass second coefficient\\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\\n //generating point affine coordinates\\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\\n //curve order (number of points)\\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\\n /* -2 mod n constant, used to speed up inversion*/\\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\\n\\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\\n //P+1 div 4\\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\\n //arbitrary constant to express no quadratic residuosity\\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n\\n /**\\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\\n */\\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2modn)\\n mstore(add(pointer, 0xa0), n)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n /**\\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\\n */\\n\\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2)\\n mstore(add(pointer, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n\\n //Coron projective shuffling, take as input alpha as blinding factor\\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n \\n uint256 alpha2=mulmod(alpha,alpha,p);\\n \\n x3=mulmod(alpha2, x,p); //alpha^-2.x\\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\\n\\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\\n \\n return (x3, y3, zz3, zzz3);\\n }\\n\\n\\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\\n u2=addmod(u2, p-u1, p);// P = U2-U1\\n x1=mulmod(u2, u2, p);//PP\\n x2=mulmod(x1, u2, p);//PPP\\n \\n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \\n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\\n\\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \\n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\\n\\n return (x3, y3, zz3, zzz3);\\n }\\n\\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\\n/// @param self The integer of which to find the modular inverse\\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\\n\\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\\n assembly (\\\"memory-safe\\\") {\\n // load the free memory pointer value\\n let pointer := mload(0x40)\\n\\n // Define length of base (Bsize)\\n mstore(pointer, 0x20)\\n // Define the exponent size (Esize)\\n mstore(add(pointer, 0x20), 0x20)\\n // Define the modulus size (Msize)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base (B)\\n mstore(add(pointer, 0x60), self)\\n // Define the exponent (E)\\n mstore(add(pointer, 0x80), pp1div4)\\n // We save the point of the last argument, it will be override by the result\\n // of the precompile call in order to avoid paying for the memory expansion properly\\n let _result := add(pointer, 0xa0)\\n // Define the modulus (M)\\n mstore(_result, p)\\n\\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\\n if iszero(\\n staticcall(\\n not(0), // amount of gas to send\\n MODEXP_PRECOMPILE, // target\\n pointer, // argsOffset\\n 0xc0, // argsSize (6 * 32 bytes)\\n _result, // retOffset (we override M to avoid paying for the memory expansion)\\n 0x20 // retSize (32 bytes)\\n )\\n ) { revert(0, 0) }\\n\\n result := mload(_result)\\n// result :=addmod(result,0,p)\\n }\\n if(mulmod(result,result,p)!=self){\\n result=_NOTSQUARE;\\n }\\n \\n return result;\\n}\\n /**\\n * /* @dev Convert from affine rep to XYZZ rep\\n */\\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\\n unchecked {\\n P[2] = 1; //ZZ\\n P[3] = 1; //ZZZ\\n P[0] = x0;\\n P[1] = y0;\\n }\\n }\\n\\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \\n\\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\\n\\n y=SqrtMod(y2);\\n if(y==_NOTSQUARE){\\n return _NOTONCURVE;\\n }\\n if((y&1)!=(parity&1)){\\n y=p-y;\\n }\\n }\\n\\n /**\\n * /* @dev Convert from XYZZ rep to affine rep\\n */\\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\\n y1 = mulmod(y, zzzInv, p); //Y/zzz\\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\\n zzzInv = mulmod(_b, _b, p); //1/zz\\n x1 = mulmod(x, zzzInv, p); //X/zz\\n }\\n\\n /**\\n * /* @dev Sutherland2008 doubling\\n */\\n /* The \\\"dbl-2008-s-1\\\" doubling formulas */\\n\\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n assembly {\\n P0 := mulmod(2, y, p) //U = 2*Y1\\n P2 := mulmod(P0, P0, p) // V=U^2\\n P3 := mulmod(x, P2, p) // S = X1*V\\n P1 := mulmod(P0, P2, p) // W=UV\\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\\n }\\n }\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\\n */\\n\\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n if (y1 == 0) {\\n return (x2, y2, 1, 1);\\n }\\n\\n assembly {\\n y1 := sub(p, y1)\\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\\n P0 := mulmod(x2, x2, p) //PP = P^2\\n P1 := mulmod(P0, x2, p) //PPP = P*PP\\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\\n }\\n //end assembly\\n } //end unchecked\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Return the zero curve in XYZZ coordinates.\\n */\\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\\n return (0, 0, 0, 0);\\n }\\n /**\\n * @dev Check if point is the neutral of the curve\\n */\\n\\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\\n return y0 == 0;\\n }\\n /**\\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\\n */\\n\\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\\n return (0, 0);\\n }\\n\\n /**\\n * @dev Check if the curve is the zero curve in affine rep.\\n */\\n // uint256 x, uint256 y)\\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\\n return (y == 0);\\n }\\n\\n /**\\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\\n */\\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\\n if ( ((0 == x)&&( 0 == y)) || x == p || y == p) {\\n return false;\\n }\\n unchecked {\\n uint256 LHS = mulmod(y, y, p); // y^2\\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\\n\\n return LHS == RHS;\\n }\\n }\\n\\n /**\\n * @dev Add two elliptic curve points in affine coordinates. Deal with P=Q\\n */\\n\\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\\n uint256 zz0;\\n uint256 zzz0;\\n\\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\\n if((x0==x1)&&(y0==y1)) {\\n (x0, y0, zz0, zzz0) = ecZZ_Dbl(x0, y0,1,1);\\n }\\n else{\\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\\n }\\n\\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\\n }\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns only x for ECDSA use \\n * */\\n function ecZZ_mulmuladd_S_asm(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 Y;\\n uint256 index = 255;\\n uint256 H0;\\n uint256 H1;\\n\\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return 0;\\n\\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); \\n if((H0==0)&&(H1==0))//handling Q=-G\\n {\\n scalar_u=addmod(scalar_u, n-scalar_v, n);\\n scalar_v=0;\\n\\n }\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n X := H0\\n Y := H1\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := H0\\n T2 := H1\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := mulmod(addmod(X, zz, p), addmod(X, sub(p, zz), p), p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M=3*(X-ZZ)(X+ZZ)\\n\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n let T := mload(0x40)\\n mstore(add(T, 0x60), zz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n //Y:=mulmod(Y,zzz,p)//Y/zzz\\n //zz :=mulmod(zz, mload(T),p) //1/z\\n //zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, mload(T), p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return X;\\n }\\n\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns affine representation of point (normalized) \\n * */\\n function ecZZ_mulmuladd(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X, uint256 Y) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 index = 255;\\n uint256[6] memory T;\\n uint256[2] memory H;\\n \\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\\n\\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n Y := mload(add(H,32))\\n X := mload(H)\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := mload(H)\\n T2 := mload(add(H,32))\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zzz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n Y:=mulmod(Y,mload(T),p)//Y/zzz\\n zz :=mulmod(zz, mload(T),p) //1/z\\n zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, zz, p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return (X,Y);\\n }\\n\\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\\n //contract at given address dataPointer\\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\\n // the external tool to generate tables from public key is in the /sage directory\\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n unchecked {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n extcodecopy(dataPointer, T, mload(T), 64)\\n let index := sub(zz, 1)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for {} gt(index, 191) { index := add(index, 191) } {\\n //inline Double\\n {\\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(TT1, TT1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n let T1 := mulmod(TT1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n }\\n {\\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n let index2 := sub(index, 64)\\n let T3 :=\\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\\n let index3 := sub(index2, 64)\\n let T2 :=\\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\\n index := sub(index3, 64)\\n let T1 :=\\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T1) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n extcodecopy(dataPointer, T, T1, 64)\\n }\\n\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n\\n // inlined EcZZ_AddN\\n if iszero(zz) {\\n X := mload(T)\\n Y := mload(add(T, 32))\\n zz := 1\\n zzz := 1\\n\\n continue\\n }\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n\\n //special case ecAdd(P,P)=EcDbl\\n if iszero(y2) {\\n if iszero(T2) {\\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n let T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n let T4 := mulmod(T2, T2, p)\\n let T1 := mulmod(T4, T2, p) //\\n zz := mulmod(zz, T4, p)\\n //zzz3=V*ZZ1\\n zzz := mulmod(zzz, T1, p) // W=UV/\\n let zz1 := mulmod(X, T4, p)\\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n \\n\\n // improving the extcodecopy trick : append array at end of contract\\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n unchecked {\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n codecopy(T, add(mload(T), dataPointer), 64)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n //index:=add(index,192), restore index, interleaved with loop\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T4) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n codecopy(T, add(T4, dataPointer), 64)\\n\\n // inlined EcZZ_AddN\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n T4 := mulmod(T2, T2, p)\\n T1 := mulmod(T4, T2, p)\\n T2 := mulmod(zz, T4, p) // W=UV\\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\\n let zz1 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\\n zz := T2\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n\\n\\n} //EOF\\n\",\"keccak256\":\"0xa09802f3ca65d654d56260f40db449f9fbefbadb64429772e6f133ad6370eab9\",\"license\":\"MIT\"},\"FreshCryptoLib/utils/Base64Url.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Encode (without '=' padding) \\n * @author evmbrahmin, adapted from hiromin's Base64URL libraries\\n */\\nlibrary Base64Url {\\n /**\\n * @dev Base64Url Encoding Table\\n */\\n string internal constant ENCODING_TABLE =\\n \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\\\";\\n\\n function encode(bytes memory data) internal pure returns (string memory) {\\n if (data.length == 0) return \\\"\\\";\\n\\n // Load the table into memory\\n string memory table = ENCODING_TABLE;\\n\\n string memory result = new string(4 * ((data.length + 2) / 3));\\n\\n // @solidity memory-safe-assembly\\n assembly {\\n let tablePtr := add(table, 1)\\n let resultPtr := add(result, 32)\\n\\n for {\\n let dataPtr := data\\n let endPtr := add(data, mload(data))\\n } lt(dataPtr, endPtr) {\\n\\n } {\\n dataPtr := add(dataPtr, 3)\\n let input := mload(dataPtr)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(18, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(12, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(6, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))\\n resultPtr := add(resultPtr, 1)\\n }\\n\\n // Remove the padding adjustment logic\\n switch mod(mload(data), 3)\\n case 1 {\\n // Adjust for the last byte of data\\n resultPtr := sub(resultPtr, 2)\\n }\\n case 2 {\\n // Adjust for the last two bytes of data\\n resultPtr := sub(resultPtr, 1)\\n }\\n \\n // Set the correct length of the result string\\n mstore(result, sub(resultPtr, add(result, 32)))\\n }\\n\\n return result; \\n }\\n}\\n\",\"keccak256\":\"0xc9d5fbb0ef9ff0756eb5aabe7a32b2bf0f8f3c533d4451dd5778fe77aee7f0c1\",\"license\":\"Apache-2.0\"},\"contracts/P256Signer.sol\":{\"content\":\"pragma solidity ^0.8.0;\\n\\nimport {FCL_WebAuthn} from \\\"FreshCryptoLib/FCL_Webauthn.sol\\\";\\n\\n/// @title P256Signer\\n/// @notice A contract used to verify ECDSA signatures over secp256r1 through\\n/// EIP-1271 of Webauthn payloads.\\n/// @dev This contract is the implementation. It is meant to be used through\\n/// proxy clone.\\ncontract P256Signer {\\n /// @notice The EIP-1271 magic value\\n bytes4 internal constant EIP1271_MAGICVALUE = 0x1626ba7e;\\n\\n /// @notice The old EIP-1271 magic value\\n bytes4 internal constant OLD_EIP1271_MAGICVALUE = 0x20c13b0b;\\n\\n /// @notice Whether the contract has been initialized\\n bool public initialized;\\n\\n /// @notice The x coordinate of the secp256r1 public key\\n uint256 public x;\\n\\n /// @notice The y coordinate of the secp256r1 public key\\n uint256 public y;\\n\\n /// @notice Error message when the signature is invalid\\n error InvalidSignature();\\n\\n /// @notice Error message when the hash is invalid\\n error InvalidHash();\\n\\n /// @notice Error message when the contract is already initialized\\n error AlreadyInitialized();\\n\\n constructor() {\\n initialized = true;\\n }\\n\\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\\n /// @param _hash The hash of the data signed\\n /// @param _signature The signature\\n /// @return The EIP-1271 magic value\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) public view returns (bytes4) {\\n _validate(abi.encode(_hash), _signature);\\n return EIP1271_MAGICVALUE;\\n }\\n\\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\\n /// @dev This is the old version of the function of EIP-1271 using bytes\\n /// memory instead of bytes32\\n /// @param _hash The hash of the data signed\\n /// @param _signature The signature\\n /// @return The EIP-1271 magic value\\n function isValidSignature(bytes memory _hash, bytes calldata _signature) public view returns (bytes4) {\\n _validate(_hash, _signature);\\n return OLD_EIP1271_MAGICVALUE;\\n }\\n\\n struct SignatureLayout {\\n bytes authenticatorData;\\n bytes clientData;\\n uint256 challengeOffset;\\n uint256[2] rs;\\n }\\n\\n /// @notice Validates the signature\\n /// @param data The data signed\\n /// @param _signature The signature\\n function _validate(bytes memory data, bytes calldata _signature) private view {\\n bytes32 _hash = keccak256(data);\\n SignatureLayout calldata signaturePointer;\\n // This code should precalculate the offsets of variables as defined in the layout\\n // Calldata variables are represented as offsets, and, I think, length for dynamic types\\n // If the calldata is malformed (e.g., shorter than expected), this will revert with an out of bounds error\\n assembly {\\n signaturePointer := _signature.offset\\n }\\n\\n bool valid = FCL_WebAuthn.checkSignature(\\n signaturePointer.authenticatorData,\\n 0x01,\\n signaturePointer.clientData,\\n _hash,\\n signaturePointer.challengeOffset,\\n signaturePointer.rs,\\n x,\\n y\\n );\\n\\n if (!valid) revert InvalidSignature();\\n }\\n\\n /// @dev This function is only callable once and needs to be called immediately\\n /// after deployment by the factory in the same transaction.\\n /// @param x_ The x coordinate of the public key\\n /// @param y_ The y coordinate of the public key\\n function initialize(uint256 x_, uint256 y_) external {\\n if (initialized) revert AlreadyInitialized();\\n initialized = true;\\n x = x_;\\n y = y_;\\n }\\n}\\n\",\"keccak256\":\"0xfc1b006adb6ace0364918015a1aa64439374f813383bcc71290f6b37b66641e5\"},\"contracts/P256SignerFactory.sol\":{\"content\":\"pragma solidity ^0.8.0;\\n\\nimport {P256Signer} from \\\"./P256Signer.sol\\\";\\nimport \\\"solady/src/utils/LibClone.sol\\\";\\n\\n/// @title P256SignerFactory\\n/// @notice Factory contract for creating proxies for P256Signer\\ncontract P256SignerFactory {\\n /// @notice The implementation address of the P256Signer contract\\n address public immutable implementation;\\n\\n constructor(address implementation_) {\\n implementation = implementation_;\\n }\\n\\n /// @notice Emitted when a new P256Signer proxy contract is created\\n event NewSignerCreated(uint256 indexed x, uint256 indexed y, address signer);\\n\\n /// @notice Creates a new P256Signer proxy contract\\n /// @param x The x coordinate of the public key\\n /// @param y The y coordinate of the public key\\n function create(uint256 x, uint256 y) external returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(x, y));\\n address signer = LibClone.cloneDeterministic(implementation, salt);\\n P256Signer(signer).initialize(x, y);\\n emit NewSignerCreated(x, y, signer);\\n return signer;\\n }\\n}\\n\",\"keccak256\":\"0x3bdac08bf7a1c4c1621474b10733f74a9487359212705bbca42ec678aa549a53\"},\"solady/src/utils/LibClone.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Minimal proxy library.\\n/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)\\n/// @author Minimal proxy by 0age (https://github.com/0age)\\n/// @author Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie\\n/// (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)\\n///\\n/// @dev Minimal proxy:\\n/// Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime,\\n/// it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern,\\n/// which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.\\n///\\n/// @dev Minimal proxy (PUSH0 variant):\\n/// This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai.\\n/// It is optimized first for minimal runtime gas, then for minimal bytecode.\\n/// The PUSH0 clone functions are intentionally postfixed with a jarring \\\"_PUSH0\\\" as\\n/// many EVM chains may not support the PUSH0 opcode in the early months after Shanghai.\\n/// Please use with caution.\\n///\\n/// @dev Clones with immutable args (CWIA):\\n/// The implementation of CWIA here implements a `receive()` method that emits the\\n/// `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata,\\n/// enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards\\n/// composability. The minimal proxy implementation does not offer this feature.\\nlibrary LibClone {\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* CUSTOM ERRORS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Unable to deploy the clone.\\n error DeploymentFailed();\\n\\n /// @dev The salt must start with either the zero address or the caller.\\n error SaltDoesNotStartWithCaller();\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* MINIMAL PROXY OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a clone of `implementation`.\\n function clone(address implementation) internal returns (address instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n /**\\n * --------------------------------------------------------------------------+\\n * CREATION (9 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * 60 runSize | PUSH1 runSize | r | |\\n * 3d | RETURNDATASIZE | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * --------------------------------------------------------------------------|\\n * RUNTIME (44 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * |\\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | 0 | |\\n * 3d | RETURNDATASIZE | 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 0 0 | |\\n * |\\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 cds 0 0 0 0 | |\\n * 37 | CALLDATACOPY | 0 0 0 0 | [0..cds): calldata |\\n * |\\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | [0..cds): calldata |\\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 0 0 | [0..cds): calldata |\\n * 5a | GAS | gas addr 0 cds 0 0 0 0 | [0..cds): calldata |\\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata |\\n * |\\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata |\\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata |\\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata |\\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\\n * |\\n * 60 0x2a | PUSH1 0x2a | 0x2a success 0 rds | [0..rds): returndata |\\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\\n * |\\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * --------------------------------------------------------------------------+\\n */\\n\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n instance := create(0, 0x0c, 0x35)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Deploys a deterministic clone of `implementation` with `salt`.\\n function cloneDeterministic(address implementation, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n instance := create2(0, 0x0c, 0x35, salt)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the clone of `implementation`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash(address implementation) internal pure returns (bytes32 hash) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n hash := keccak256(0x0c, 0x35)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic clone of `implementation`,\\n /// with `salt` by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(address implementation, bytes32 salt, address deployer)\\n internal\\n pure\\n returns (address predicted)\\n {\\n bytes32 hash = initCodeHash(implementation);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* MINIMAL PROXY OPERATIONS (PUSH0 VARIANT) */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a PUSH0 clone of `implementation`.\\n function clone_PUSH0(address implementation) internal returns (address instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n /**\\n * --------------------------------------------------------------------------+\\n * CREATION (9 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * 60 runSize | PUSH1 runSize | r | |\\n * 5f | PUSH0 | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 5f | PUSH0 | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * --------------------------------------------------------------------------|\\n * RUNTIME (45 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * |\\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\\n * 5f | PUSH0 | 0 | |\\n * 5f | PUSH0 | 0 0 | |\\n * |\\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 | |\\n * 5f | PUSH0 | 0 cds 0 0 | |\\n * 5f | PUSH0 | 0 0 cds 0 0 | |\\n * 37 | CALLDATACOPY | 0 0 | [0..cds): calldata |\\n * |\\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 | [0..cds): calldata |\\n * 5f | PUSH0 | 0 cds 0 0 | [0..cds): calldata |\\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 | [0..cds): calldata |\\n * 5a | GAS | gas addr 0 cds 0 0 | [0..cds): calldata |\\n * f4 | DELEGATECALL | success | [0..cds): calldata |\\n * |\\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success | [0..cds): calldata |\\n * 5f | PUSH0 | 0 rds success | [0..cds): calldata |\\n * 5f | PUSH0 | 0 0 rds success | [0..cds): calldata |\\n * 3e | RETURNDATACOPY | success | [0..rds): returndata |\\n * |\\n * 60 0x29 | PUSH1 0x29 | 0x29 success | [0..rds): returndata |\\n * 57 | JUMPI | | [0..rds): returndata |\\n * |\\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | | [0..rds): returndata |\\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * --------------------------------------------------------------------------+\\n */\\n\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n instance := create(0, 0x0e, 0x36)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Deploys a deterministic PUSH0 clone of `implementation` with `salt`.\\n function cloneDeterministic_PUSH0(address implementation, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n instance := create2(0, 0x0e, 0x36, salt)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the PUSH0 clone of `implementation`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash_PUSH0(address implementation) internal pure returns (bytes32 hash) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n hash := keccak256(0x0e, 0x36)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic PUSH0 clone of `implementation`,\\n /// with `salt` by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress_PUSH0(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n bytes32 hash = initCodeHash_PUSH0(implementation);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* CLONES WITH IMMUTABLE ARGS OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a minimal proxy with `implementation`,\\n /// using immutable arguments encoded in `data`.\\n ///\\n /// Note: This implementation of CWIA differs from the original implementation.\\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\\n function clone(address implementation, bytes memory data) internal returns (address instance) {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n // The `creationSize` is `extraLength + 108`\\n // The `runSize` is `creationSize - 10`.\\n\\n /**\\n * ---------------------------------------------------------------------------------------------------+\\n * CREATION (10 bytes) |\\n * ---------------------------------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * ---------------------------------------------------------------------------------------------------|\\n * 61 runSize | PUSH2 runSize | r | |\\n * 3d | RETURNDATASIZE | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * ---------------------------------------------------------------------------------------------------|\\n * RUNTIME (98 bytes + extraLength) |\\n * ---------------------------------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * ---------------------------------------------------------------------------------------------------|\\n * |\\n * ::: if no calldata, emit event & return w/o `DELEGATECALL` ::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds | |\\n * 60 0x2c | PUSH1 0x2c | 0x2c cds | |\\n * 57 | JUMPI | | |\\n * 34 | CALLVALUE | cv | |\\n * 3d | RETURNDATASIZE | 0 cv | |\\n * 52 | MSTORE | | [0..0x20): callvalue |\\n * 7f sig | PUSH32 0x9e.. | sig | [0..0x20): callvalue |\\n * 59 | MSIZE | 0x20 sig | [0..0x20): callvalue |\\n * 3d | RETURNDATASIZE | 0 0x20 sig | [0..0x20): callvalue |\\n * a1 | LOG1 | | [0..0x20): callvalue |\\n * 00 | STOP | | [0..0x20): callvalue |\\n * 5b | JUMPDEST | | |\\n * |\\n * ::: copy calldata to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds | |\\n * 3d | RETURNDATASIZE | 0 cds | |\\n * 3d | RETURNDATASIZE | 0 0 cds | |\\n * 37 | CALLDATACOPY | | [0..cds): calldata |\\n * |\\n * ::: keep some values in stack :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 0 0 | [0..cds): calldata |\\n * 61 extra | PUSH2 extra | e 0 0 0 0 | [0..cds): calldata |\\n * |\\n * ::: copy extra data to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 80 | DUP1 | e e 0 0 0 0 | [0..cds): calldata |\\n * 60 0x62 | PUSH1 0x62 | 0x62 e e 0 0 0 0 | [0..cds): calldata |\\n * 36 | CALLDATASIZE | cds 0x62 e e 0 0 0 0 | [0..cds): calldata |\\n * 39 | CODECOPY | e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * |\\n * ::: delegate call to the implementation contract ::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 01 | ADD | cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3d | RETURNDATASIZE | 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 73 addr | PUSH20 addr | addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 5a | GAS | gas addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * |\\n * ::: copy return data to memory ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\\n * |\\n * 60 0x60 | PUSH1 0x60 | 0x60 success 0 rds | [0..rds): returndata |\\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\\n * |\\n * ::: revert ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * ---------------------------------------------------------------------------------------------------+\\n */\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\\n // The actual EVM limit may be smaller and may change over time.\\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Create the instance.\\n instance := create(0, sub(data, 0x4c), add(extraLength, 0x6c))\\n\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Deploys a deterministic clone of `implementation`,\\n /// using immutable arguments encoded in `data`, with `salt`.\\n ///\\n /// Note: This implementation of CWIA differs from the original implementation.\\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\\n function cloneDeterministic(address implementation, bytes memory data, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\\n // The actual EVM limit may be smaller and may change over time.\\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Create the instance.\\n instance := create2(0, sub(data, 0x4c), add(extraLength, 0x6c), salt)\\n\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the clone of `implementation`\\n /// using immutable arguments encoded in `data`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash(address implementation, bytes memory data)\\n internal\\n pure\\n returns (bytes32 hash)\\n {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // Do a out-of-gas revert if `dataLength` is too big. 0xffff - 0x02 - 0x62 = 0xff9b.\\n // The actual EVM limit may be smaller and may change over time.\\n returndatacopy(returndatasize(), returndatasize(), gt(dataLength, 0xff9b))\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n sub(data, 0x5a),\\n or(shl(0x78, add(extraLength, 0x62)), 0x6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Compute and store the bytecode hash.\\n hash := keccak256(sub(data, 0x4c), add(extraLength, 0x6c))\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic clone of\\n /// `implementation` using immutable arguments encoded in `data`, with `salt`, by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(\\n address implementation,\\n bytes memory data,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n bytes32 hash = initCodeHash(implementation, data);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* OTHER OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Returns the address when a contract with initialization code hash,\\n /// `hash`, is deployed with `salt`, by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(bytes32 hash, bytes32 salt, address deployer)\\n internal\\n pure\\n returns (address predicted)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // Compute and store the bytecode hash.\\n mstore8(0x00, 0xff) // Write the prefix.\\n mstore(0x35, hash)\\n mstore(0x01, shl(96, deployer))\\n mstore(0x15, salt)\\n predicted := keccak256(0x00, 0x55)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x35, 0)\\n }\\n }\\n\\n /// @dev Reverts if `salt` does not start with either the zero address or the caller.\\n function checkStartsWithCaller(bytes32 salt) internal view {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // If the salt does not start with the zero address or the caller.\\n if iszero(or(iszero(shr(96, salt)), eq(caller(), shr(96, salt)))) {\\n // Store the function selector of `SaltDoesNotStartWithCaller()`.\\n mstore(0x00, 0x2f634836)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x159b64c65da9e6efe93b8df8c6bb1c7672a7511dcaba414aaa3e447f6d7065e6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"NewSignerCreated(uint256,uint256,address)":{"notice":"Emitted when a new P256Signer proxy contract is created"}},"kind":"user","methods":{"create(uint256,uint256)":{"notice":"Creates a new P256Signer proxy contract"},"implementation()":{"notice":"The implementation address of the P256Signer contract"}},"notice":"Factory contract for creating proxies for P256Signer","version":1}}},"solady/src/utils/LibClone.sol":{"LibClone":{"abi":[{"inputs":[],"name":"DeploymentFailed","type":"error"},{"inputs":[],"name":"SaltDoesNotStartWithCaller","type":"error"}],"devdoc":{"author":"Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)Minimal proxy by 0age (https://github.com/0age)Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)","details":"Minimal proxy: Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime, it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern, which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.Minimal proxy (PUSH0 variant): This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai. It is optimized first for minimal runtime gas, then for minimal bytecode. The PUSH0 clone functions are intentionally postfixed with a jarring \"_PUSH0\" as many EVM chains may not support the PUSH0 opcode in the early months after Shanghai. Please use with caution.Clones with immutable args (CWIA): The implementation of CWIA here implements a `receive()` method that emits the `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata, enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards composability. The minimal proxy implementation does not offer this feature.","errors":{"DeploymentFailed()":[{"details":"Unable to deploy the clone."}],"SaltDoesNotStartWithCaller()":[{"details":"The salt must start with either the zero address or the caller."}]},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201b29770ebfd9f20c56f183e6554d507ec6d536d6e6814af6e0744e59bb355dc864736f6c63430008140033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL 0x29 PUSH24 0xEBFD9F20C56F183E6554D507EC6D536D6E6814AF6E0744E MSIZE 0xBB CALLDATALOAD 0x5D 0xC8 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"1500:36285:7:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1500:36285:7;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201b29770ebfd9f20c56f183e6554d507ec6d536d6e6814af6e0744e59bb355dc864736f6c63430008140033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL 0x29 PUSH24 0xEBFD9F20C56F183E6554D507EC6D536D6E6814AF6E0744E MSIZE 0xBB CALLDATALOAD 0x5D 0xC8 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"1500:36285:7:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"checkStartsWithCaller(bytes32)":"infinite","clone(address)":"infinite","clone(address,bytes memory)":"infinite","cloneDeterministic(address,bytes memory,bytes32)":"infinite","cloneDeterministic(address,bytes32)":"infinite","cloneDeterministic_PUSH0(address,bytes32)":"infinite","clone_PUSH0(address)":"infinite","initCodeHash(address)":"infinite","initCodeHash(address,bytes memory)":"infinite","initCodeHash_PUSH0(address)":"infinite","predictDeterministicAddress(address,bytes memory,bytes32,address)":"infinite","predictDeterministicAddress(address,bytes32,address)":"infinite","predictDeterministicAddress(bytes32,bytes32,address)":"infinite","predictDeterministicAddress_PUSH0(address,bytes32,address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DeploymentFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SaltDoesNotStartWithCaller\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)Minimal proxy by 0age (https://github.com/0age)Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)\",\"details\":\"Minimal proxy: Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime, it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern, which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.Minimal proxy (PUSH0 variant): This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai. It is optimized first for minimal runtime gas, then for minimal bytecode. The PUSH0 clone functions are intentionally postfixed with a jarring \\\"_PUSH0\\\" as many EVM chains may not support the PUSH0 opcode in the early months after Shanghai. Please use with caution.Clones with immutable args (CWIA): The implementation of CWIA here implements a `receive()` method that emits the `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata, enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards composability. The minimal proxy implementation does not offer this feature.\",\"errors\":{\"DeploymentFailed()\":[{\"details\":\"Unable to deploy the clone.\"}],\"SaltDoesNotStartWithCaller()\":[{\"details\":\"The salt must start with either the zero address or the caller.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Minimal proxy library.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solady/src/utils/LibClone.sol\":\"LibClone\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"solady/src/utils/LibClone.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Minimal proxy library.\\n/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)\\n/// @author Minimal proxy by 0age (https://github.com/0age)\\n/// @author Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie\\n/// (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)\\n///\\n/// @dev Minimal proxy:\\n/// Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime,\\n/// it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern,\\n/// which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.\\n///\\n/// @dev Minimal proxy (PUSH0 variant):\\n/// This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai.\\n/// It is optimized first for minimal runtime gas, then for minimal bytecode.\\n/// The PUSH0 clone functions are intentionally postfixed with a jarring \\\"_PUSH0\\\" as\\n/// many EVM chains may not support the PUSH0 opcode in the early months after Shanghai.\\n/// Please use with caution.\\n///\\n/// @dev Clones with immutable args (CWIA):\\n/// The implementation of CWIA here implements a `receive()` method that emits the\\n/// `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata,\\n/// enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards\\n/// composability. The minimal proxy implementation does not offer this feature.\\nlibrary LibClone {\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* CUSTOM ERRORS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Unable to deploy the clone.\\n error DeploymentFailed();\\n\\n /// @dev The salt must start with either the zero address or the caller.\\n error SaltDoesNotStartWithCaller();\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* MINIMAL PROXY OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a clone of `implementation`.\\n function clone(address implementation) internal returns (address instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n /**\\n * --------------------------------------------------------------------------+\\n * CREATION (9 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * 60 runSize | PUSH1 runSize | r | |\\n * 3d | RETURNDATASIZE | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * --------------------------------------------------------------------------|\\n * RUNTIME (44 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * |\\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | 0 | |\\n * 3d | RETURNDATASIZE | 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 0 0 | |\\n * |\\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 cds 0 0 0 0 | |\\n * 37 | CALLDATACOPY | 0 0 0 0 | [0..cds): calldata |\\n * |\\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | [0..cds): calldata |\\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 0 0 | [0..cds): calldata |\\n * 5a | GAS | gas addr 0 cds 0 0 0 0 | [0..cds): calldata |\\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata |\\n * |\\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata |\\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata |\\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata |\\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\\n * |\\n * 60 0x2a | PUSH1 0x2a | 0x2a success 0 rds | [0..rds): returndata |\\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\\n * |\\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * --------------------------------------------------------------------------+\\n */\\n\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n instance := create(0, 0x0c, 0x35)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Deploys a deterministic clone of `implementation` with `salt`.\\n function cloneDeterministic(address implementation, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n instance := create2(0, 0x0c, 0x35, salt)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the clone of `implementation`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash(address implementation) internal pure returns (bytes32 hash) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n hash := keccak256(0x0c, 0x35)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic clone of `implementation`,\\n /// with `salt` by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(address implementation, bytes32 salt, address deployer)\\n internal\\n pure\\n returns (address predicted)\\n {\\n bytes32 hash = initCodeHash(implementation);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* MINIMAL PROXY OPERATIONS (PUSH0 VARIANT) */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a PUSH0 clone of `implementation`.\\n function clone_PUSH0(address implementation) internal returns (address instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n /**\\n * --------------------------------------------------------------------------+\\n * CREATION (9 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * 60 runSize | PUSH1 runSize | r | |\\n * 5f | PUSH0 | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 5f | PUSH0 | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * --------------------------------------------------------------------------|\\n * RUNTIME (45 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * |\\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\\n * 5f | PUSH0 | 0 | |\\n * 5f | PUSH0 | 0 0 | |\\n * |\\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 | |\\n * 5f | PUSH0 | 0 cds 0 0 | |\\n * 5f | PUSH0 | 0 0 cds 0 0 | |\\n * 37 | CALLDATACOPY | 0 0 | [0..cds): calldata |\\n * |\\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 | [0..cds): calldata |\\n * 5f | PUSH0 | 0 cds 0 0 | [0..cds): calldata |\\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 | [0..cds): calldata |\\n * 5a | GAS | gas addr 0 cds 0 0 | [0..cds): calldata |\\n * f4 | DELEGATECALL | success | [0..cds): calldata |\\n * |\\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success | [0..cds): calldata |\\n * 5f | PUSH0 | 0 rds success | [0..cds): calldata |\\n * 5f | PUSH0 | 0 0 rds success | [0..cds): calldata |\\n * 3e | RETURNDATACOPY | success | [0..rds): returndata |\\n * |\\n * 60 0x29 | PUSH1 0x29 | 0x29 success | [0..rds): returndata |\\n * 57 | JUMPI | | [0..rds): returndata |\\n * |\\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | | [0..rds): returndata |\\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * --------------------------------------------------------------------------+\\n */\\n\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n instance := create(0, 0x0e, 0x36)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Deploys a deterministic PUSH0 clone of `implementation` with `salt`.\\n function cloneDeterministic_PUSH0(address implementation, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n instance := create2(0, 0x0e, 0x36, salt)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the PUSH0 clone of `implementation`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash_PUSH0(address implementation) internal pure returns (bytes32 hash) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n hash := keccak256(0x0e, 0x36)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic PUSH0 clone of `implementation`,\\n /// with `salt` by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress_PUSH0(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n bytes32 hash = initCodeHash_PUSH0(implementation);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* CLONES WITH IMMUTABLE ARGS OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a minimal proxy with `implementation`,\\n /// using immutable arguments encoded in `data`.\\n ///\\n /// Note: This implementation of CWIA differs from the original implementation.\\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\\n function clone(address implementation, bytes memory data) internal returns (address instance) {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n // The `creationSize` is `extraLength + 108`\\n // The `runSize` is `creationSize - 10`.\\n\\n /**\\n * ---------------------------------------------------------------------------------------------------+\\n * CREATION (10 bytes) |\\n * ---------------------------------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * ---------------------------------------------------------------------------------------------------|\\n * 61 runSize | PUSH2 runSize | r | |\\n * 3d | RETURNDATASIZE | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * ---------------------------------------------------------------------------------------------------|\\n * RUNTIME (98 bytes + extraLength) |\\n * ---------------------------------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * ---------------------------------------------------------------------------------------------------|\\n * |\\n * ::: if no calldata, emit event & return w/o `DELEGATECALL` ::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds | |\\n * 60 0x2c | PUSH1 0x2c | 0x2c cds | |\\n * 57 | JUMPI | | |\\n * 34 | CALLVALUE | cv | |\\n * 3d | RETURNDATASIZE | 0 cv | |\\n * 52 | MSTORE | | [0..0x20): callvalue |\\n * 7f sig | PUSH32 0x9e.. | sig | [0..0x20): callvalue |\\n * 59 | MSIZE | 0x20 sig | [0..0x20): callvalue |\\n * 3d | RETURNDATASIZE | 0 0x20 sig | [0..0x20): callvalue |\\n * a1 | LOG1 | | [0..0x20): callvalue |\\n * 00 | STOP | | [0..0x20): callvalue |\\n * 5b | JUMPDEST | | |\\n * |\\n * ::: copy calldata to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds | |\\n * 3d | RETURNDATASIZE | 0 cds | |\\n * 3d | RETURNDATASIZE | 0 0 cds | |\\n * 37 | CALLDATACOPY | | [0..cds): calldata |\\n * |\\n * ::: keep some values in stack :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 0 0 | [0..cds): calldata |\\n * 61 extra | PUSH2 extra | e 0 0 0 0 | [0..cds): calldata |\\n * |\\n * ::: copy extra data to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 80 | DUP1 | e e 0 0 0 0 | [0..cds): calldata |\\n * 60 0x62 | PUSH1 0x62 | 0x62 e e 0 0 0 0 | [0..cds): calldata |\\n * 36 | CALLDATASIZE | cds 0x62 e e 0 0 0 0 | [0..cds): calldata |\\n * 39 | CODECOPY | e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * |\\n * ::: delegate call to the implementation contract ::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 01 | ADD | cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3d | RETURNDATASIZE | 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 73 addr | PUSH20 addr | addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 5a | GAS | gas addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * |\\n * ::: copy return data to memory ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\\n * |\\n * 60 0x60 | PUSH1 0x60 | 0x60 success 0 rds | [0..rds): returndata |\\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\\n * |\\n * ::: revert ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * ---------------------------------------------------------------------------------------------------+\\n */\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\\n // The actual EVM limit may be smaller and may change over time.\\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Create the instance.\\n instance := create(0, sub(data, 0x4c), add(extraLength, 0x6c))\\n\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Deploys a deterministic clone of `implementation`,\\n /// using immutable arguments encoded in `data`, with `salt`.\\n ///\\n /// Note: This implementation of CWIA differs from the original implementation.\\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\\n function cloneDeterministic(address implementation, bytes memory data, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\\n // The actual EVM limit may be smaller and may change over time.\\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Create the instance.\\n instance := create2(0, sub(data, 0x4c), add(extraLength, 0x6c), salt)\\n\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the clone of `implementation`\\n /// using immutable arguments encoded in `data`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash(address implementation, bytes memory data)\\n internal\\n pure\\n returns (bytes32 hash)\\n {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // Do a out-of-gas revert if `dataLength` is too big. 0xffff - 0x02 - 0x62 = 0xff9b.\\n // The actual EVM limit may be smaller and may change over time.\\n returndatacopy(returndatasize(), returndatasize(), gt(dataLength, 0xff9b))\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n sub(data, 0x5a),\\n or(shl(0x78, add(extraLength, 0x62)), 0x6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Compute and store the bytecode hash.\\n hash := keccak256(sub(data, 0x4c), add(extraLength, 0x6c))\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic clone of\\n /// `implementation` using immutable arguments encoded in `data`, with `salt`, by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(\\n address implementation,\\n bytes memory data,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n bytes32 hash = initCodeHash(implementation, data);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* OTHER OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Returns the address when a contract with initialization code hash,\\n /// `hash`, is deployed with `salt`, by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(bytes32 hash, bytes32 salt, address deployer)\\n internal\\n pure\\n returns (address predicted)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // Compute and store the bytecode hash.\\n mstore8(0x00, 0xff) // Write the prefix.\\n mstore(0x35, hash)\\n mstore(0x01, shl(96, deployer))\\n mstore(0x15, salt)\\n predicted := keccak256(0x00, 0x55)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x35, 0)\\n }\\n }\\n\\n /// @dev Reverts if `salt` does not start with either the zero address or the caller.\\n function checkStartsWithCaller(bytes32 salt) internal view {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // If the salt does not start with the zero address or the caller.\\n if iszero(or(iszero(shr(96, salt)), eq(caller(), shr(96, salt)))) {\\n // Store the function selector of `SaltDoesNotStartWithCaller()`.\\n mstore(0x00, 0x2f634836)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x159b64c65da9e6efe93b8df8c6bb1c7672a7511dcaba414aaa3e447f6d7065e6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Minimal proxy library.","version":1}}}}}} \ No newline at end of file diff --git a/artifacts/build-info/fd068d5ca84930c6ffb69a4def64cf81.json b/artifacts/build-info/fd068d5ca84930c6ffb69a4def64cf81.json deleted file mode 100644 index 7775064..0000000 --- a/artifacts/build-info/fd068d5ca84930c6ffb69a4def64cf81.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"fd068d5ca84930c6ffb69a4def64cf81","_format":"hh-sol-build-info-1","solcVersion":"0.8.20","solcLongVersion":"0.8.20+commit.a1b79de6","input":{"language":"Solidity","sources":{"contracts/FCL/WrapperFCLWebAuthn.sol":{"content":"pragma solidity ^0.8.0;\n\nimport {FCL_WebAuthn} from \"FreshCryptoLib/FCL_Webauthn.sol\";\n\n/// @title WrapperFCLWebAuthn\n/// @notice A library used to verify ECDSA signatures over secp256r1 through\n/// EIP-1271 of Webauthn payloads.\n/// @dev This lib is only a wrapper around the FCL_WebAuthn library.\n/// It is meant to be used with 1271 signatures.\n/// The wrapping is necessary because the FCL_WebAuthn has only internal\n/// functions and use calldata. This makes it impossible to use it with\n/// isValidSignature that use memory.\nlibrary WrapperFCLWebAuthn {\n function checkSignature(\n bytes calldata authenticatorData,\n bytes1 authenticatorDataFlagMask,\n bytes calldata clientData,\n bytes32 clientChallenge,\n uint256 clientChallengeDataOffset,\n uint256[2] calldata rs,\n uint256[2] calldata Q\n ) external view returns (bool) {\n return FCL_WebAuthn.checkSignature(\n authenticatorData,\n authenticatorDataFlagMask,\n clientData,\n clientChallenge,\n clientChallengeDataOffset,\n rs,\n Q\n );\n }\n}"},"contracts/P256Signer.sol":{"content":"pragma solidity ^0.8.0;\n\nimport {WrapperFCLWebAuthn} from \"./FCL/WrapperFCLWebAuthn.sol\";\n\n/// @title P256Signer\n/// @notice A contract used to verify ECDSA signatures over secp256r1 through\n/// EIP-1271 of Webauthn payloads.\n/// @dev This contract is the implementation. It is meant to be used through\n/// proxy clone.\ncontract P256Signer {\n /// @notice The EIP-1271 magic value\n bytes4 internal constant EIP1271_MAGICVALUE = 0x1626ba7e;\n\n /// @notice The old EIP-1271 magic value\n bytes4 internal constant OLD_EIP1271_MAGICVALUE = 0x20c13b0b;\n\n /// @notice Whether the contract has been initialized\n bool public initialized;\n\n /// @notice The x coordinate of the secp256r1 public key\n uint256 public x;\n\n /// @notice The y coordinate of the secp256r1 public key\n uint256 public y;\n\n /// @notice Error message when the signature is invalid\n error InvalidSignature();\n\n /// @notice Error message when the hash is invalid\n error InvalidHash();\n\n /// @notice Error message when the contract is already initialized\n error AlreadyInitialized();\n\n constructor() {\n initialized = true;\n }\n\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\n /// @param _hash The hash of the data signed\n /// @param _signature The signature\n /// @return The EIP-1271 magic value\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view returns (bytes4) {\n _validate(abi.encode(_hash), _signature);\n return EIP1271_MAGICVALUE;\n }\n\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\n /// @dev This is the old version of the function of EIP-1271 using bytes\n /// memory instead of bytes32\n /// @param _hash The hash of the data signed\n /// @param _signature The signature\n /// @return The EIP-1271 magic value\n function isValidSignature(bytes memory _hash, bytes memory _signature) public view returns (bytes4) {\n _validate(_hash, _signature);\n return OLD_EIP1271_MAGICVALUE;\n }\n\n /// @notice Validates the signature\n /// @param data The data signed\n /// @param _signature The signature\n function _validate(bytes memory data, bytes memory _signature) private view {\n bytes32 _hash = keccak256(data);\n (bytes memory authenticatorData, bytes memory clientData, uint256 challengeOffset, uint256[2] memory rs) =\n abi.decode(_signature, (bytes, bytes, uint256, uint256[2]));\n\n bool valid = WrapperFCLWebAuthn.checkSignature(authenticatorData, 0x01, clientData, _hash, challengeOffset, rs, [x, y]);\n\n if (!valid) revert InvalidSignature();\n }\n\n /// @dev This function is only callable once and needs to be called immediately\n /// after deployment by the factory in the same transaction.\n /// @param x_ The x coordinate of the public key\n /// @param y_ The y coordinate of the public key\n function initialize(uint256 x_, uint256 y_) external {\n if (initialized) revert AlreadyInitialized();\n initialized = true;\n x = x_;\n y = y_;\n }\n}\n"},"contracts/P256SignerFactory.sol":{"content":"pragma solidity ^0.8.0;\n\nimport {P256Signer} from \"./P256Signer.sol\";\nimport \"solady/src/utils/LibClone.sol\";\n\n/// @title P256SignerFactory\n/// @notice Factory contract for creating proxies for P256Signer\ncontract P256SignerFactory {\n /// @notice The implementation address of the P256Signer contract\n address public immutable implementation;\n\n constructor(address implementation_) {\n implementation = implementation_;\n }\n\n /// @notice Emitted when a new P256Signer proxy contract is created\n event NewSignerCreated(uint256 indexed x, uint256 indexed y, address signer);\n\n /// @notice Creates a new P256Signer proxy contract\n /// @param x The x coordinate of the public key\n /// @param y The y coordinate of the public key\n function create(uint256 x, uint256 y) external returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(x, y));\n address signer = LibClone.cloneDeterministic(implementation, salt);\n P256Signer(signer).initialize(x, y);\n emit NewSignerCreated(x, y, signer);\n return signer;\n }\n}\n"},"FreshCryptoLib/FCL_elliptic.sol":{"content":"//********************************************************************************************/\n// ___ _ ___ _ _ _ _\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\n// | _| '_/ -_|_-< ' \\ | (__| '_| || | '_ \\ _/ _ \\ | |__| | '_ \\\n// |_||_| \\___/__/_||_| \\___|_| \\_, | .__/\\__\\___/ |____|_|_.__/\n// |__/|_|\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\n///* License: This software is licensed under MIT License\n///* This Code may be reused including license and copyright notice.\n///* See LICENSE file at the root folder of the project.\n///* FILE: FCL_elliptic.sol\n///*\n///*\n///* DESCRIPTION: modified XYZZ system coordinates for EVM elliptic point multiplication\n///* optimization\n///*\n//**************************************************************************************/\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\n// if ever used for other curve than sec256R1\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nlibrary FCL_Elliptic_ZZ {\n // Set parameters for curve sec256r1.\n\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\n //curve prime field modulus\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\n //short weierstrass first coefficient\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\n //short weierstrass second coefficient\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\n //generating point affine coordinates\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\n //curve order (number of points)\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\n /* -2 mod n constant, used to speed up inversion*/\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\n\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\n //P+1 div 4\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\n //arbitrary constant to express no quadratic residuosity\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\n\n /**\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\n */\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\n assembly {\n let pointer := mload(0x40)\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(pointer, 0x20)\n mstore(add(pointer, 0x20), 0x20)\n mstore(add(pointer, 0x40), 0x20)\n // Define variables base, exponent and modulus\n mstore(add(pointer, 0x60), u)\n mstore(add(pointer, 0x80), minus_2modn)\n mstore(add(pointer, 0xa0), n)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\n result := mload(pointer)\n }\n }\n /**\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\n */\n\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\n assembly {\n let pointer := mload(0x40)\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(pointer, 0x20)\n mstore(add(pointer, 0x20), 0x20)\n mstore(add(pointer, 0x40), 0x20)\n // Define variables base, exponent and modulus\n mstore(add(pointer, 0x60), u)\n mstore(add(pointer, 0x80), minus_2)\n mstore(add(pointer, 0xa0), p)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\n result := mload(pointer)\n }\n }\n\n //Coron projective shuffling, take as input alpha as blinding factor\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) public pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\n {\n \n uint256 alpha2=mulmod(alpha,alpha,p);\n \n x3=mulmod(alpha2, x,p); //alpha^-2.x\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\n\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\n \n return (x3, y3, zz3, zzz3);\n }\n\n\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\n {\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\n u2=addmod(u2, p-u1, p);// P = U2-U1\n x1=mulmod(u2, u2, p);//PP\n x2=mulmod(x1, u2, p);//PPP\n \n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\n\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\n\n return (x3, y3, zz3, zzz3);\n }\n\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\n/// @param self The integer of which to find the modular inverse\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\n\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\n assembly (\"memory-safe\") {\n // load the free memory pointer value\n let pointer := mload(0x40)\n\n // Define length of base (Bsize)\n mstore(pointer, 0x20)\n // Define the exponent size (Esize)\n mstore(add(pointer, 0x20), 0x20)\n // Define the modulus size (Msize)\n mstore(add(pointer, 0x40), 0x20)\n // Define variables base (B)\n mstore(add(pointer, 0x60), self)\n // Define the exponent (E)\n mstore(add(pointer, 0x80), pp1div4)\n // We save the point of the last argument, it will be override by the result\n // of the precompile call in order to avoid paying for the memory expansion properly\n let _result := add(pointer, 0xa0)\n // Define the modulus (M)\n mstore(_result, p)\n\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\n if iszero(\n staticcall(\n not(0), // amount of gas to send\n MODEXP_PRECOMPILE, // target\n pointer, // argsOffset\n 0xc0, // argsSize (6 * 32 bytes)\n _result, // retOffset (we override M to avoid paying for the memory expansion)\n 0x20 // retSize (32 bytes)\n )\n ) { revert(0, 0) }\n\n result := mload(_result)\n// result :=addmod(result,0,p)\n }\n if(mulmod(result,result,p)!=self){\n result=_NOTSQUARE;\n }\n \n return result;\n}\n /**\n * /* @dev Convert from affine rep to XYZZ rep\n */\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\n unchecked {\n P[2] = 1; //ZZ\n P[3] = 1; //ZZZ\n P[0] = x0;\n P[1] = y0;\n }\n }\n\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \n\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\n\n y=SqrtMod(y2);\n if(y==_NOTSQUARE){\n return _NOTONCURVE;\n }\n if((y&1)!=(parity&1)){\n y=p-y;\n }\n }\n\n /**\n * /* @dev Convert from XYZZ rep to affine rep\n */\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\n y1 = mulmod(y, zzzInv, p); //Y/zzz\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\n zzzInv = mulmod(_b, _b, p); //1/zz\n x1 = mulmod(x, zzzInv, p); //X/zz\n }\n\n /**\n * /* @dev Sutherland2008 doubling\n */\n /* The \"dbl-2008-s-1\" doubling formulas */\n\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\n internal\n pure\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\n {\n unchecked {\n assembly {\n P0 := mulmod(2, y, p) //U = 2*Y1\n P2 := mulmod(P0, P0, p) // V=U^2\n P3 := mulmod(x, P2, p) // S = X1*V\n P1 := mulmod(P0, P2, p) // W=UV\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\n }\n }\n return (P0, P1, P2, P3);\n }\n\n /**\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\n */\n\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\n internal\n pure\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\n {\n unchecked {\n if (y1 == 0) {\n return (x2, y2, 1, 1);\n }\n\n assembly {\n y1 := sub(p, y1)\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\n P0 := mulmod(x2, x2, p) //PP = P^2\n P1 := mulmod(P0, x2, p) //PPP = P*PP\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\n }\n //end assembly\n } //end unchecked\n return (P0, P1, P2, P3);\n }\n\n /**\n * @dev Return the zero curve in XYZZ coordinates.\n */\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\n return (0, 0, 0, 0);\n }\n /**\n * @dev Check if point is the neutral of the curve\n */\n\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\n return y0 == 0;\n }\n /**\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\n */\n\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\n return (0, 0);\n }\n\n /**\n * @dev Check if the curve is the zero curve in affine rep.\n */\n // uint256 x, uint256 y)\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\n return (y == 0);\n }\n\n /**\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\n */\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\n if (0 == x || x == p || 0 == y || y == p) {\n return false;\n }\n unchecked {\n uint256 LHS = mulmod(y, y, p); // y^2\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\n\n return LHS == RHS;\n }\n }\n\n /**\n * @dev Add two elliptic curve points in affine coordinates.\n */\n\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\n uint256 zz0;\n uint256 zzz0;\n\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\n\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\n\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\n }\n\n /**\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\n * Returns only x for ECDSA use \n * */\n function ecZZ_mulmuladd_S_asm(\n uint256 Q0,\n uint256 Q1, //affine rep for input point Q\n uint256 scalar_u,\n uint256 scalar_v\n ) internal view returns (uint256 X) {\n uint256 zz;\n uint256 zzz;\n uint256 Y;\n uint256 index = 255;\n uint256 H0;\n uint256 H1;\n\n unchecked {\n if (scalar_u == 0 && scalar_v == 0) return 0;\n\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\n\n assembly {\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\n index := sub(index, 1)\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n } {}\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n\n if eq(zz, 1) {\n X := gx\n Y := gy\n }\n if eq(zz, 2) {\n X := Q0\n Y := Q1\n }\n if eq(zz, 3) {\n X := H0\n Y := H1\n }\n\n index := sub(index, 1)\n zz := 1\n zzz := 1\n\n for {} gt(minus_1, index) { index := sub(index, 1) } {\n // inlined EcZZ_Dbl\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\n let T2 := mulmod(T1, T1, p) // V=U^2\n let T3 := mulmod(X, T2, p) // S = X1*V\n T1 := mulmod(T1, T2, p) // W=UV\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\n\n {\n //value of dibit\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n\n if iszero(T4) {\n Y := sub(p, Y) //restore the -Y inversion\n continue\n } // if T4!=0\n\n if eq(T4, 1) {\n T1 := gx\n T2 := gy\n }\n if eq(T4, 2) {\n T1 := Q0\n T2 := Q1\n }\n if eq(T4, 3) {\n T1 := H0\n T2 := H1\n }\n if iszero(zz) {\n X := T1\n Y := T2\n zz := 1\n zzz := 1\n continue\n }\n // inlined EcZZ_AddN\n\n //T3:=sub(p, Y)\n //T3:=Y\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\n\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\n //todo : construct edge vector case\n if iszero(y2) {\n if iszero(T2) {\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\n T2 := mulmod(T1, T1, p) // V=U^2\n T3 := mulmod(X, T2, p) // S = X1*V\n\n T1 := mulmod(T1, T2, p) // W=UV\n y2 := addmod(X, zz, p) //X+ZZ\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\n T4 := mulmod(3, y2, p) //M\n\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\n\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\n\n continue\n }\n }\n\n T4 := mulmod(T2, T2, p) //PP\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\n zz := mulmod(zz, T4, p)\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\n let TT2 := mulmod(X, T4, p)\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\n\n X := T4\n }\n } //end loop\n let T := mload(0x40)\n mstore(add(T, 0x60), zz)\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(T, 0x20)\n mstore(add(T, 0x20), 0x20)\n mstore(add(T, 0x40), 0x20)\n // Define variables base, exponent and modulus\n //mstore(add(pointer, 0x60), u)\n mstore(add(T, 0x80), minus_2)\n mstore(add(T, 0xa0), p)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\n\n //Y:=mulmod(Y,zzz,p)//Y/zzz\n //zz :=mulmod(zz, mload(T),p) //1/z\n //zz:= mulmod(zz,zz,p) //1/zz\n X := mulmod(X, mload(T), p) //X/zz\n } //end assembly\n } //end unchecked\n\n return X;\n }\n\n\n /**\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\n * Returns affine representation of point (normalized) \n * */\n function ecZZ_mulmuladd(\n uint256 Q0,\n uint256 Q1, //affine rep for input point Q\n uint256 scalar_u,\n uint256 scalar_v\n ) internal view returns (uint256 X, uint256 Y) {\n uint256 zz;\n uint256 zzz;\n uint256 index = 255;\n uint256[6] memory T;\n uint256[2] memory H;\n \n unchecked {\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\n\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\n\n assembly {\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\n index := sub(index, 1)\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n } {}\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n\n if eq(zz, 1) {\n X := gx\n Y := gy\n }\n if eq(zz, 2) {\n X := Q0\n Y := Q1\n }\n if eq(zz, 3) {\n Y := mload(add(H,32))\n X := mload(H)\n }\n\n index := sub(index, 1)\n zz := 1\n zzz := 1\n\n for {} gt(minus_1, index) { index := sub(index, 1) } {\n // inlined EcZZ_Dbl\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\n let T2 := mulmod(T1, T1, p) // V=U^2\n let T3 := mulmod(X, T2, p) // S = X1*V\n T1 := mulmod(T1, T2, p) // W=UV\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\n\n {\n //value of dibit\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\n\n if iszero(T4) {\n Y := sub(p, Y) //restore the -Y inversion\n continue\n } // if T4!=0\n\n if eq(T4, 1) {\n T1 := gx\n T2 := gy\n }\n if eq(T4, 2) {\n T1 := Q0\n T2 := Q1\n }\n if eq(T4, 3) {\n T1 := mload(H)\n T2 := mload(add(H,32))\n }\n if iszero(zz) {\n X := T1\n Y := T2\n zz := 1\n zzz := 1\n continue\n }\n // inlined EcZZ_AddN\n\n //T3:=sub(p, Y)\n //T3:=Y\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\n\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\n //todo : construct edge vector case\n if iszero(y2) {\n if iszero(T2) {\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\n T2 := mulmod(T1, T1, p) // V=U^2\n T3 := mulmod(X, T2, p) // S = X1*V\n\n T1 := mulmod(T1, T2, p) // W=UV\n y2 := addmod(X, zz, p) //X+ZZ\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\n T4 := mulmod(3, y2, p) //M\n\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\n\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\n\n continue\n }\n }\n\n T4 := mulmod(T2, T2, p) //PP\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\n zz := mulmod(zz, T4, p)\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\n let TT2 := mulmod(X, T4, p)\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\n\n X := T4\n }\n } //end loop\n mstore(add(T, 0x60), zzz)\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(T, 0x20)\n mstore(add(T, 0x20), 0x20)\n mstore(add(T, 0x40), 0x20)\n // Define variables base, exponent and modulus\n //mstore(add(pointer, 0x60), u)\n mstore(add(T, 0x80), minus_2)\n mstore(add(T, 0xa0), p)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\n\n Y:=mulmod(Y,mload(T),p)//Y/zzz\n zz :=mulmod(zz, mload(T),p) //1/z\n zz:= mulmod(zz,zz,p) //1/zz\n X := mulmod(X, zz, p) //X/zz\n } //end assembly\n } //end unchecked\n\n return (X,Y);\n }\n\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\n //contract at given address dataPointer\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\n // the external tool to generate tables from public key is in the /sage directory\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\n internal view\n returns (uint256 X /*, uint Y*/ )\n {\n unchecked {\n uint256 zz; // third and coordinates of the point\n\n uint256[6] memory T;\n zz = 256; //start index\n\n while (T[0] == 0) {\n zz = zz - 1;\n //tbd case of msb octobit is null\n T[0] = 64\n * (\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\n );\n }\n assembly {\n extcodecopy(dataPointer, T, mload(T), 64)\n let index := sub(zz, 1)\n X := mload(T)\n let Y := mload(add(T, 32))\n let zzz := 1\n zz := 1\n\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\n for {} gt(index, 191) { index := add(index, 191) } {\n //inline Double\n {\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\n let T2 := mulmod(TT1, TT1, p) // V=U^2\n let T3 := mulmod(X, T2, p) // S = X1*V\n let T1 := mulmod(TT1, T2, p) // W=UV\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\n\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\n\n /* compute element to access in precomputed table */\n }\n {\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\n let index2 := sub(index, 64)\n let T3 :=\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\n let index3 := sub(index2, 64)\n let T2 :=\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\n index := sub(index3, 64)\n let T1 :=\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\n\n //tbd: check validity of formulae with (0,1) to remove conditional jump\n if iszero(T1) {\n Y := sub(p, Y)\n\n continue\n }\n extcodecopy(dataPointer, T, T1, 64)\n }\n\n {\n /* Access to precomputed table using extcodecopy hack */\n\n // inlined EcZZ_AddN\n if iszero(zz) {\n X := mload(T)\n Y := mload(add(T, 32))\n zz := 1\n zzz := 1\n\n continue\n }\n\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\n\n //special case ecAdd(P,P)=EcDbl\n if iszero(y2) {\n if iszero(T2) {\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\n T2 := mulmod(T1, T1, p) // V=U^2\n let T3 := mulmod(X, T2, p) // S = X1*V\n\n T1 := mulmod(T1, T2, p) // W=UV\n y2 := addmod(X, zz, p) //X+ZZ\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\n let T4 := mulmod(3, y2, p) //M\n\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\n\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\n\n continue\n }\n }\n\n let T4 := mulmod(T2, T2, p)\n let T1 := mulmod(T4, T2, p) //\n zz := mulmod(zz, T4, p)\n //zzz3=V*ZZ1\n zzz := mulmod(zzz, T1, p) // W=UV/\n let zz1 := mulmod(X, T4, p)\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\n }\n } //end loop\n mstore(add(T, 0x60), zz)\n\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(T, 0x20)\n mstore(add(T, 0x20), 0x20)\n mstore(add(T, 0x40), 0x20)\n // Define variables base, exponent and modulus\n //mstore(add(pointer, 0x60), u)\n mstore(add(T, 0x80), minus_2)\n mstore(add(T, 0xa0), p)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\n\n zz := mload(T)\n X := mulmod(X, zz, p) //X/zz\n }\n } //end unchecked\n }\n\n \n\n // improving the extcodecopy trick : append array at end of contract\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\n internal view\n returns (uint256 X /*, uint Y*/ )\n {\n uint256 zz; // third and coordinates of the point\n\n uint256[6] memory T;\n zz = 256; //start index\n\n unchecked {\n while (T[0] == 0) {\n zz = zz - 1;\n //tbd case of msb octobit is null\n T[0] = 64\n * (\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\n );\n }\n assembly {\n codecopy(T, add(mload(T), dataPointer), 64)\n X := mload(T)\n let Y := mload(add(T, 32))\n let zzz := 1\n zz := 1\n\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\n let T2 := mulmod(T1, T1, p) // V=U^2\n let T3 := mulmod(X, T2, p) // S = X1*V\n T1 := mulmod(T1, T2, p) // W=UV\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\n\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\n\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\n\n /* compute element to access in precomputed table */\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\n index := sub(index, 64)\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\n index := sub(index, 64)\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\n index := sub(index, 64)\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\n //index:=add(index,192), restore index, interleaved with loop\n\n //tbd: check validity of formulae with (0,1) to remove conditional jump\n if iszero(T4) {\n Y := sub(p, Y)\n\n continue\n }\n {\n /* Access to precomputed table using extcodecopy hack */\n codecopy(T, add(T4, dataPointer), 64)\n\n // inlined EcZZ_AddN\n\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\n T4 := mulmod(T2, T2, p)\n T1 := mulmod(T4, T2, p)\n T2 := mulmod(zz, T4, p) // W=UV\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\n let zz1 := mulmod(X, T4, p)\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\n zz := T2\n X := T4\n }\n } //end loop\n mstore(add(T, 0x60), zz)\n\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(T, 0x20)\n mstore(add(T, 0x20), 0x20)\n mstore(add(T, 0x40), 0x20)\n // Define variables base, exponent and modulus\n //mstore(add(pointer, 0x60), u)\n mstore(add(T, 0x80), minus_2)\n mstore(add(T, 0xa0), p)\n\n // Call the precompiled contract 0x05 = ModExp\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\n\n zz := mload(T)\n X := mulmod(X, zz, p) //X/zz\n }\n } //end unchecked\n }\n\n /**\n * @dev ECDSA verification, given , signature, and public key.\n */\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256[2] calldata Q) internal view returns (bool) {\n uint256 r = rs[0];\n uint256 s = rs[1];\n if (r == 0 || r >= n || s == 0 || s >= n) {\n return false;\n }\n uint256 Q0 = Q[0];\n uint256 Q1 = Q[1];\n if (!ecAff_isOnCurve(Q0, Q1)) {\n return false;\n }\n\n uint256 sInv = FCL_nModInv(s);\n\n uint256 scalar_u = mulmod(uint256(message), sInv, n);\n uint256 scalar_v = mulmod(r, sInv, n);\n uint256 x1;\n\n x1 = ecZZ_mulmuladd_S_asm(Q0, Q1, scalar_u, scalar_v);\n\n assembly {\n x1 := addmod(x1, sub(n, r), n)\n }\n //return true;\n return x1 == 0;\n }\n\n /**\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\n * generation of contract bytecode for precomputations is done using sagemath code\n * (see sage directory, WebAuthn_precompute.sage)\n */\n\n function ecdsa_precomputed_verify(bytes32 message, uint256[2] calldata rs, address Shamir8)\n internal view\n returns (bool)\n {\n uint256 r = rs[0];\n uint256 s = rs[1];\n if (r == 0 || r >= n || s == 0 || s >= n) {\n return false;\n }\n /* Q is pushed via bytecode assumed to be correct\n if (!isOnCurve(Q[0], Q[1])) {\n return false;\n }*/\n\n uint256 sInv = FCL_nModInv(s);\n\n uint256 X;\n\n //Shamir 8 dimensions\n X = ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\n\n assembly {\n X := addmod(X, sub(n, r), n)\n }\n\n return X == 0;\n } //end ecdsa_precomputed_verify()\n\n /**\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\n * generation of contract bytecode for precomputations is done using sagemath code\n * (see sage directory, WebAuthn_precompute.sage)\n */\n\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\n internal view\n returns (bool)\n {\n uint256 r = rs[0];\n uint256 s = rs[1];\n if (r == 0 || r >= n || s == 0 || s >= n) {\n return false;\n }\n /* Q is pushed via bytecode assumed to be correct\n if (!isOnCurve(Q[0], Q[1])) {\n return false;\n }*/\n\n uint256 sInv = FCL_nModInv(s);\n uint256 X;\n\n //Shamir 8 dimensions\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\n\n assembly {\n X := addmod(X, sub(n, r), n)\n }\n return X == 0;\n } //end ecdsa_precomputed_verify()\n\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) public view returns (address)\n {\n if (r == 0 || r >= n || s == 0 || s >= n) {\n return address(0);\n }\n uint256 y=ec_Decompress(r, v-27);\n uint256 rinv=FCL_nModInv(r);\n uint256 u1=mulmod(n-addmod(0,h,n), rinv,n);//-hr^-1\n uint256 u2=mulmod(s, rinv,n);//sr^-1\n\n uint256 Qx;\n uint256 Qy;\n (Qx,Qy)=ecZZ_mulmuladd(r,y, u1, u2);\n\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\n }\n\n //ecdsa signature for test purpose only (who would like to have a private key onchain anyway ?)\n //K is nonce, kpriv is private key\n function ecdsa_sign(bytes32 message, uint256 k , uint256 kpriv) public view returns(uint256 r, uint256 s)\n {\n r=ecZZ_mulmuladd_S_asm(0,0, k, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\n r=addmod(0,r, n); \n s=mulmod(FCL_nModInv(k), addmod(uint256(message), mulmod(r, kpriv, n),n),n);//s=k^-1.(h+r.kpriv)\n\n \n if(r==0||s==0){\n revert();\n }\n\n\n }\n\n} //EOF\n"},"FreshCryptoLib/FCL_Webauthn.sol":{"content":"//********************************************************************************************/\n// ___ _ ___ _ _ _ _\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\n// | _| '_/ -_|_-< ' \\ | (__| '_| || | '_ \\ _/ _ \\ | |__| | '_ \\\n// |_||_| \\___/__/_||_| \\___|_| \\_, | .__/\\__\\___/ |____|_|_.__/\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\n///* License: This software is licensed under MIT License\n///* This Code may be reused including license and copyright notice.\n///* See LICENSE file at the root folder of the project.\n///* FILE: FCL_elliptic.sol\n///*\n///*\n///* DESCRIPTION: Implementation of the WebAuthn Authentication mechanism\n///* https://www.w3.org/TR/webauthn-2/#sctn-intro\n///* Original code extracted from https://github.com/btchip/Webauthn.sol\n//**************************************************************************************/\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\n// if ever used for other curve than sec256R1\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport {Base64Url} from \"./utils/Base64Url.sol\";\nimport {FCL_Elliptic_ZZ} from \"./FCL_elliptic.sol\";\n\nlibrary FCL_WebAuthn {\n error InvalidAuthenticatorData();\n error InvalidClientData();\n error InvalidSignature();\n\n function WebAuthn_format(\n bytes calldata authenticatorData,\n bytes1 authenticatorDataFlagMask,\n bytes calldata clientData,\n bytes32 clientChallenge,\n uint256 clientChallengeDataOffset,\n uint256[2] calldata // rs\n ) internal pure returns (bytes32 result) {\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\n {\n if ((authenticatorData[32] & authenticatorDataFlagMask) != authenticatorDataFlagMask) {\n revert InvalidAuthenticatorData();\n }\n // Verify that clientData commits to the expected client challenge\n // Use the Base64Url encoding which omits padding characters to match WebAuthn Specification\n string memory challengeEncoded = Base64Url.encode(abi.encodePacked(clientChallenge));\n bytes memory challengeExtracted = new bytes(\n bytes(challengeEncoded).length\n );\n\n assembly {\n calldatacopy(\n add(challengeExtracted, 32),\n add(clientData.offset, clientChallengeDataOffset),\n mload(challengeExtracted)\n )\n }\n\n bytes32 moreData; //=keccak256(abi.encodePacked(challengeExtracted));\n assembly {\n moreData := keccak256(add(challengeExtracted, 32), mload(challengeExtracted))\n }\n\n if (keccak256(abi.encodePacked(bytes(challengeEncoded))) != moreData) {\n revert InvalidClientData();\n }\n } //avoid stack full\n\n // Verify the signature over sha256(authenticatorData || sha256(clientData))\n bytes memory verifyData = new bytes(authenticatorData.length + 32);\n\n assembly {\n calldatacopy(add(verifyData, 32), authenticatorData.offset, authenticatorData.length)\n }\n\n bytes32 more = sha256(clientData);\n assembly {\n mstore(add(verifyData, add(authenticatorData.length, 32)), more)\n }\n\n return sha256(verifyData);\n }\n\n function checkSignature (\n bytes calldata authenticatorData,\n bytes1 authenticatorDataFlagMask,\n bytes calldata clientData,\n bytes32 clientChallenge,\n uint256 clientChallengeDataOffset,\n uint256[2] calldata rs,\n uint256[2] calldata Q\n ) internal view returns (bool) {\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\n\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\n );\n\n bool result = FCL_Elliptic_ZZ.ecdsa_verify(message, rs, Q);\n\n return result;\n }\n\n function checkSignature_prec(\n bytes calldata authenticatorData,\n bytes1 authenticatorDataFlagMask,\n bytes calldata clientData,\n bytes32 clientChallenge,\n uint256 clientChallengeDataOffset,\n uint256[2] calldata rs,\n address dataPointer\n ) internal view returns (bool) {\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\n\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\n );\n\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_verify(message, rs, dataPointer);\n\n return result;\n }\n\n //beware that this implementation will not be compliant with EOF\n function checkSignature_hackmem(\n bytes calldata authenticatorData,\n bytes1 authenticatorDataFlagMask,\n bytes calldata clientData,\n bytes32 clientChallenge,\n uint256 clientChallengeDataOffset,\n uint256[2] calldata rs,\n uint256 dataPointer\n ) internal view returns (bool) {\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\n\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\n );\n\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_hackmem(message, rs, dataPointer);\n\n return result;\n }\n}\n"},"FreshCryptoLib/utils/Base64Url.sol":{"content":"// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @dev Encode (without '=' padding) \n * @author evmbrahmin, adapted from hiromin's Base64URL libraries\n */\nlibrary Base64Url {\n /**\n * @dev Base64Url Encoding Table\n */\n string internal constant ENCODING_TABLE =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n\n function encode(bytes memory data) internal pure returns (string memory) {\n if (data.length == 0) return \"\";\n\n // Load the table into memory\n string memory table = ENCODING_TABLE;\n\n string memory result = new string(4 * ((data.length + 2) / 3));\n\n // @solidity memory-safe-assembly\n assembly {\n let tablePtr := add(table, 1)\n let resultPtr := add(result, 32)\n\n for {\n let dataPtr := data\n let endPtr := add(data, mload(data))\n } lt(dataPtr, endPtr) {\n\n } {\n dataPtr := add(dataPtr, 3)\n let input := mload(dataPtr)\n\n mstore8(\n resultPtr,\n mload(add(tablePtr, and(shr(18, input), 0x3F)))\n )\n resultPtr := add(resultPtr, 1)\n\n mstore8(\n resultPtr,\n mload(add(tablePtr, and(shr(12, input), 0x3F)))\n )\n resultPtr := add(resultPtr, 1)\n\n mstore8(\n resultPtr,\n mload(add(tablePtr, and(shr(6, input), 0x3F)))\n )\n resultPtr := add(resultPtr, 1)\n\n mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))\n resultPtr := add(resultPtr, 1)\n }\n\n // Remove the padding adjustment logic\n switch mod(mload(data), 3)\n case 1 {\n // Adjust for the last byte of data\n resultPtr := sub(resultPtr, 2)\n }\n case 2 {\n // Adjust for the last two bytes of data\n resultPtr := sub(resultPtr, 1)\n }\n \n // Set the correct length of the result string\n mstore(result, sub(resultPtr, add(result, 32)))\n }\n\n return result; \n }\n}\n"},"solady/src/utils/LibClone.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\n/// @notice Minimal proxy library.\n/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)\n/// @author Minimal proxy by 0age (https://github.com/0age)\n/// @author Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie\n/// (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)\n///\n/// @dev Minimal proxy:\n/// Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime,\n/// it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern,\n/// which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.\n///\n/// @dev Minimal proxy (PUSH0 variant):\n/// This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai.\n/// It is optimized first for minimal runtime gas, then for minimal bytecode.\n/// The PUSH0 clone functions are intentionally postfixed with a jarring \"_PUSH0\" as\n/// many EVM chains may not support the PUSH0 opcode in the early months after Shanghai.\n/// Please use with caution.\n///\n/// @dev Clones with immutable args (CWIA):\n/// The implementation of CWIA here implements a `receive()` method that emits the\n/// `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata,\n/// enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards\n/// composability. The minimal proxy implementation does not offer this feature.\nlibrary LibClone {\n /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/\n /* CUSTOM ERRORS */\n /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/\n\n /// @dev Unable to deploy the clone.\n error DeploymentFailed();\n\n /// @dev The salt must start with either the zero address or the caller.\n error SaltDoesNotStartWithCaller();\n\n /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/\n /* MINIMAL PROXY OPERATIONS */\n /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/\n\n /// @dev Deploys a clone of `implementation`.\n function clone(address implementation) internal returns (address instance) {\n /// @solidity memory-safe-assembly\n assembly {\n /**\n * --------------------------------------------------------------------------+\n * CREATION (9 bytes) |\n * --------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * --------------------------------------------------------------------------|\n * 60 runSize | PUSH1 runSize | r | |\n * 3d | RETURNDATASIZE | 0 r | |\n * 81 | DUP2 | r 0 r | |\n * 60 offset | PUSH1 offset | o r 0 r | |\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\n * f3 | RETURN | | [0..runSize): runtime code |\n * --------------------------------------------------------------------------|\n * RUNTIME (44 bytes) |\n * --------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * --------------------------------------------------------------------------|\n * |\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | 0 | |\n * 3d | RETURNDATASIZE | 0 0 | |\n * 3d | RETURNDATASIZE | 0 0 0 | |\n * 3d | RETURNDATASIZE | 0 0 0 0 | |\n * |\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds 0 0 0 0 | |\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | |\n * 3d | RETURNDATASIZE | 0 0 cds 0 0 0 0 | |\n * 37 | CALLDATACOPY | 0 0 0 0 | [0..cds): calldata |\n * |\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds 0 0 0 0 | [0..cds): calldata |\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | [0..cds): calldata |\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 0 0 | [0..cds): calldata |\n * 5a | GAS | gas addr 0 cds 0 0 0 0 | [0..cds): calldata |\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata |\n * |\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata |\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata |\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata |\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata |\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\n * |\n * 60 0x2a | PUSH1 0x2a | 0x2a success 0 rds | [0..rds): returndata |\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\n * |\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * fd | REVERT | | [0..rds): returndata |\n * |\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\n * f3 | RETURN | | [0..rds): returndata |\n * --------------------------------------------------------------------------+\n */\n\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\n mstore(0x14, implementation)\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\n instance := create(0, 0x0c, 0x35)\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x21, 0)\n }\n }\n\n /// @dev Deploys a deterministic clone of `implementation` with `salt`.\n function cloneDeterministic(address implementation, bytes32 salt)\n internal\n returns (address instance)\n {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\n mstore(0x14, implementation)\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\n instance := create2(0, 0x0c, 0x35, salt)\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x21, 0)\n }\n }\n\n /// @dev Returns the initialization code hash of the clone of `implementation`.\n /// Used for mining vanity addresses with create2crunch.\n function initCodeHash(address implementation) internal pure returns (bytes32 hash) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\n mstore(0x14, implementation)\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\n hash := keccak256(0x0c, 0x35)\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x21, 0)\n }\n }\n\n /// @dev Returns the address of the deterministic clone of `implementation`,\n /// with `salt` by `deployer`.\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\n function predictDeterministicAddress(address implementation, bytes32 salt, address deployer)\n internal\n pure\n returns (address predicted)\n {\n bytes32 hash = initCodeHash(implementation);\n predicted = predictDeterministicAddress(hash, salt, deployer);\n }\n\n /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/\n /* MINIMAL PROXY OPERATIONS (PUSH0 VARIANT) */\n /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/\n\n /// @dev Deploys a PUSH0 clone of `implementation`.\n function clone_PUSH0(address implementation) internal returns (address instance) {\n /// @solidity memory-safe-assembly\n assembly {\n /**\n * --------------------------------------------------------------------------+\n * CREATION (9 bytes) |\n * --------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * --------------------------------------------------------------------------|\n * 60 runSize | PUSH1 runSize | r | |\n * 5f | PUSH0 | 0 r | |\n * 81 | DUP2 | r 0 r | |\n * 60 offset | PUSH1 offset | o r 0 r | |\n * 5f | PUSH0 | 0 o r 0 r | |\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\n * f3 | RETURN | | [0..runSize): runtime code |\n * --------------------------------------------------------------------------|\n * RUNTIME (45 bytes) |\n * --------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * --------------------------------------------------------------------------|\n * |\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\n * 5f | PUSH0 | 0 | |\n * 5f | PUSH0 | 0 0 | |\n * |\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds 0 0 | |\n * 5f | PUSH0 | 0 cds 0 0 | |\n * 5f | PUSH0 | 0 0 cds 0 0 | |\n * 37 | CALLDATACOPY | 0 0 | [0..cds): calldata |\n * |\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds 0 0 | [0..cds): calldata |\n * 5f | PUSH0 | 0 cds 0 0 | [0..cds): calldata |\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 | [0..cds): calldata |\n * 5a | GAS | gas addr 0 cds 0 0 | [0..cds): calldata |\n * f4 | DELEGATECALL | success | [0..cds): calldata |\n * |\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | rds success | [0..cds): calldata |\n * 5f | PUSH0 | 0 rds success | [0..cds): calldata |\n * 5f | PUSH0 | 0 0 rds success | [0..cds): calldata |\n * 3e | RETURNDATACOPY | success | [0..rds): returndata |\n * |\n * 60 0x29 | PUSH1 0x29 | 0x29 success | [0..rds): returndata |\n * 57 | JUMPI | | [0..rds): returndata |\n * |\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\n * fd | REVERT | | [0..rds): returndata |\n * |\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 5b | JUMPDEST | | [0..rds): returndata |\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\n * f3 | RETURN | | [0..rds): returndata |\n * --------------------------------------------------------------------------+\n */\n\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\n mstore(0x14, implementation) // 20\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\n instance := create(0, 0x0e, 0x36)\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x24, 0)\n }\n }\n\n /// @dev Deploys a deterministic PUSH0 clone of `implementation` with `salt`.\n function cloneDeterministic_PUSH0(address implementation, bytes32 salt)\n internal\n returns (address instance)\n {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\n mstore(0x14, implementation) // 20\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\n instance := create2(0, 0x0e, 0x36, salt)\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x24, 0)\n }\n }\n\n /// @dev Returns the initialization code hash of the PUSH0 clone of `implementation`.\n /// Used for mining vanity addresses with create2crunch.\n function initCodeHash_PUSH0(address implementation) internal pure returns (bytes32 hash) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\n mstore(0x14, implementation) // 20\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\n hash := keccak256(0x0e, 0x36)\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x24, 0)\n }\n }\n\n /// @dev Returns the address of the deterministic PUSH0 clone of `implementation`,\n /// with `salt` by `deployer`.\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\n function predictDeterministicAddress_PUSH0(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n bytes32 hash = initCodeHash_PUSH0(implementation);\n predicted = predictDeterministicAddress(hash, salt, deployer);\n }\n\n /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/\n /* CLONES WITH IMMUTABLE ARGS OPERATIONS */\n /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/\n\n /// @dev Deploys a minimal proxy with `implementation`,\n /// using immutable arguments encoded in `data`.\n ///\n /// Note: This implementation of CWIA differs from the original implementation.\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\n function clone(address implementation, bytes memory data) internal returns (address instance) {\n assembly {\n // Compute the boundaries of the data and cache the memory slots around it.\n let mBefore3 := mload(sub(data, 0x60))\n let mBefore2 := mload(sub(data, 0x40))\n let mBefore1 := mload(sub(data, 0x20))\n let dataLength := mload(data)\n let dataEnd := add(add(data, 0x20), dataLength)\n let mAfter1 := mload(dataEnd)\n\n // +2 bytes for telling how much data there is appended to the call.\n let extraLength := add(dataLength, 2)\n // The `creationSize` is `extraLength + 108`\n // The `runSize` is `creationSize - 10`.\n\n /**\n * ---------------------------------------------------------------------------------------------------+\n * CREATION (10 bytes) |\n * ---------------------------------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * ---------------------------------------------------------------------------------------------------|\n * 61 runSize | PUSH2 runSize | r | |\n * 3d | RETURNDATASIZE | 0 r | |\n * 81 | DUP2 | r 0 r | |\n * 60 offset | PUSH1 offset | o r 0 r | |\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\n * f3 | RETURN | | [0..runSize): runtime code |\n * ---------------------------------------------------------------------------------------------------|\n * RUNTIME (98 bytes + extraLength) |\n * ---------------------------------------------------------------------------------------------------|\n * Opcode | Mnemonic | Stack | Memory |\n * ---------------------------------------------------------------------------------------------------|\n * |\n * ::: if no calldata, emit event & return w/o `DELEGATECALL` ::::::::::::::::::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds | |\n * 60 0x2c | PUSH1 0x2c | 0x2c cds | |\n * 57 | JUMPI | | |\n * 34 | CALLVALUE | cv | |\n * 3d | RETURNDATASIZE | 0 cv | |\n * 52 | MSTORE | | [0..0x20): callvalue |\n * 7f sig | PUSH32 0x9e.. | sig | [0..0x20): callvalue |\n * 59 | MSIZE | 0x20 sig | [0..0x20): callvalue |\n * 3d | RETURNDATASIZE | 0 0x20 sig | [0..0x20): callvalue |\n * a1 | LOG1 | | [0..0x20): callvalue |\n * 00 | STOP | | [0..0x20): callvalue |\n * 5b | JUMPDEST | | |\n * |\n * ::: copy calldata to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds | |\n * 3d | RETURNDATASIZE | 0 cds | |\n * 3d | RETURNDATASIZE | 0 0 cds | |\n * 37 | CALLDATACOPY | | [0..cds): calldata |\n * |\n * ::: keep some values in stack :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | 0 | [0..cds): calldata |\n * 3d | RETURNDATASIZE | 0 0 | [0..cds): calldata |\n * 3d | RETURNDATASIZE | 0 0 0 | [0..cds): calldata |\n * 3d | RETURNDATASIZE | 0 0 0 0 | [0..cds): calldata |\n * 61 extra | PUSH2 extra | e 0 0 0 0 | [0..cds): calldata |\n * |\n * ::: copy extra data to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 80 | DUP1 | e e 0 0 0 0 | [0..cds): calldata |\n * 60 0x62 | PUSH1 0x62 | 0x62 e e 0 0 0 0 | [0..cds): calldata |\n * 36 | CALLDATASIZE | cds 0x62 e e 0 0 0 0 | [0..cds): calldata |\n * 39 | CODECOPY | e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * |\n * ::: delegate call to the implementation contract ::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 36 | CALLDATASIZE | cds e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 01 | ADD | cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 3d | RETURNDATASIZE | 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 73 addr | PUSH20 addr | addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 5a | GAS | gas addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * |\n * ::: copy return data to memory ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\n * |\n * 60 0x60 | PUSH1 0x60 | 0x60 success 0 rds | [0..rds): returndata |\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\n * |\n * ::: revert ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * fd | REVERT | | [0..rds): returndata |\n * |\n * ::: return ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\n * f3 | RETURN | | [0..rds): returndata |\n * ---------------------------------------------------------------------------------------------------+\n */\n // Write the bytecode before the data.\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\n // Write the address of the implementation.\n mstore(sub(data, 0x0d), implementation)\n // Write the rest of the bytecode.\n mstore(\n sub(data, 0x21),\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\n )\n // `keccak256(\"ReceiveETH(uint256)\")`\n mstore(\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\n )\n mstore(\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\n // The actual EVM limit may be smaller and may change over time.\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\n )\n mstore(dataEnd, shl(0xf0, extraLength))\n\n // Create the instance.\n instance := create(0, sub(data, 0x4c), add(extraLength, 0x6c))\n\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n\n // Restore the overwritten memory surrounding `data`.\n mstore(dataEnd, mAfter1)\n mstore(data, dataLength)\n mstore(sub(data, 0x20), mBefore1)\n mstore(sub(data, 0x40), mBefore2)\n mstore(sub(data, 0x60), mBefore3)\n }\n }\n\n /// @dev Deploys a deterministic clone of `implementation`,\n /// using immutable arguments encoded in `data`, with `salt`.\n ///\n /// Note: This implementation of CWIA differs from the original implementation.\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\n function cloneDeterministic(address implementation, bytes memory data, bytes32 salt)\n internal\n returns (address instance)\n {\n assembly {\n // Compute the boundaries of the data and cache the memory slots around it.\n let mBefore3 := mload(sub(data, 0x60))\n let mBefore2 := mload(sub(data, 0x40))\n let mBefore1 := mload(sub(data, 0x20))\n let dataLength := mload(data)\n let dataEnd := add(add(data, 0x20), dataLength)\n let mAfter1 := mload(dataEnd)\n\n // +2 bytes for telling how much data there is appended to the call.\n let extraLength := add(dataLength, 2)\n\n // Write the bytecode before the data.\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\n // Write the address of the implementation.\n mstore(sub(data, 0x0d), implementation)\n // Write the rest of the bytecode.\n mstore(\n sub(data, 0x21),\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\n )\n // `keccak256(\"ReceiveETH(uint256)\")`\n mstore(\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\n )\n mstore(\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\n // The actual EVM limit may be smaller and may change over time.\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\n )\n mstore(dataEnd, shl(0xf0, extraLength))\n\n // Create the instance.\n instance := create2(0, sub(data, 0x4c), add(extraLength, 0x6c), salt)\n\n // If `instance` is zero, revert.\n if iszero(instance) {\n // Store the function selector of `DeploymentFailed()`.\n mstore(0x00, 0x30116425)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n\n // Restore the overwritten memory surrounding `data`.\n mstore(dataEnd, mAfter1)\n mstore(data, dataLength)\n mstore(sub(data, 0x20), mBefore1)\n mstore(sub(data, 0x40), mBefore2)\n mstore(sub(data, 0x60), mBefore3)\n }\n }\n\n /// @dev Returns the initialization code hash of the clone of `implementation`\n /// using immutable arguments encoded in `data`.\n /// Used for mining vanity addresses with create2crunch.\n function initCodeHash(address implementation, bytes memory data)\n internal\n pure\n returns (bytes32 hash)\n {\n assembly {\n // Compute the boundaries of the data and cache the memory slots around it.\n let mBefore3 := mload(sub(data, 0x60))\n let mBefore2 := mload(sub(data, 0x40))\n let mBefore1 := mload(sub(data, 0x20))\n let dataLength := mload(data)\n let dataEnd := add(add(data, 0x20), dataLength)\n let mAfter1 := mload(dataEnd)\n\n // Do a out-of-gas revert if `dataLength` is too big. 0xffff - 0x02 - 0x62 = 0xff9b.\n // The actual EVM limit may be smaller and may change over time.\n returndatacopy(returndatasize(), returndatasize(), gt(dataLength, 0xff9b))\n\n // +2 bytes for telling how much data there is appended to the call.\n let extraLength := add(dataLength, 2)\n\n // Write the bytecode before the data.\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\n // Write the address of the implementation.\n mstore(sub(data, 0x0d), implementation)\n // Write the rest of the bytecode.\n mstore(\n sub(data, 0x21),\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\n )\n // `keccak256(\"ReceiveETH(uint256)\")`\n mstore(\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\n )\n mstore(\n sub(data, 0x5a),\n or(shl(0x78, add(extraLength, 0x62)), 0x6100003d81600a3d39f336602c57343d527f)\n )\n mstore(dataEnd, shl(0xf0, extraLength))\n\n // Compute and store the bytecode hash.\n hash := keccak256(sub(data, 0x4c), add(extraLength, 0x6c))\n\n // Restore the overwritten memory surrounding `data`.\n mstore(dataEnd, mAfter1)\n mstore(data, dataLength)\n mstore(sub(data, 0x20), mBefore1)\n mstore(sub(data, 0x40), mBefore2)\n mstore(sub(data, 0x60), mBefore3)\n }\n }\n\n /// @dev Returns the address of the deterministic clone of\n /// `implementation` using immutable arguments encoded in `data`, with `salt`, by `deployer`.\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\n function predictDeterministicAddress(\n address implementation,\n bytes memory data,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n bytes32 hash = initCodeHash(implementation, data);\n predicted = predictDeterministicAddress(hash, salt, deployer);\n }\n\n /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/\n /* OTHER OPERATIONS */\n /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/\n\n /// @dev Returns the address when a contract with initialization code hash,\n /// `hash`, is deployed with `salt`, by `deployer`.\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\n function predictDeterministicAddress(bytes32 hash, bytes32 salt, address deployer)\n internal\n pure\n returns (address predicted)\n {\n /// @solidity memory-safe-assembly\n assembly {\n // Compute and store the bytecode hash.\n mstore8(0x00, 0xff) // Write the prefix.\n mstore(0x35, hash)\n mstore(0x01, shl(96, deployer))\n mstore(0x15, salt)\n predicted := keccak256(0x00, 0x55)\n // Restore the part of the free memory pointer that has been overwritten.\n mstore(0x35, 0)\n }\n }\n\n /// @dev Reverts if `salt` does not start with either the zero address or the caller.\n function checkStartsWithCaller(bytes32 salt) internal view {\n /// @solidity memory-safe-assembly\n assembly {\n // If the salt does not start with the zero address or the caller.\n if iszero(or(iszero(shr(96, salt)), eq(caller(), shr(96, salt)))) {\n // Store the function selector of `SaltDoesNotStartWithCaller()`.\n mstore(0x00, 0x2f634836)\n // Revert with (offset, size).\n revert(0x1c, 0x04)\n }\n }\n }\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":1000000},"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","storageLayout","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"errors":[{"component":"general","errorCode":"1878","formattedMessage":"Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> contracts/FCL/WrapperFCLWebAuthn.sol\n\n","message":"SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.","severity":"warning","sourceLocation":{"end":-1,"file":"contracts/FCL/WrapperFCLWebAuthn.sol","start":-1},"type":"Warning"},{"component":"general","errorCode":"1878","formattedMessage":"Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> contracts/P256Signer.sol\n\n","message":"SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.","severity":"warning","sourceLocation":{"end":-1,"file":"contracts/P256Signer.sol","start":-1},"type":"Warning"},{"component":"general","errorCode":"1878","formattedMessage":"Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> contracts/P256SignerFactory.sol\n\n","message":"SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.","severity":"warning","sourceLocation":{"end":-1,"file":"contracts/P256SignerFactory.sol","start":-1},"type":"Warning"}],"sources":{"FreshCryptoLib/FCL_Webauthn.sol":{"ast":{"absolutePath":"FreshCryptoLib/FCL_Webauthn.sol","exportedSymbols":{"Base64Url":[1932],"FCL_Elliptic_ZZ":[1886],"FCL_WebAuthn":[247]},"id":248,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"1228:24:0"},{"absolutePath":"FreshCryptoLib/utils/Base64Url.sol","file":"./utils/Base64Url.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":248,"sourceUnit":1933,"src":"1254:48:0","symbolAliases":[{"foreign":{"id":2,"name":"Base64Url","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1932,"src":"1262:9:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"FreshCryptoLib/FCL_elliptic.sol","file":"./FCL_elliptic.sol","id":5,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":248,"sourceUnit":1887,"src":"1303:51:0","symbolAliases":[{"foreign":{"id":4,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1886,"src":"1311:15:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FCL_WebAuthn","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":247,"linearizedBaseContracts":[247],"name":"FCL_WebAuthn","nameLocation":"1364:12:0","nodeType":"ContractDefinition","nodes":[{"errorSelector":"fc934792","id":7,"name":"InvalidAuthenticatorData","nameLocation":"1389:24:0","nodeType":"ErrorDefinition","parameters":{"id":6,"nodeType":"ParameterList","parameters":[],"src":"1413:2:0"},"src":"1383:33:0"},{"errorSelector":"ebab5d29","id":9,"name":"InvalidClientData","nameLocation":"1427:17:0","nodeType":"ErrorDefinition","parameters":{"id":8,"nodeType":"ParameterList","parameters":[],"src":"1444:2:0"},"src":"1421:26:0"},{"errorSelector":"8baa579f","id":11,"name":"InvalidSignature","nameLocation":"1458:16:0","nodeType":"ErrorDefinition","parameters":{"id":10,"nodeType":"ParameterList","parameters":[],"src":"1474:2:0"},"src":"1452:25:0"},{"body":{"id":108,"nodeType":"Block","src":"1783:1781:0","statements":[{"id":85,"nodeType":"Block","src":"1885:1178:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":37,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":34,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":30,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"1904:17:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":32,"indexExpression":{"hexValue":"3332","id":31,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1922:2:0","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1904:21:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":33,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15,"src":"1928:25:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"1904:49:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"id":35,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1903:51:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":36,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15,"src":"1958:25:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"1903:80:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42,"nodeType":"IfStatement","src":"1899:152:0","trueBody":{"id":41,"nodeType":"Block","src":"1985:66:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":38,"name":"InvalidAuthenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7,"src":"2010:24:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":39,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2010:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40,"nodeType":"RevertStatement","src":"2003:33:0"}]}},{"assignments":[44],"declarations":[{"constant":false,"id":44,"mutability":"mutable","name":"challengeEncoded","nameLocation":"2262:16:0","nodeType":"VariableDeclaration","scope":85,"src":"2248:30:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":43,"name":"string","nodeType":"ElementaryTypeName","src":"2248:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":52,"initialValue":{"arguments":[{"arguments":[{"id":49,"name":"clientChallenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19,"src":"2315:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":47,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2298:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2302:12:0","memberName":"encodePacked","nodeType":"MemberAccess","src":"2298:16:0","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":50,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2298:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":45,"name":"Base64Url","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1932,"src":"2281:9:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Base64Url_$1932_$","typeString":"type(library Base64Url)"}},"id":46,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2291:6:0","memberName":"encode","nodeType":"MemberAccess","referencedDeclaration":1931,"src":"2281:16:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_string_memory_ptr_$","typeString":"function (bytes memory) pure returns (string memory)"}},"id":51,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2281:51:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"2248:84:0"},{"assignments":[54],"declarations":[{"constant":false,"id":54,"mutability":"mutable","name":"challengeExtracted","nameLocation":"2359:18:0","nodeType":"VariableDeclaration","scope":85,"src":"2346:31:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":53,"name":"bytes","nodeType":"ElementaryTypeName","src":"2346:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":63,"initialValue":{"arguments":[{"expression":{"arguments":[{"id":59,"name":"challengeEncoded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44,"src":"2409:16:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":58,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2403:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":57,"name":"bytes","nodeType":"ElementaryTypeName","src":"2403:5:0","typeDescriptions":{}}},"id":60,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2403:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":61,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2427:6:0","memberName":"length","nodeType":"MemberAccess","src":"2403:30:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2380:9:0","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":55,"name":"bytes","nodeType":"ElementaryTypeName","src":"2384:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":62,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2380:63:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2346:97:0"},{"AST":{"nodeType":"YulBlock","src":"2467:229:0","statements":[{"expression":{"arguments":[{"arguments":[{"name":"challengeExtracted","nodeType":"YulIdentifier","src":"2523:18:0"},{"kind":"number","nodeType":"YulLiteral","src":"2543:2:0","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2519:3:0"},"nodeType":"YulFunctionCall","src":"2519:27:0"},{"arguments":[{"name":"clientData.offset","nodeType":"YulIdentifier","src":"2572:17:0"},{"name":"clientChallengeDataOffset","nodeType":"YulIdentifier","src":"2591:25:0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2568:3:0"},"nodeType":"YulFunctionCall","src":"2568:49:0"},{"arguments":[{"name":"challengeExtracted","nodeType":"YulIdentifier","src":"2645:18:0"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2639:5:0"},"nodeType":"YulFunctionCall","src":"2639:25:0"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2485:12:0"},"nodeType":"YulFunctionCall","src":"2485:197:0"},"nodeType":"YulExpressionStatement","src":"2485:197:0"}]},"evmVersion":"paris","externalReferences":[{"declaration":54,"isOffset":false,"isSlot":false,"src":"2523:18:0","valueSize":1},{"declaration":54,"isOffset":false,"isSlot":false,"src":"2645:18:0","valueSize":1},{"declaration":21,"isOffset":false,"isSlot":false,"src":"2591:25:0","valueSize":1},{"declaration":17,"isOffset":true,"isSlot":false,"src":"2572:17:0","suffix":"offset","valueSize":1}],"id":64,"nodeType":"InlineAssembly","src":"2458:238:0"},{"assignments":[66],"declarations":[{"constant":false,"id":66,"mutability":"mutable","name":"moreData","nameLocation":"2718:8:0","nodeType":"VariableDeclaration","scope":85,"src":"2710:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":65,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2710:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":67,"nodeType":"VariableDeclarationStatement","src":"2710:16:0"},{"AST":{"nodeType":"YulBlock","src":"2801:109:0","statements":[{"nodeType":"YulAssignment","src":"2819:77:0","value":{"arguments":[{"arguments":[{"name":"challengeExtracted","nodeType":"YulIdentifier","src":"2845:18:0"},{"kind":"number","nodeType":"YulLiteral","src":"2865:2:0","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2841:3:0"},"nodeType":"YulFunctionCall","src":"2841:27:0"},{"arguments":[{"name":"challengeExtracted","nodeType":"YulIdentifier","src":"2876:18:0"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2870:5:0"},"nodeType":"YulFunctionCall","src":"2870:25:0"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"2831:9:0"},"nodeType":"YulFunctionCall","src":"2831:65:0"},"variableNames":[{"name":"moreData","nodeType":"YulIdentifier","src":"2819:8:0"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":54,"isOffset":false,"isSlot":false,"src":"2845:18:0","valueSize":1},{"declaration":54,"isOffset":false,"isSlot":false,"src":"2876:18:0","valueSize":1},{"declaration":66,"isOffset":false,"isSlot":false,"src":"2819:8:0","valueSize":1}],"id":68,"nodeType":"InlineAssembly","src":"2792:118:0"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":79,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":74,"name":"challengeEncoded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44,"src":"2961:16:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":73,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2955:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":72,"name":"bytes","nodeType":"ElementaryTypeName","src":"2955:5:0","typeDescriptions":{}}},"id":75,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2955:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":70,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2938:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":71,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2942:12:0","memberName":"encodePacked","nodeType":"MemberAccess","src":"2938:16:0","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2938:41:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":69,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2928:9:0","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":77,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2928:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":78,"name":"moreData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":66,"src":"2984:8:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2928:64:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":84,"nodeType":"IfStatement","src":"2924:129:0","trueBody":{"id":83,"nodeType":"Block","src":"2994:59:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":80,"name":"InvalidClientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9,"src":"3019:17:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":81,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3019:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":82,"nodeType":"RevertStatement","src":"3012:26:0"}]}}]},{"assignments":[87],"declarations":[{"constant":false,"id":87,"mutability":"mutable","name":"verifyData","nameLocation":"3190:10:0","nodeType":"VariableDeclaration","scope":108,"src":"3177:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":86,"name":"bytes","nodeType":"ElementaryTypeName","src":"3177:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":95,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":93,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":90,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"3213:17:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":91,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3231:6:0","memberName":"length","nodeType":"MemberAccess","src":"3213:24:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"3332","id":92,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3240:2:0","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"3213:29:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":89,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3203:9:0","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":88,"name":"bytes","nodeType":"ElementaryTypeName","src":"3207:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":94,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3203:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3177:66:0"},{"AST":{"nodeType":"YulBlock","src":"3263:109:0","statements":[{"expression":{"arguments":[{"arguments":[{"name":"verifyData","nodeType":"YulIdentifier","src":"3294:10:0"},{"kind":"number","nodeType":"YulLiteral","src":"3306:2:0","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3290:3:0"},"nodeType":"YulFunctionCall","src":"3290:19:0"},{"name":"authenticatorData.offset","nodeType":"YulIdentifier","src":"3311:24:0"},{"name":"authenticatorData.length","nodeType":"YulIdentifier","src":"3337:24:0"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3277:12:0"},"nodeType":"YulFunctionCall","src":"3277:85:0"},"nodeType":"YulExpressionStatement","src":"3277:85:0"}]},"evmVersion":"paris","externalReferences":[{"declaration":13,"isOffset":false,"isSlot":false,"src":"3337:24:0","suffix":"length","valueSize":1},{"declaration":13,"isOffset":true,"isSlot":false,"src":"3311:24:0","suffix":"offset","valueSize":1},{"declaration":87,"isOffset":false,"isSlot":false,"src":"3294:10:0","valueSize":1}],"id":96,"nodeType":"InlineAssembly","src":"3254:118:0"},{"assignments":[98],"declarations":[{"constant":false,"id":98,"mutability":"mutable","name":"more","nameLocation":"3390:4:0","nodeType":"VariableDeclaration","scope":108,"src":"3382:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":97,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3382:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":102,"initialValue":{"arguments":[{"id":100,"name":"clientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17,"src":"3404:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":99,"name":"sha256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-22,"src":"3397:6:0","typeDescriptions":{"typeIdentifier":"t_function_sha256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3397:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3382:33:0"},{"AST":{"nodeType":"YulBlock","src":"3434:88:0","statements":[{"expression":{"arguments":[{"arguments":[{"name":"verifyData","nodeType":"YulIdentifier","src":"3459:10:0"},{"arguments":[{"name":"authenticatorData.length","nodeType":"YulIdentifier","src":"3475:24:0"},{"kind":"number","nodeType":"YulLiteral","src":"3501:2:0","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3471:3:0"},"nodeType":"YulFunctionCall","src":"3471:33:0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3455:3:0"},"nodeType":"YulFunctionCall","src":"3455:50:0"},{"name":"more","nodeType":"YulIdentifier","src":"3507:4:0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3448:6:0"},"nodeType":"YulFunctionCall","src":"3448:64:0"},"nodeType":"YulExpressionStatement","src":"3448:64:0"}]},"evmVersion":"paris","externalReferences":[{"declaration":13,"isOffset":false,"isSlot":false,"src":"3475:24:0","suffix":"length","valueSize":1},{"declaration":98,"isOffset":false,"isSlot":false,"src":"3507:4:0","valueSize":1},{"declaration":87,"isOffset":false,"isSlot":false,"src":"3459:10:0","valueSize":1}],"id":103,"nodeType":"InlineAssembly","src":"3425:97:0"},{"expression":{"arguments":[{"id":105,"name":"verifyData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87,"src":"3546:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":104,"name":"sha256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-22,"src":"3539:6:0","typeDescriptions":{"typeIdentifier":"t_function_sha256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3539:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":29,"id":107,"nodeType":"Return","src":"3532:25:0"}]},"id":109,"implemented":true,"kind":"function","modifiers":[],"name":"WebAuthn_format","nameLocation":"1492:15:0","nodeType":"FunctionDefinition","parameters":{"id":26,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13,"mutability":"mutable","name":"authenticatorData","nameLocation":"1532:17:0","nodeType":"VariableDeclaration","scope":109,"src":"1517:32:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":12,"name":"bytes","nodeType":"ElementaryTypeName","src":"1517:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":15,"mutability":"mutable","name":"authenticatorDataFlagMask","nameLocation":"1566:25:0","nodeType":"VariableDeclaration","scope":109,"src":"1559:32:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":14,"name":"bytes1","nodeType":"ElementaryTypeName","src":"1559:6:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":17,"mutability":"mutable","name":"clientData","nameLocation":"1616:10:0","nodeType":"VariableDeclaration","scope":109,"src":"1601:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":16,"name":"bytes","nodeType":"ElementaryTypeName","src":"1601:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19,"mutability":"mutable","name":"clientChallenge","nameLocation":"1644:15:0","nodeType":"VariableDeclaration","scope":109,"src":"1636:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1636:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":21,"mutability":"mutable","name":"clientChallengeDataOffset","nameLocation":"1677:25:0","nodeType":"VariableDeclaration","scope":109,"src":"1669:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20,"name":"uint256","nodeType":"ElementaryTypeName","src":"1669:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":109,"src":"1712:19:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":22,"name":"uint256","nodeType":"ElementaryTypeName","src":"1712:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24,"length":{"hexValue":"32","id":23,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1720:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"1712:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"src":"1507:236:0"},"returnParameters":{"id":29,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28,"mutability":"mutable","name":"result","nameLocation":"1775:6:0","nodeType":"VariableDeclaration","scope":109,"src":"1767:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1767:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1766:16:0"},"scope":247,"src":"1483:2081:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":155,"nodeType":"Block","src":"3889:377:0","statements":[{"assignments":[133],"declarations":[{"constant":false,"id":133,"mutability":"mutable","name":"message","nameLocation":"4000:7:0","nodeType":"VariableDeclaration","scope":155,"src":"3992:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":132,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3992:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":143,"initialValue":{"arguments":[{"id":136,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111,"src":"4052:17:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":137,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":113,"src":"4071:25:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"id":138,"name":"clientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":115,"src":"4098:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":139,"name":"clientChallenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117,"src":"4110:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":140,"name":"clientChallengeDataOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119,"src":"4127:25:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":141,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":123,"src":"4154:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}],"expression":{"id":134,"name":"FCL_WebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"4010:12:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_WebAuthn_$247_$","typeString":"type(library FCL_WebAuthn)"}},"id":135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4023:15:0","memberName":"WebAuthn_format","nodeType":"MemberAccess","referencedDeclaration":109,"src":"4010:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_calldata_ptr_$_t_bytes1_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$_t_array$_t_uint256_$2_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata) pure returns (bytes32)"}},"id":142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4010:156:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3992:174:0"},{"assignments":[145],"declarations":[{"constant":false,"id":145,"mutability":"mutable","name":"result","nameLocation":"4182:6:0","nodeType":"VariableDeclaration","scope":155,"src":"4177:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":144,"name":"bool","nodeType":"ElementaryTypeName","src":"4177:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":152,"initialValue":{"arguments":[{"id":148,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"4220:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":149,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":123,"src":"4229:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},{"id":150,"name":"Q","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":127,"src":"4233:1:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}],"expression":{"id":146,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1886,"src":"4191:15:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$1886_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4207:12:0","memberName":"ecdsa_verify","nodeType":"MemberAccess","referencedDeclaration":1556,"src":"4191:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_uint256_$2_calldata_ptr_$_t_array$_t_uint256_$2_calldata_ptr_$returns$_t_bool_$","typeString":"function (bytes32,uint256[2] calldata,uint256[2] calldata) view returns (bool)"}},"id":151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4191:44:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"4177:58:0"},{"expression":{"id":153,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":145,"src":"4253:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":131,"id":154,"nodeType":"Return","src":"4246:13:0"}]},"id":156,"implemented":true,"kind":"function","modifiers":[],"name":"checkSignature","nameLocation":"3580:14:0","nodeType":"FunctionDefinition","parameters":{"id":128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":111,"mutability":"mutable","name":"authenticatorData","nameLocation":"3620:17:0","nodeType":"VariableDeclaration","scope":156,"src":"3605:32:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":110,"name":"bytes","nodeType":"ElementaryTypeName","src":"3605:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":113,"mutability":"mutable","name":"authenticatorDataFlagMask","nameLocation":"3654:25:0","nodeType":"VariableDeclaration","scope":156,"src":"3647:32:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":112,"name":"bytes1","nodeType":"ElementaryTypeName","src":"3647:6:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":115,"mutability":"mutable","name":"clientData","nameLocation":"3704:10:0","nodeType":"VariableDeclaration","scope":156,"src":"3689:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":114,"name":"bytes","nodeType":"ElementaryTypeName","src":"3689:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":117,"mutability":"mutable","name":"clientChallenge","nameLocation":"3732:15:0","nodeType":"VariableDeclaration","scope":156,"src":"3724:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":116,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3724:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":119,"mutability":"mutable","name":"clientChallengeDataOffset","nameLocation":"3765:25:0","nodeType":"VariableDeclaration","scope":156,"src":"3757:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":118,"name":"uint256","nodeType":"ElementaryTypeName","src":"3757:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":123,"mutability":"mutable","name":"rs","nameLocation":"3820:2:0","nodeType":"VariableDeclaration","scope":156,"src":"3800:22:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":120,"name":"uint256","nodeType":"ElementaryTypeName","src":"3800:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":122,"length":{"hexValue":"32","id":121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3808:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"3800:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":127,"mutability":"mutable","name":"Q","nameLocation":"3852:1:0","nodeType":"VariableDeclaration","scope":156,"src":"3832:21:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":124,"name":"uint256","nodeType":"ElementaryTypeName","src":"3832:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":126,"length":{"hexValue":"32","id":125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3840:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"3832:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"src":"3595:264:0"},"returnParameters":{"id":131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":130,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":156,"src":"3883:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":129,"name":"bool","nodeType":"ElementaryTypeName","src":"3883:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3882:6:0"},"scope":247,"src":"3570:696:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":200,"nodeType":"Block","src":"4592:399:0","statements":[{"assignments":[178],"declarations":[{"constant":false,"id":178,"mutability":"mutable","name":"message","nameLocation":"4703:7:0","nodeType":"VariableDeclaration","scope":200,"src":"4695:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":177,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4695:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":188,"initialValue":{"arguments":[{"id":181,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":158,"src":"4755:17:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":182,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":160,"src":"4774:25:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"id":183,"name":"clientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"4801:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":184,"name":"clientChallenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":164,"src":"4813:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":185,"name":"clientChallengeDataOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":166,"src":"4830:25:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":186,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":170,"src":"4857:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}],"expression":{"id":179,"name":"FCL_WebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"4713:12:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_WebAuthn_$247_$","typeString":"type(library FCL_WebAuthn)"}},"id":180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4726:15:0","memberName":"WebAuthn_format","nodeType":"MemberAccess","referencedDeclaration":109,"src":"4713:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_calldata_ptr_$_t_bytes1_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$_t_array$_t_uint256_$2_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata) pure returns (bytes32)"}},"id":187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4713:156:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4695:174:0"},{"assignments":[190],"declarations":[{"constant":false,"id":190,"mutability":"mutable","name":"result","nameLocation":"4885:6:0","nodeType":"VariableDeclaration","scope":200,"src":"4880:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":189,"name":"bool","nodeType":"ElementaryTypeName","src":"4880:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":197,"initialValue":{"arguments":[{"id":193,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":178,"src":"4935:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":194,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":170,"src":"4944:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},{"id":195,"name":"dataPointer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":172,"src":"4948:11:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":191,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1886,"src":"4894:15:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$1886_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4910:24:0","memberName":"ecdsa_precomputed_verify","nodeType":"MemberAccess","referencedDeclaration":1635,"src":"4894:40:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_uint256_$2_calldata_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,uint256[2] calldata,address) view returns (bool)"}},"id":196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4894:66:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"4880:80:0"},{"expression":{"id":198,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":190,"src":"4978:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":176,"id":199,"nodeType":"Return","src":"4971:13:0"}]},"id":201,"implemented":true,"kind":"function","modifiers":[],"name":"checkSignature_prec","nameLocation":"4281:19:0","nodeType":"FunctionDefinition","parameters":{"id":173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":158,"mutability":"mutable","name":"authenticatorData","nameLocation":"4325:17:0","nodeType":"VariableDeclaration","scope":201,"src":"4310:32:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":157,"name":"bytes","nodeType":"ElementaryTypeName","src":"4310:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":160,"mutability":"mutable","name":"authenticatorDataFlagMask","nameLocation":"4359:25:0","nodeType":"VariableDeclaration","scope":201,"src":"4352:32:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":159,"name":"bytes1","nodeType":"ElementaryTypeName","src":"4352:6:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":162,"mutability":"mutable","name":"clientData","nameLocation":"4409:10:0","nodeType":"VariableDeclaration","scope":201,"src":"4394:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":161,"name":"bytes","nodeType":"ElementaryTypeName","src":"4394:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":164,"mutability":"mutable","name":"clientChallenge","nameLocation":"4437:15:0","nodeType":"VariableDeclaration","scope":201,"src":"4429:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":163,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4429:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":166,"mutability":"mutable","name":"clientChallengeDataOffset","nameLocation":"4470:25:0","nodeType":"VariableDeclaration","scope":201,"src":"4462:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":165,"name":"uint256","nodeType":"ElementaryTypeName","src":"4462:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":170,"mutability":"mutable","name":"rs","nameLocation":"4525:2:0","nodeType":"VariableDeclaration","scope":201,"src":"4505:22:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":167,"name":"uint256","nodeType":"ElementaryTypeName","src":"4505:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":169,"length":{"hexValue":"32","id":168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4513:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"4505:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":172,"mutability":"mutable","name":"dataPointer","nameLocation":"4545:11:0","nodeType":"VariableDeclaration","scope":201,"src":"4537:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":171,"name":"address","nodeType":"ElementaryTypeName","src":"4537:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4300:262:0"},"returnParameters":{"id":176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":175,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":201,"src":"4586:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":174,"name":"bool","nodeType":"ElementaryTypeName","src":"4586:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4585:6:0"},"scope":247,"src":"4272:719:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":245,"nodeType":"Block","src":"5389:400:0","statements":[{"assignments":[223],"declarations":[{"constant":false,"id":223,"mutability":"mutable","name":"message","nameLocation":"5500:7:0","nodeType":"VariableDeclaration","scope":245,"src":"5492:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":222,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5492:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":233,"initialValue":{"arguments":[{"id":226,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":203,"src":"5552:17:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":227,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":205,"src":"5571:25:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"id":228,"name":"clientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":207,"src":"5598:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":229,"name":"clientChallenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":209,"src":"5610:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":230,"name":"clientChallengeDataOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":211,"src":"5627:25:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":231,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":215,"src":"5654:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}],"expression":{"id":224,"name":"FCL_WebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"5510:12:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_WebAuthn_$247_$","typeString":"type(library FCL_WebAuthn)"}},"id":225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5523:15:0","memberName":"WebAuthn_format","nodeType":"MemberAccess","referencedDeclaration":109,"src":"5510:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_calldata_ptr_$_t_bytes1_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$_t_array$_t_uint256_$2_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata) pure returns (bytes32)"}},"id":232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5510:156:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5492:174:0"},{"assignments":[235],"declarations":[{"constant":false,"id":235,"mutability":"mutable","name":"result","nameLocation":"5682:6:0","nodeType":"VariableDeclaration","scope":245,"src":"5677:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":234,"name":"bool","nodeType":"ElementaryTypeName","src":"5677:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":242,"initialValue":{"arguments":[{"id":238,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":223,"src":"5733:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":239,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":215,"src":"5742:2:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},{"id":240,"name":"dataPointer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":217,"src":"5746:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":236,"name":"FCL_Elliptic_ZZ","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1886,"src":"5691:15:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_Elliptic_ZZ_$1886_$","typeString":"type(library FCL_Elliptic_ZZ)"}},"id":237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5707:25:0","memberName":"ecdsa_precomputed_hackmem","nodeType":"MemberAccess","referencedDeclaration":1714,"src":"5691:41:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_uint256_$2_calldata_ptr_$_t_uint256_$returns$_t_bool_$","typeString":"function (bytes32,uint256[2] calldata,uint256) view returns (bool)"}},"id":241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5691:67:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"5677:81:0"},{"expression":{"id":243,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":235,"src":"5776:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":221,"id":244,"nodeType":"Return","src":"5769:13:0"}]},"id":246,"implemented":true,"kind":"function","modifiers":[],"name":"checkSignature_hackmem","nameLocation":"5075:22:0","nodeType":"FunctionDefinition","parameters":{"id":218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":203,"mutability":"mutable","name":"authenticatorData","nameLocation":"5122:17:0","nodeType":"VariableDeclaration","scope":246,"src":"5107:32:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":202,"name":"bytes","nodeType":"ElementaryTypeName","src":"5107:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":205,"mutability":"mutable","name":"authenticatorDataFlagMask","nameLocation":"5156:25:0","nodeType":"VariableDeclaration","scope":246,"src":"5149:32:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":204,"name":"bytes1","nodeType":"ElementaryTypeName","src":"5149:6:0","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":207,"mutability":"mutable","name":"clientData","nameLocation":"5206:10:0","nodeType":"VariableDeclaration","scope":246,"src":"5191:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":206,"name":"bytes","nodeType":"ElementaryTypeName","src":"5191:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":209,"mutability":"mutable","name":"clientChallenge","nameLocation":"5234:15:0","nodeType":"VariableDeclaration","scope":246,"src":"5226:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":208,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5226:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":211,"mutability":"mutable","name":"clientChallengeDataOffset","nameLocation":"5267:25:0","nodeType":"VariableDeclaration","scope":246,"src":"5259:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":210,"name":"uint256","nodeType":"ElementaryTypeName","src":"5259:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":215,"mutability":"mutable","name":"rs","nameLocation":"5322:2:0","nodeType":"VariableDeclaration","scope":246,"src":"5302:22:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":212,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":214,"length":{"hexValue":"32","id":213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5310:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"5302:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":217,"mutability":"mutable","name":"dataPointer","nameLocation":"5342:11:0","nodeType":"VariableDeclaration","scope":246,"src":"5334:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":216,"name":"uint256","nodeType":"ElementaryTypeName","src":"5334:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5097:262:0"},"returnParameters":{"id":221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":220,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":246,"src":"5383:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":219,"name":"bool","nodeType":"ElementaryTypeName","src":"5383:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5382:6:0"},"scope":247,"src":"5066:723:0","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":248,"src":"1356:4435:0","usedErrors":[7,9,11],"usedEvents":[]}],"src":"1228:4564:0"},"id":0},"FreshCryptoLib/FCL_elliptic.sol":{"ast":{"absolutePath":"FreshCryptoLib/FCL_elliptic.sol","exportedSymbols":{"FCL_Elliptic_ZZ":[1886]},"id":1887,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":249,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"1186:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"FCL_Elliptic_ZZ","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":1886,"linearizedBaseContracts":[1886],"name":"FCL_Elliptic_ZZ","nameLocation":"1220:15:1","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":252,"mutability":"constant","name":"MODEXP_PRECOMPILE","nameLocation":"1402:17:1","nodeType":"VariableDeclaration","scope":1886,"src":"1385:79:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":250,"name":"address","nodeType":"ElementaryTypeName","src":"1385:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303035","id":251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1422:42:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x0000000000000000000000000000000000000005"},"visibility":"internal"},{"constant":true,"id":255,"mutability":"constant","name":"p","nameLocation":"1519:1:1","nodeType":"VariableDeclaration","scope":1886,"src":"1502:87:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":253,"name":"uint256","nodeType":"ElementaryTypeName","src":"1502:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303031303030303030303030303030303030303030303030303030464646464646464646464646464646464646464646464646","id":254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1523:66:1","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248762697446949407573530086143415290314195533631308867097853951_by_1","typeString":"int_const 1157...(70 digits omitted)...3951"},"value":"0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":258,"mutability":"constant","name":"a","nameLocation":"1654:1:1","nodeType":"VariableDeclaration","scope":1886,"src":"1637:87:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":256,"name":"uint256","nodeType":"ElementaryTypeName","src":"1637:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303031303030303030303030303030303030303030303030303030464646464646464646464646464646464646464646464643","id":257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1658:66:1","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248762697446949407573530086143415290314195533631308867097853948_by_1","typeString":"int_const 1157...(70 digits omitted)...3948"},"value":"0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"},"visibility":"internal"},{"constant":true,"id":261,"mutability":"constant","name":"b","nameLocation":"1790:1:1","nodeType":"VariableDeclaration","scope":1886,"src":"1773:87:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":259,"name":"uint256","nodeType":"ElementaryTypeName","src":"1773:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307835414336333544384141334139334537423345424244353537363938383642433635314430364230434335334230463633424345334333453237443236303442","id":260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1794:66:1","typeDescriptions":{"typeIdentifier":"t_rational_41058363725152142129326129780047268409114441015993725554835256314039467401291_by_1","typeString":"int_const 4105...(69 digits omitted)...1291"},"value":"0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"},"visibility":"internal"},{"constant":true,"id":264,"mutability":"constant","name":"gx","nameLocation":"1925:2:1","nodeType":"VariableDeclaration","scope":1886,"src":"1908:88:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":262,"name":"uint256","nodeType":"ElementaryTypeName","src":"1908:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307836423137443146324531324334323437463842434536453536334134343046323737303337443831324445423333413046344131333934354438393843323936","id":263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1930:66:1","typeDescriptions":{"typeIdentifier":"t_rational_48439561293906451759052585252797914202762949526041747995844080717082404635286_by_1","typeString":"int_const 4843...(69 digits omitted)...5286"},"value":"0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296"},"visibility":"internal"},{"constant":true,"id":267,"mutability":"constant","name":"gy","nameLocation":"2019:2:1","nodeType":"VariableDeclaration","scope":1886,"src":"2002:88:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":265,"name":"uint256","nodeType":"ElementaryTypeName","src":"2002:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307834464533343245324645314137463942384545374542344137433046394531363242434533333537364233313545434543424236343036383337424635314635","id":266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2024:66:1","typeDescriptions":{"typeIdentifier":"t_rational_36134250956749795798585127919587881956611106672985015071877198253568414405109_by_1","typeString":"int_const 3613...(69 digits omitted)...5109"},"value":"0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5"},"visibility":"internal"},{"constant":true,"id":270,"mutability":"constant","name":"n","nameLocation":"2150:1:1","nodeType":"VariableDeclaration","scope":1886,"src":"2133:87:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":268,"name":"uint256","nodeType":"ElementaryTypeName","src":"2133:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303030464646464646464646464646464646464243453646414144413731373945383446334239434143324643363332353531","id":269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2154:66:1","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248762697446949407573529996955224135760342422259061068512044369_by_1","typeString":"int_const 1157...(70 digits omitted)...4369"},"value":"0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"},"visibility":"internal"},{"constant":true,"id":273,"mutability":"constant","name":"minus_2","nameLocation":"2328:7:1","nodeType":"VariableDeclaration","scope":1886,"src":"2311:93:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":271,"name":"uint256","nodeType":"ElementaryTypeName","src":"2311:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303031303030303030303030303030303030303030303030303030464646464646464646464646464646464646464646464644","id":272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2338:66:1","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248762697446949407573530086143415290314195533631308867097853949_by_1","typeString":"int_const 1157...(70 digits omitted)...3949"},"value":"0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD"},"visibility":"internal"},{"constant":true,"id":276,"mutability":"constant","name":"minus_2modn","nameLocation":"2482:11:1","nodeType":"VariableDeclaration","scope":1886,"src":"2465:97:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":274,"name":"uint256","nodeType":"ElementaryTypeName","src":"2465:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303030464646464646464646464646464646464243453646414144413731373945383446334239434143324643363332353446","id":275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2496:66:1","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248762697446949407573529996955224135760342422259061068512044367_by_1","typeString":"int_const 1157...(70 digits omitted)...4367"},"value":"0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F"},"visibility":"internal"},{"constant":true,"id":279,"mutability":"constant","name":"minus_1","nameLocation":"2586:7:1","nodeType":"VariableDeclaration","scope":1886,"src":"2569:93:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":277,"name":"uint256","nodeType":"ElementaryTypeName","src":"2569:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646","id":278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2596:66:1","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1","typeString":"int_const 1157...(70 digits omitted)...9935"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":282,"mutability":"constant","name":"pp1div4","nameLocation":"2701:7:1","nodeType":"VariableDeclaration","scope":1886,"src":"2684:91:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":280,"name":"uint256","nodeType":"ElementaryTypeName","src":"2684:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307833666666666666666330303030303030343030303030303030303030303030303030303030303030343030303030303030303030303030303030303030303030","id":281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2709:66:1","typeDescriptions":{"typeIdentifier":"t_rational_28948022302589062190674361737351893382521535853822578548883407827216774463488_by_1","typeString":"int_const 2894...(69 digits omitted)...3488"},"value":"0x3fffffffc0000000400000000000000000000000400000000000000000000000"},"visibility":"internal"},{"constant":true,"id":285,"mutability":"constant","name":"_NOTSQUARE","nameLocation":"2859:10:1","nodeType":"VariableDeclaration","scope":1886,"src":"2842:94:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":283,"name":"uint256","nodeType":"ElementaryTypeName","src":"2842:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303032303030303030303030303030303030303030303030303030464646464646464646464646464646464646464646464646","id":284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2870:66:1","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248768974548684794254293921932838497980611635986753331132366847_by_1","typeString":"int_const 1157...(70 digits omitted)...6847"},"value":"0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":288,"mutability":"constant","name":"_NOTONCURVE","nameLocation":"2959:11:1","nodeType":"VariableDeclaration","scope":1886,"src":"2942:95:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":286,"name":"uint256","nodeType":"ElementaryTypeName","src":"2942:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646463030303030303033303030303030303030303030303030303030303030303030464646464646464646464646464646464646464646464646","id":287,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2971:66:1","typeDescriptions":{"typeIdentifier":"t_rational_115792089210356248775251650420180935057757722261705647027738342197795166879743_by_1","typeString":"int_const 1157...(70 digits omitted)...9743"},"value":"0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"body":{"id":297,"nodeType":"Block","src":"3217:663:1","statements":[{"AST":{"nodeType":"YulBlock","src":"3236:638:1","statements":[{"nodeType":"YulVariableDeclaration","src":"3250:26:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3271:4:1","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3265:5:1"},"nodeType":"YulFunctionCall","src":"3265:11:1"},"variables":[{"name":"pointer","nodeType":"YulTypedName","src":"3254:7:1","type":""}]},{"expression":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3373:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"3382:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3366:6:1"},"nodeType":"YulFunctionCall","src":"3366:21:1"},"nodeType":"YulExpressionStatement","src":"3366:21:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3411:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"3420:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3407:3:1"},"nodeType":"YulFunctionCall","src":"3407:18:1"},{"kind":"number","nodeType":"YulLiteral","src":"3427:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3400:6:1"},"nodeType":"YulFunctionCall","src":"3400:32:1"},"nodeType":"YulExpressionStatement","src":"3400:32:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3456:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"3465:4:1","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3452:3:1"},"nodeType":"YulFunctionCall","src":"3452:18:1"},{"kind":"number","nodeType":"YulLiteral","src":"3472:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3445:6:1"},"nodeType":"YulFunctionCall","src":"3445:32:1"},"nodeType":"YulExpressionStatement","src":"3445:32:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3560:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"3569:4:1","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3556:3:1"},"nodeType":"YulFunctionCall","src":"3556:18:1"},{"name":"u","nodeType":"YulIdentifier","src":"3576:1:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3549:6:1"},"nodeType":"YulFunctionCall","src":"3549:29:1"},"nodeType":"YulExpressionStatement","src":"3549:29:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3602:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"3611:4:1","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3598:3:1"},"nodeType":"YulFunctionCall","src":"3598:18:1"},{"name":"minus_2modn","nodeType":"YulIdentifier","src":"3618:11:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3591:6:1"},"nodeType":"YulFunctionCall","src":"3591:39:1"},"nodeType":"YulExpressionStatement","src":"3591:39:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3654:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"3663:4:1","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3650:3:1"},"nodeType":"YulFunctionCall","src":"3650:18:1"},{"name":"n","nodeType":"YulIdentifier","src":"3670:1:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3643:6:1"},"nodeType":"YulFunctionCall","src":"3643:29:1"},"nodeType":"YulExpressionStatement","src":"3643:29:1"},{"body":{"nodeType":"YulBlock","src":"3811:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3820:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3823:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3813:6:1"},"nodeType":"YulFunctionCall","src":"3813:12:1"},"nodeType":"YulExpressionStatement","src":"3813:12:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3770:1:1","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3766:3:1"},"nodeType":"YulFunctionCall","src":"3766:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"3774:4:1","type":"","value":"0x05"},{"name":"pointer","nodeType":"YulIdentifier","src":"3780:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"3789:4:1","type":"","value":"0xc0"},{"name":"pointer","nodeType":"YulIdentifier","src":"3795:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"3804:4:1","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"3755:10:1"},"nodeType":"YulFunctionCall","src":"3755:54:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3748:6:1"},"nodeType":"YulFunctionCall","src":"3748:62:1"},"nodeType":"YulIf","src":"3745:82:1"},{"nodeType":"YulAssignment","src":"3840:24:1","value":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"3856:7:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3850:5:1"},"nodeType":"YulFunctionCall","src":"3850:14:1"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"3840:6:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":276,"isOffset":false,"isSlot":false,"src":"3618:11:1","valueSize":1},{"declaration":270,"isOffset":false,"isSlot":false,"src":"3670:1:1","valueSize":1},{"declaration":294,"isOffset":false,"isSlot":false,"src":"3840:6:1","valueSize":1},{"declaration":291,"isOffset":false,"isSlot":false,"src":"3576:1:1","valueSize":1}],"id":296,"nodeType":"InlineAssembly","src":"3227:647:1"}]},"documentation":{"id":289,"nodeType":"StructuredDocumentation","src":"3044:97:1","text":" /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem"},"id":298,"implemented":true,"kind":"function","modifiers":[],"name":"FCL_nModInv","nameLocation":"3155:11:1","nodeType":"FunctionDefinition","parameters":{"id":292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":291,"mutability":"mutable","name":"u","nameLocation":"3175:1:1","nodeType":"VariableDeclaration","scope":298,"src":"3167:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":290,"name":"uint256","nodeType":"ElementaryTypeName","src":"3167:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3166:11:1"},"returnParameters":{"id":295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":294,"mutability":"mutable","name":"result","nameLocation":"3209:6:1","nodeType":"VariableDeclaration","scope":298,"src":"3201:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":293,"name":"uint256","nodeType":"ElementaryTypeName","src":"3201:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3200:16:1"},"scope":1886,"src":"3146:734:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":307,"nodeType":"Block","src":"4063:659:1","statements":[{"AST":{"nodeType":"YulBlock","src":"4082:634:1","statements":[{"nodeType":"YulVariableDeclaration","src":"4096:26:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4117:4:1","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4111:5:1"},"nodeType":"YulFunctionCall","src":"4111:11:1"},"variables":[{"name":"pointer","nodeType":"YulTypedName","src":"4100:7:1","type":""}]},{"expression":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4219:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"4228:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4212:6:1"},"nodeType":"YulFunctionCall","src":"4212:21:1"},"nodeType":"YulExpressionStatement","src":"4212:21:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4257:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"4266:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4253:3:1"},"nodeType":"YulFunctionCall","src":"4253:18:1"},{"kind":"number","nodeType":"YulLiteral","src":"4273:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4246:6:1"},"nodeType":"YulFunctionCall","src":"4246:32:1"},"nodeType":"YulExpressionStatement","src":"4246:32:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4302:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"4311:4:1","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4298:3:1"},"nodeType":"YulFunctionCall","src":"4298:18:1"},{"kind":"number","nodeType":"YulLiteral","src":"4318:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4291:6:1"},"nodeType":"YulFunctionCall","src":"4291:32:1"},"nodeType":"YulExpressionStatement","src":"4291:32:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4406:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"4415:4:1","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4402:3:1"},"nodeType":"YulFunctionCall","src":"4402:18:1"},{"name":"u","nodeType":"YulIdentifier","src":"4422:1:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4395:6:1"},"nodeType":"YulFunctionCall","src":"4395:29:1"},"nodeType":"YulExpressionStatement","src":"4395:29:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4448:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"4457:4:1","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4444:3:1"},"nodeType":"YulFunctionCall","src":"4444:18:1"},{"name":"minus_2","nodeType":"YulIdentifier","src":"4464:7:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4437:6:1"},"nodeType":"YulFunctionCall","src":"4437:35:1"},"nodeType":"YulExpressionStatement","src":"4437:35:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4496:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"4505:4:1","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4492:3:1"},"nodeType":"YulFunctionCall","src":"4492:18:1"},{"name":"p","nodeType":"YulIdentifier","src":"4512:1:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4485:6:1"},"nodeType":"YulFunctionCall","src":"4485:29:1"},"nodeType":"YulExpressionStatement","src":"4485:29:1"},{"body":{"nodeType":"YulBlock","src":"4653:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4662:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4665:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4655:6:1"},"nodeType":"YulFunctionCall","src":"4655:12:1"},"nodeType":"YulExpressionStatement","src":"4655:12:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4612:1:1","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4608:3:1"},"nodeType":"YulFunctionCall","src":"4608:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"4616:4:1","type":"","value":"0x05"},{"name":"pointer","nodeType":"YulIdentifier","src":"4622:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"4631:4:1","type":"","value":"0xc0"},{"name":"pointer","nodeType":"YulIdentifier","src":"4637:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"4646:4:1","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"4597:10:1"},"nodeType":"YulFunctionCall","src":"4597:54:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4590:6:1"},"nodeType":"YulFunctionCall","src":"4590:62:1"},"nodeType":"YulIf","src":"4587:82:1"},{"nodeType":"YulAssignment","src":"4682:24:1","value":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"4698:7:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4692:5:1"},"nodeType":"YulFunctionCall","src":"4692:14:1"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"4682:6:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":273,"isOffset":false,"isSlot":false,"src":"4464:7:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"4512:1:1","valueSize":1},{"declaration":304,"isOffset":false,"isSlot":false,"src":"4682:6:1","valueSize":1},{"declaration":301,"isOffset":false,"isSlot":false,"src":"4422:1:1","valueSize":1}],"id":306,"nodeType":"InlineAssembly","src":"4073:643:1"}]},"documentation":{"id":299,"nodeType":"StructuredDocumentation","src":"3885:101:1","text":" /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled"},"id":308,"implemented":true,"kind":"function","modifiers":[],"name":"FCL_pModInv","nameLocation":"4001:11:1","nodeType":"FunctionDefinition","parameters":{"id":302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":301,"mutability":"mutable","name":"u","nameLocation":"4021:1:1","nodeType":"VariableDeclaration","scope":308,"src":"4013:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":300,"name":"uint256","nodeType":"ElementaryTypeName","src":"4013:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4012:11:1"},"returnParameters":{"id":305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":304,"mutability":"mutable","name":"result","nameLocation":"4055:6:1","nodeType":"VariableDeclaration","scope":308,"src":"4047:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":303,"name":"uint256","nodeType":"ElementaryTypeName","src":"4047:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4046:16:1"},"scope":1886,"src":"3992:730:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":383,"nodeType":"Block","src":"4962:318:1","statements":[{"assignments":[330],"declarations":[{"constant":false,"id":330,"mutability":"mutable","name":"alpha2","nameLocation":"4988:6:1","nodeType":"VariableDeclaration","scope":383,"src":"4980:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":329,"name":"uint256","nodeType":"ElementaryTypeName","src":"4980:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":336,"initialValue":{"arguments":[{"id":332,"name":"alpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":310,"src":"5002:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":333,"name":"alpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":310,"src":"5008:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":334,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5014:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":331,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"4995:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4995:21:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4980:36:1"},{"expression":{"id":343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":337,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":321,"src":"5034:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":339,"name":"alpha2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":330,"src":"5044:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":340,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":312,"src":"5052:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":341,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5054:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":338,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5037:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5037:19:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5034:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":344,"nodeType":"ExpressionStatement","src":"5034:22:1"},{"expression":{"id":355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":345,"name":"y3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":323,"src":"5079:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":348,"name":"alpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":310,"src":"5096:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":349,"name":"alpha2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":330,"src":"5103:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":350,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5110:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":347,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5089:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5089:23:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":352,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":314,"src":"5114:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":353,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5116:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":346,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5082:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5082:36:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5079:39:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":356,"nodeType":"ExpressionStatement","src":"5079:39:1"},{"expression":{"id":363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":357,"name":"zz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":325,"src":"5129:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":359,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":316,"src":"5140:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":360,"name":"alpha2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":330,"src":"5143:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":361,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5150:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":358,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5133:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5133:19:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5129:23:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":364,"nodeType":"ExpressionStatement","src":"5129:23:1"},{"expression":{"id":375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":365,"name":"zzz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":327,"src":"5174:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":367,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":318,"src":"5186:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":369,"name":"alpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":310,"src":"5197:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":370,"name":"alpha2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":330,"src":"5204:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":371,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5211:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":368,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5190:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5190:23:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":373,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5214:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":366,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5179:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5179:37:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5174:42:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":376,"nodeType":"ExpressionStatement","src":"5174:42:1"},{"expression":{"components":[{"id":377,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":321,"src":"5256:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":378,"name":"y3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":323,"src":"5260:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":379,"name":"zz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":325,"src":"5264:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":380,"name":"zzz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":327,"src":"5269:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":381,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5255:19:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"functionReturnParameters":328,"id":382,"nodeType":"Return","src":"5248:26:1"}]},"functionSelector":"7f99d960","id":384,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_Coronize","nameLocation":"4809:13:1","nodeType":"FunctionDefinition","parameters":{"id":319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":310,"mutability":"mutable","name":"alpha","nameLocation":"4831:5:1","nodeType":"VariableDeclaration","scope":384,"src":"4823:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":309,"name":"uint256","nodeType":"ElementaryTypeName","src":"4823:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":312,"mutability":"mutable","name":"x","nameLocation":"4846:1:1","nodeType":"VariableDeclaration","scope":384,"src":"4838:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":311,"name":"uint256","nodeType":"ElementaryTypeName","src":"4838:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":314,"mutability":"mutable","name":"y","nameLocation":"4857:1:1","nodeType":"VariableDeclaration","scope":384,"src":"4849:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":313,"name":"uint256","nodeType":"ElementaryTypeName","src":"4849:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":316,"mutability":"mutable","name":"zz","nameLocation":"4869:2:1","nodeType":"VariableDeclaration","scope":384,"src":"4861:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":315,"name":"uint256","nodeType":"ElementaryTypeName","src":"4861:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":318,"mutability":"mutable","name":"zzz","nameLocation":"4881:3:1","nodeType":"VariableDeclaration","scope":384,"src":"4873:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":317,"name":"uint256","nodeType":"ElementaryTypeName","src":"4873:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4822:63:1"},"returnParameters":{"id":328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":321,"mutability":"mutable","name":"x3","nameLocation":"4916:2:1","nodeType":"VariableDeclaration","scope":384,"src":"4908:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":320,"name":"uint256","nodeType":"ElementaryTypeName","src":"4908:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":323,"mutability":"mutable","name":"y3","nameLocation":"4928:2:1","nodeType":"VariableDeclaration","scope":384,"src":"4920:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":322,"name":"uint256","nodeType":"ElementaryTypeName","src":"4920:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":325,"mutability":"mutable","name":"zz3","nameLocation":"4940:3:1","nodeType":"VariableDeclaration","scope":384,"src":"4932:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":324,"name":"uint256","nodeType":"ElementaryTypeName","src":"4932:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":327,"mutability":"mutable","name":"zzz3","nameLocation":"4953:4:1","nodeType":"VariableDeclaration","scope":384,"src":"4945:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":326,"name":"uint256","nodeType":"ElementaryTypeName","src":"4945:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4907:51:1"},"scope":1886,"src":"4800:480:1","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":563,"nodeType":"Block","src":"5481:757:1","statements":[{"assignments":[412],"declarations":[{"constant":false,"id":412,"mutability":"mutable","name":"u1","nameLocation":"5495:2:1","nodeType":"VariableDeclaration","scope":563,"src":"5487:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":411,"name":"uint256","nodeType":"ElementaryTypeName","src":"5487:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":418,"initialValue":{"arguments":[{"id":414,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":386,"src":"5505:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":415,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"5508:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":416,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5512:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":413,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5498:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5498:16:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5487:27:1"},{"assignments":[420],"declarations":[{"constant":false,"id":420,"mutability":"mutable","name":"u2","nameLocation":"5543:2:1","nodeType":"VariableDeclaration","scope":563,"src":"5535:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":419,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":426,"initialValue":{"arguments":[{"id":422,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"5553:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":423,"name":"zz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":390,"src":"5557:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":424,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5561:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":421,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5546:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5546:17:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5535:28:1"},{"expression":{"id":435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":427,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":420,"src":"5599:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":429,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":420,"src":"5609:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":430,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5613:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":431,"name":"u1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":412,"src":"5615:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5613:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":433,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5619:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":428,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"5602:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5602:19:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5599:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":436,"nodeType":"ExpressionStatement","src":"5599:22:1"},{"expression":{"id":443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":437,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":386,"src":"5640:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":439,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":420,"src":"5650:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":440,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":420,"src":"5654:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":441,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5658:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":438,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5643:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5643:17:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5640:20:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":444,"nodeType":"ExpressionStatement","src":"5640:20:1"},{"expression":{"id":451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":445,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"5670:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":447,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":386,"src":"5680:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":448,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":420,"src":"5684:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":449,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5688:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":446,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5673:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5673:17:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5670:20:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":452,"nodeType":"ExpressionStatement","src":"5670:20:1"},{"expression":{"id":463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":453,"name":"zz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":407,"src":"5706:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":455,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":386,"src":"5717:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":457,"name":"zz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":390,"src":"5728:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":458,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"5733:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":459,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5738:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":456,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5721:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5721:19:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":461,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5741:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":454,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5710:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5710:33:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5706:37:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":464,"nodeType":"ExpressionStatement","src":"5706:37:1"},{"expression":{"id":475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":465,"name":"zzz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":409,"src":"5769:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":467,"name":"zzz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":392,"src":"5781:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":469,"name":"zzz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":400,"src":"5794:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":470,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"5800:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":471,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5804:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":468,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5787:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5787:19:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":473,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5807:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":466,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5774:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5774:35:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5769:40:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":476,"nodeType":"ExpressionStatement","src":"5769:40:1"},{"expression":{"id":483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":477,"name":"zz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":390,"src":"5838:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":479,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":388,"src":"5849:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":480,"name":"zzz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":400,"src":"5853:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":481,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5858:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":478,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5842:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5842:18:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5838:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":484,"nodeType":"ExpressionStatement","src":"5838:22:1"},{"expression":{"id":491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":485,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"5883:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":487,"name":"y2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":396,"src":"5894:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":488,"name":"zzz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":392,"src":"5898:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":489,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5904:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":486,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5887:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5887:19:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5883:23:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":492,"nodeType":"ExpressionStatement","src":"5883:23:1"},{"expression":{"id":501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":493,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"5932:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":495,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"5943:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":496,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5948:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":497,"name":"zz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":390,"src":"5950:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5948:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":499,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5955:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":494,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"5936:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5936:21:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5932:25:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":502,"nodeType":"ExpressionStatement","src":"5932:25:1"},{"expression":{"id":509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":503,"name":"zzz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":392,"src":"5974:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":505,"name":"u1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":412,"src":"5986:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":506,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":386,"src":"5990:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":507,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5993:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":504,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5979:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5979:16:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5974:21:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":510,"nodeType":"ExpressionStatement","src":"5974:21:1"},{"expression":{"id":531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":511,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":403,"src":"6013:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":515,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"6038:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":516,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"6043:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":517,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6048:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":514,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"6031:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6031:19:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":519,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6052:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":520,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"6054:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6052:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":522,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6057:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":513,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"6024:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6024:35:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":525,"name":"minus_2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":273,"src":"6068:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":526,"name":"zzz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":392,"src":"6077:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":527,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6082:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":524,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"6061:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6061:23:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":529,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6085:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":512,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"6017:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6017:70:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6013:74:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":532,"nodeType":"ExpressionStatement","src":"6013:74:1"},{"expression":{"id":555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":533,"name":"y3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":405,"src":"6111:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":536,"name":"zz2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"6129:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":538,"name":"zzz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":392,"src":"6141:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":539,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6147:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":540,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":403,"src":"6149:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6147:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":542,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6153:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":537,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"6134:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6134:21:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":544,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6156:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":535,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"6122:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6122:36:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":546,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6160:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":548,"name":"zz1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":390,"src":"6169:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":549,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"6174:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":550,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6178:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":547,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"6162:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6162:18:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6160:20:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":553,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"6181:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":534,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"6114:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6114:69:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6111:72:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":556,"nodeType":"ExpressionStatement","src":"6111:72:1"},{"expression":{"components":[{"id":557,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":403,"src":"6215:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":558,"name":"y3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":405,"src":"6219:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":559,"name":"zz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":407,"src":"6223:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":560,"name":"zzz3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":409,"src":"6228:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":561,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6214:19:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"functionReturnParameters":410,"id":562,"nodeType":"Return","src":"6207:26:1"}]},"id":564,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_Add","nameLocation":"5293:8:1","nodeType":"FunctionDefinition","parameters":{"id":401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":386,"mutability":"mutable","name":"x1","nameLocation":"5310:2:1","nodeType":"VariableDeclaration","scope":564,"src":"5302:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":385,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":388,"mutability":"mutable","name":"y1","nameLocation":"5322:2:1","nodeType":"VariableDeclaration","scope":564,"src":"5314:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":387,"name":"uint256","nodeType":"ElementaryTypeName","src":"5314:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":390,"mutability":"mutable","name":"zz1","nameLocation":"5334:3:1","nodeType":"VariableDeclaration","scope":564,"src":"5326:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":389,"name":"uint256","nodeType":"ElementaryTypeName","src":"5326:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":392,"mutability":"mutable","name":"zzz1","nameLocation":"5347:4:1","nodeType":"VariableDeclaration","scope":564,"src":"5339:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":391,"name":"uint256","nodeType":"ElementaryTypeName","src":"5339:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":394,"mutability":"mutable","name":"x2","nameLocation":"5361:2:1","nodeType":"VariableDeclaration","scope":564,"src":"5353:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":393,"name":"uint256","nodeType":"ElementaryTypeName","src":"5353:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":396,"mutability":"mutable","name":"y2","nameLocation":"5373:2:1","nodeType":"VariableDeclaration","scope":564,"src":"5365:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":395,"name":"uint256","nodeType":"ElementaryTypeName","src":"5365:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":398,"mutability":"mutable","name":"zz2","nameLocation":"5385:3:1","nodeType":"VariableDeclaration","scope":564,"src":"5377:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":397,"name":"uint256","nodeType":"ElementaryTypeName","src":"5377:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":400,"mutability":"mutable","name":"zzz2","nameLocation":"5398:4:1","nodeType":"VariableDeclaration","scope":564,"src":"5390:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":399,"name":"uint256","nodeType":"ElementaryTypeName","src":"5390:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5301:102:1"},"returnParameters":{"id":410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":403,"mutability":"mutable","name":"x3","nameLocation":"5436:2:1","nodeType":"VariableDeclaration","scope":564,"src":"5428:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":402,"name":"uint256","nodeType":"ElementaryTypeName","src":"5428:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":405,"mutability":"mutable","name":"y3","nameLocation":"5448:2:1","nodeType":"VariableDeclaration","scope":564,"src":"5440:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":404,"name":"uint256","nodeType":"ElementaryTypeName","src":"5440:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":407,"mutability":"mutable","name":"zz3","nameLocation":"5460:3:1","nodeType":"VariableDeclaration","scope":564,"src":"5452:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":406,"name":"uint256","nodeType":"ElementaryTypeName","src":"5452:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":409,"mutability":"mutable","name":"zzz3","nameLocation":"5473:4:1","nodeType":"VariableDeclaration","scope":564,"src":"5465:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":408,"name":"uint256","nodeType":"ElementaryTypeName","src":"5465:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5427:51:1"},"scope":1886,"src":"5284:954:1","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":588,"nodeType":"Block","src":"6691:1432:1","statements":[{"AST":{"nodeType":"YulBlock","src":"6719:1314:1","statements":[{"nodeType":"YulVariableDeclaration","src":"6775:26:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6796:4:1","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6790:5:1"},"nodeType":"YulFunctionCall","src":"6790:11:1"},"variables":[{"name":"pointer","nodeType":"YulTypedName","src":"6779:7:1","type":""}]},{"expression":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"6859:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"6868:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6852:6:1"},"nodeType":"YulFunctionCall","src":"6852:21:1"},"nodeType":"YulExpressionStatement","src":"6852:21:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"6937:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"6946:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6933:3:1"},"nodeType":"YulFunctionCall","src":"6933:18:1"},{"kind":"number","nodeType":"YulLiteral","src":"6953:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6926:6:1"},"nodeType":"YulFunctionCall","src":"6926:32:1"},"nodeType":"YulExpressionStatement","src":"6926:32:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"7021:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"7030:4:1","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7017:3:1"},"nodeType":"YulFunctionCall","src":"7017:18:1"},{"kind":"number","nodeType":"YulLiteral","src":"7037:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7010:6:1"},"nodeType":"YulFunctionCall","src":"7010:32:1"},"nodeType":"YulExpressionStatement","src":"7010:32:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"7099:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"7108:4:1","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7095:3:1"},"nodeType":"YulFunctionCall","src":"7095:18:1"},{"name":"self","nodeType":"YulIdentifier","src":"7115:4:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7088:6:1"},"nodeType":"YulFunctionCall","src":"7088:32:1"},"nodeType":"YulExpressionStatement","src":"7088:32:1"},{"expression":{"arguments":[{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"7175:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"7184:4:1","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7171:3:1"},"nodeType":"YulFunctionCall","src":"7171:18:1"},{"name":"pp1div4","nodeType":"YulIdentifier","src":"7191:7:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7164:6:1"},"nodeType":"YulFunctionCall","src":"7164:35:1"},"nodeType":"YulExpressionStatement","src":"7164:35:1"},{"nodeType":"YulVariableDeclaration","src":"7386:33:1","value":{"arguments":[{"name":"pointer","nodeType":"YulIdentifier","src":"7405:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"7414:4:1","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7401:3:1"},"nodeType":"YulFunctionCall","src":"7401:18:1"},"variables":[{"name":"_result","nodeType":"YulTypedName","src":"7390:7:1","type":""}]},{"expression":{"arguments":[{"name":"_result","nodeType":"YulIdentifier","src":"7469:7:1"},{"name":"p","nodeType":"YulIdentifier","src":"7478:1:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7462:6:1"},"nodeType":"YulFunctionCall","src":"7462:18:1"},"nodeType":"YulExpressionStatement","src":"7462:18:1"},{"body":{"nodeType":"YulBlock","src":"7954:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7963:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7966:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7956:6:1"},"nodeType":"YulFunctionCall","src":"7956:12:1"},"nodeType":"YulExpressionStatement","src":"7956:12:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7630:1:1","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7626:3:1"},"nodeType":"YulFunctionCall","src":"7626:6:1"},{"name":"MODEXP_PRECOMPILE","nodeType":"YulIdentifier","src":"7675:17:1"},{"name":"pointer","nodeType":"YulIdentifier","src":"7720:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"7759:4:1","type":"","value":"0xc0"},{"name":"_result","nodeType":"YulIdentifier","src":"7808:7:1"},{"kind":"number","nodeType":"YulLiteral","src":"7903:4:1","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"7598:10:1"},"nodeType":"YulFunctionCall","src":"7598:345:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7578:6:1"},"nodeType":"YulFunctionCall","src":"7578:375:1"},"nodeType":"YulIf","src":"7575:395:1"},{"nodeType":"YulAssignment","src":"7974:24:1","value":{"arguments":[{"name":"_result","nodeType":"YulIdentifier","src":"7990:7:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7984:5:1"},"nodeType":"YulFunctionCall","src":"7984:14:1"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"7974:6:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":252,"isOffset":false,"isSlot":false,"src":"7675:17:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"7478:1:1","valueSize":1},{"declaration":282,"isOffset":false,"isSlot":false,"src":"7191:7:1","valueSize":1},{"declaration":570,"isOffset":false,"isSlot":false,"src":"7974:6:1","valueSize":1},{"declaration":567,"isOffset":false,"isSlot":false,"src":"7115:4:1","valueSize":1}],"flags":["memory-safe"],"id":572,"nodeType":"InlineAssembly","src":"6694:1339:1"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":574,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":570,"src":"8047:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":575,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":570,"src":"8054:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":576,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"8061:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":573,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"8040:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8040:23:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":578,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":567,"src":"8065:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8040:29:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":585,"nodeType":"IfStatement","src":"8037:63:1","trueBody":{"id":584,"nodeType":"Block","src":"8070:30:1","statements":[{"expression":{"id":582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":580,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":570,"src":"8077:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":581,"name":"_NOTSQUARE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"8084:10:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8077:17:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":583,"nodeType":"ExpressionStatement","src":"8077:17:1"}]}},{"expression":{"id":586,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":570,"src":"8114:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":571,"id":587,"nodeType":"Return","src":"8107:13:1"}]},"documentation":{"id":565,"nodeType":"StructuredDocumentation","src":"6240:381:1","text":"@notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\n @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\n @param self The integer of which to find the modular inverse\n @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx"},"id":589,"implemented":true,"kind":"function","modifiers":[],"name":"SqrtMod","nameLocation":"6631:7:1","nodeType":"FunctionDefinition","parameters":{"id":568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":567,"mutability":"mutable","name":"self","nameLocation":"6647:4:1","nodeType":"VariableDeclaration","scope":589,"src":"6639:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":566,"name":"uint256","nodeType":"ElementaryTypeName","src":"6639:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6638:14:1"},"returnParameters":{"id":571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":570,"mutability":"mutable","name":"result","nameLocation":"6684:6:1","nodeType":"VariableDeclaration","scope":589,"src":"6676:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":569,"name":"uint256","nodeType":"ElementaryTypeName","src":"6676:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6675:16:1"},"scope":1886,"src":"6622:1501:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":626,"nodeType":"Block","src":"8284:138:1","statements":[{"id":625,"nodeType":"UncheckedBlock","src":"8294:122:1","statements":[{"expression":{"id":605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":601,"name":"P","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"8318:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":603,"indexExpression":{"hexValue":"32","id":602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8320:1:1","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8318:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8325:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8318:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":606,"nodeType":"ExpressionStatement","src":"8318:8:1"},{"expression":{"id":611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":607,"name":"P","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"8345:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":609,"indexExpression":{"hexValue":"33","id":608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8347:1:1","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8345:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8352:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8345:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":612,"nodeType":"ExpressionStatement","src":"8345:8:1"},{"expression":{"id":617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":613,"name":"P","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"8373:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":615,"indexExpression":{"hexValue":"30","id":614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8375:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8373:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":616,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"8380:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8373:9:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":618,"nodeType":"ExpressionStatement","src":"8373:9:1"},{"expression":{"id":623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":619,"name":"P","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"8396:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":621,"indexExpression":{"hexValue":"31","id":620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8398:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8396:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":622,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":594,"src":"8403:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8396:9:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":624,"nodeType":"ExpressionStatement","src":"8396:9:1"}]}]},"documentation":{"id":590,"nodeType":"StructuredDocumentation","src":"8128:62:1","text":" /* @dev Convert from affine rep to XYZZ rep"},"id":627,"implemented":true,"kind":"function","modifiers":[],"name":"ecAff_SetZZ","nameLocation":"8204:11:1","nodeType":"FunctionDefinition","parameters":{"id":595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":592,"mutability":"mutable","name":"x0","nameLocation":"8224:2:1","nodeType":"VariableDeclaration","scope":627,"src":"8216:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":591,"name":"uint256","nodeType":"ElementaryTypeName","src":"8216:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":594,"mutability":"mutable","name":"y0","nameLocation":"8236:2:1","nodeType":"VariableDeclaration","scope":627,"src":"8228:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":593,"name":"uint256","nodeType":"ElementaryTypeName","src":"8228:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8215:24:1"},"returnParameters":{"id":600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":599,"mutability":"mutable","name":"P","nameLocation":"8281:1:1","nodeType":"VariableDeclaration","scope":627,"src":"8263:19:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4]"},"typeName":{"baseType":{"id":596,"name":"uint256","nodeType":"ElementaryTypeName","src":"8263:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":598,"length":{"hexValue":"34","id":597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8271:1:1","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"ArrayTypeName","src":"8263:10:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_storage_ptr","typeString":"uint256[4]"}},"visibility":"internal"}],"src":"8262:21:1"},"scope":1886,"src":"8195:227:1","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":694,"nodeType":"Block","src":"8510:271:1","statements":[{"assignments":[637],"declarations":[{"constant":false,"id":637,"mutability":"mutable","name":"y2","nameLocation":"8530:2:1","nodeType":"VariableDeclaration","scope":694,"src":"8522:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":636,"name":"uint256","nodeType":"ElementaryTypeName","src":"8522:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":647,"initialValue":{"arguments":[{"id":639,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":629,"src":"8540:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":641,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":629,"src":"8549:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":642,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":629,"src":"8551:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":643,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"8553:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":640,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"8542:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8542:13:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":645,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"8556:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":638,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"8533:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8533:25:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8522:36:1"},{"expression":{"id":662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":648,"name":"y2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":637,"src":"8572:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":650,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"8582:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":652,"name":"y2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":637,"src":"8591:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":654,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":629,"src":"8601:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":655,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":258,"src":"8603:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":656,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"8605:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":653,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"8594:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8594:13:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":658,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"8608:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":651,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"8584:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8584:26:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":660,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"8611:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":649,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"8575:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8575:38:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8572:41:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":663,"nodeType":"ExpressionStatement","src":"8572:41:1"},{"expression":{"id":668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":664,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"8633:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":666,"name":"y2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":637,"src":"8643:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":665,"name":"SqrtMod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":589,"src":"8635:7:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8635:11:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8633:13:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":669,"nodeType":"ExpressionStatement","src":"8633:13:1"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":670,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"8659:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":671,"name":"_NOTSQUARE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"8662:10:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8659:13:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":676,"nodeType":"IfStatement","src":"8656:59:1","trueBody":{"id":675,"nodeType":"Block","src":"8673:42:1","statements":[{"expression":{"id":673,"name":"_NOTONCURVE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":288,"src":"8693:11:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":635,"id":674,"nodeType":"Return","src":"8686:18:1"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":677,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"8728:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8730:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8728:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":680,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8727:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":681,"name":"parity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":631,"src":"8735:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8742:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8735:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":684,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8734:10:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8727:17:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":693,"nodeType":"IfStatement","src":"8724:51:1","trueBody":{"id":692,"nodeType":"Block","src":"8745:30:1","statements":[{"expression":{"id":690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":686,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"8759:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":687,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"8761:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":688,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"8763:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8761:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8759:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":691,"nodeType":"ExpressionStatement","src":"8759:5:1"}]}}]},"id":695,"implemented":true,"kind":"function","modifiers":[],"name":"ec_Decompress","nameLocation":"8437:13:1","nodeType":"FunctionDefinition","parameters":{"id":632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":629,"mutability":"mutable","name":"x","nameLocation":"8459:1:1","nodeType":"VariableDeclaration","scope":695,"src":"8451:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":628,"name":"uint256","nodeType":"ElementaryTypeName","src":"8451:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":631,"mutability":"mutable","name":"parity","nameLocation":"8470:6:1","nodeType":"VariableDeclaration","scope":695,"src":"8462:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":630,"name":"uint256","nodeType":"ElementaryTypeName","src":"8462:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8450:27:1"},"returnParameters":{"id":635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":634,"mutability":"mutable","name":"y","nameLocation":"8508:1:1","nodeType":"VariableDeclaration","scope":695,"src":"8500:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":633,"name":"uint256","nodeType":"ElementaryTypeName","src":"8500:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8499:11:1"},"scope":1886,"src":"8428:353:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":749,"nodeType":"Block","src":"9059:236:1","statements":[{"assignments":[712],"declarations":[{"constant":false,"id":712,"mutability":"mutable","name":"zzzInv","nameLocation":"9077:6:1","nodeType":"VariableDeclaration","scope":749,"src":"9069:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":711,"name":"uint256","nodeType":"ElementaryTypeName","src":"9069:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":716,"initialValue":{"arguments":[{"id":714,"name":"zzz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":704,"src":"9098:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":713,"name":"FCL_pModInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"9086:11:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9086:16:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9069:33:1"},{"expression":{"id":723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":717,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":709,"src":"9120:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":719,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":700,"src":"9132:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":720,"name":"zzzInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":712,"src":"9135:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":721,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"9143:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":718,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"9125:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9125:20:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9120:25:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":724,"nodeType":"ExpressionStatement","src":"9120:25:1"},{"assignments":[726],"declarations":[{"constant":false,"id":726,"mutability":"mutable","name":"_b","nameLocation":"9171:2:1","nodeType":"VariableDeclaration","scope":749,"src":"9163:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":725,"name":"uint256","nodeType":"ElementaryTypeName","src":"9163:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":732,"initialValue":{"arguments":[{"id":728,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":702,"src":"9183:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":729,"name":"zzzInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":712,"src":"9187:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":730,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"9195:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":727,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"9176:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9176:21:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9163:34:1"},{"expression":{"id":739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":733,"name":"zzzInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":712,"src":"9213:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":735,"name":"_b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"9229:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":736,"name":"_b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"9233:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":737,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"9237:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":734,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"9222:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9222:17:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9213:26:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":740,"nodeType":"ExpressionStatement","src":"9213:26:1"},{"expression":{"id":747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":741,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":707,"src":"9256:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":743,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":698,"src":"9268:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":744,"name":"zzzInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":712,"src":"9271:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":745,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"9279:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":742,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"9261:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9261:20:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9256:25:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":748,"nodeType":"ExpressionStatement","src":"9256:25:1"}]},"documentation":{"id":696,"nodeType":"StructuredDocumentation","src":"8787:62:1","text":" /* @dev Convert from XYZZ rep to affine rep"},"id":750,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_SetAff","nameLocation":"8953:11:1","nodeType":"FunctionDefinition","parameters":{"id":705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":698,"mutability":"mutable","name":"x","nameLocation":"8973:1:1","nodeType":"VariableDeclaration","scope":750,"src":"8965:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":697,"name":"uint256","nodeType":"ElementaryTypeName","src":"8965:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":700,"mutability":"mutable","name":"y","nameLocation":"8984:1:1","nodeType":"VariableDeclaration","scope":750,"src":"8976:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":699,"name":"uint256","nodeType":"ElementaryTypeName","src":"8976:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":702,"mutability":"mutable","name":"zz","nameLocation":"8995:2:1","nodeType":"VariableDeclaration","scope":750,"src":"8987:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":701,"name":"uint256","nodeType":"ElementaryTypeName","src":"8987:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":704,"mutability":"mutable","name":"zzz","nameLocation":"9007:3:1","nodeType":"VariableDeclaration","scope":750,"src":"8999:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":703,"name":"uint256","nodeType":"ElementaryTypeName","src":"8999:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8964:47:1"},"returnParameters":{"id":710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":707,"mutability":"mutable","name":"x1","nameLocation":"9043:2:1","nodeType":"VariableDeclaration","scope":750,"src":"9035:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":706,"name":"uint256","nodeType":"ElementaryTypeName","src":"9035:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":709,"mutability":"mutable","name":"y1","nameLocation":"9055:2:1","nodeType":"VariableDeclaration","scope":750,"src":"9047:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":708,"name":"uint256","nodeType":"ElementaryTypeName","src":"9047:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9034:24:1"},"scope":1886,"src":"8944:351:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":778,"nodeType":"Block","src":"9568:764:1","statements":[{"id":771,"nodeType":"UncheckedBlock","src":"9578:715:1","statements":[{"AST":{"nodeType":"YulBlock","src":"9611:672:1","statements":[{"nodeType":"YulAssignment","src":"9629:21:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9642:1:1","type":"","value":"2"},{"name":"y","nodeType":"YulIdentifier","src":"9645:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"9648:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9635:6:1"},"nodeType":"YulFunctionCall","src":"9635:15:1"},"variableNames":[{"name":"P0","nodeType":"YulIdentifier","src":"9629:2:1"}]},{"nodeType":"YulAssignment","src":"9678:23:1","value":{"arguments":[{"name":"P0","nodeType":"YulIdentifier","src":"9691:2:1"},{"name":"P0","nodeType":"YulIdentifier","src":"9695:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"9699:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9684:6:1"},"nodeType":"YulFunctionCall","src":"9684:17:1"},"variableNames":[{"name":"P2","nodeType":"YulIdentifier","src":"9678:2:1"}]},{"nodeType":"YulAssignment","src":"9727:22:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9740:1:1"},{"name":"P2","nodeType":"YulIdentifier","src":"9743:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"9747:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9733:6:1"},"nodeType":"YulFunctionCall","src":"9733:16:1"},"variableNames":[{"name":"P3","nodeType":"YulIdentifier","src":"9727:2:1"}]},{"nodeType":"YulAssignment","src":"9778:23:1","value":{"arguments":[{"name":"P0","nodeType":"YulIdentifier","src":"9791:2:1"},{"name":"P2","nodeType":"YulIdentifier","src":"9795:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"9799:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9784:6:1"},"nodeType":"YulFunctionCall","src":"9784:17:1"},"variableNames":[{"name":"P1","nodeType":"YulIdentifier","src":"9778:2:1"}]},{"nodeType":"YulAssignment","src":"9826:23:1","value":{"arguments":[{"name":"P2","nodeType":"YulIdentifier","src":"9839:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"9843:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"9847:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9832:6:1"},"nodeType":"YulFunctionCall","src":"9832:17:1"},"variableNames":[{"name":"P2","nodeType":"YulIdentifier","src":"9826:2:1"}]},{"nodeType":"YulAssignment","src":"9878:73:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9891:1:1","type":"","value":"3"},{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9908:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"9915:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"9918:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9911:3:1"},"nodeType":"YulFunctionCall","src":"9911:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"9923:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"9901:6:1"},"nodeType":"YulFunctionCall","src":"9901:24:1"},{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9934:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"9937:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"9941:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"9927:6:1"},"nodeType":"YulFunctionCall","src":"9927:16:1"},{"name":"p","nodeType":"YulIdentifier","src":"9945:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9894:6:1"},"nodeType":"YulFunctionCall","src":"9894:53:1"},{"name":"p","nodeType":"YulIdentifier","src":"9949:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"9884:6:1"},"nodeType":"YulFunctionCall","src":"9884:67:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"9878:2:1"}]},{"nodeType":"YulAssignment","src":"9992:58:1","value":{"arguments":[{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"10012:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"10016:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"10020:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10005:6:1"},"nodeType":"YulFunctionCall","src":"10005:17:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"10031:7:1"},{"name":"P3","nodeType":"YulIdentifier","src":"10040:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"10044:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10024:6:1"},"nodeType":"YulFunctionCall","src":"10024:22:1"},{"name":"p","nodeType":"YulIdentifier","src":"10048:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"9998:6:1"},"nodeType":"YulFunctionCall","src":"9998:52:1"},"variableNames":[{"name":"P0","nodeType":"YulIdentifier","src":"9992:2:1"}]},{"nodeType":"YulAssignment","src":"10079:45:1","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"10091:2:1"},{"arguments":[{"name":"P3","nodeType":"YulIdentifier","src":"10102:2:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"10110:1:1"},{"name":"P0","nodeType":"YulIdentifier","src":"10113:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10106:3:1"},"nodeType":"YulFunctionCall","src":"10106:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"10118:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"10095:6:1"},"nodeType":"YulFunctionCall","src":"10095:25:1"},{"name":"p","nodeType":"YulIdentifier","src":"10122:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10084:6:1"},"nodeType":"YulFunctionCall","src":"10084:40:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"10079:1:1"}]},{"nodeType":"YulAssignment","src":"10151:24:1","value":{"arguments":[{"name":"P1","nodeType":"YulIdentifier","src":"10164:2:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"10168:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"10173:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10157:6:1"},"nodeType":"YulFunctionCall","src":"10157:18:1"},"variableNames":[{"name":"P3","nodeType":"YulIdentifier","src":"10151:2:1"}]},{"nodeType":"YulAssignment","src":"10206:44:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10219:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"10226:1:1"},{"arguments":[{"name":"P1","nodeType":"YulIdentifier","src":"10236:2:1"},{"name":"y","nodeType":"YulIdentifier","src":"10240:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"10243:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10229:6:1"},"nodeType":"YulFunctionCall","src":"10229:16:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10222:3:1"},"nodeType":"YulFunctionCall","src":"10222:24:1"},{"name":"p","nodeType":"YulIdentifier","src":"10248:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"10212:6:1"},"nodeType":"YulFunctionCall","src":"10212:38:1"},"variableNames":[{"name":"P1","nodeType":"YulIdentifier","src":"10206:2:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":762,"isOffset":false,"isSlot":false,"src":"10113:2:1","valueSize":1},{"declaration":762,"isOffset":false,"isSlot":false,"src":"9629:2:1","valueSize":1},{"declaration":762,"isOffset":false,"isSlot":false,"src":"9691:2:1","valueSize":1},{"declaration":762,"isOffset":false,"isSlot":false,"src":"9695:2:1","valueSize":1},{"declaration":762,"isOffset":false,"isSlot":false,"src":"9791:2:1","valueSize":1},{"declaration":762,"isOffset":false,"isSlot":false,"src":"9992:2:1","valueSize":1},{"declaration":764,"isOffset":false,"isSlot":false,"src":"10164:2:1","valueSize":1},{"declaration":764,"isOffset":false,"isSlot":false,"src":"10206:2:1","valueSize":1},{"declaration":764,"isOffset":false,"isSlot":false,"src":"10236:2:1","valueSize":1},{"declaration":764,"isOffset":false,"isSlot":false,"src":"9778:2:1","valueSize":1},{"declaration":766,"isOffset":false,"isSlot":false,"src":"9678:2:1","valueSize":1},{"declaration":766,"isOffset":false,"isSlot":false,"src":"9743:2:1","valueSize":1},{"declaration":766,"isOffset":false,"isSlot":false,"src":"9795:2:1","valueSize":1},{"declaration":766,"isOffset":false,"isSlot":false,"src":"9826:2:1","valueSize":1},{"declaration":766,"isOffset":false,"isSlot":false,"src":"9839:2:1","valueSize":1},{"declaration":768,"isOffset":false,"isSlot":false,"src":"10040:2:1","valueSize":1},{"declaration":768,"isOffset":false,"isSlot":false,"src":"10102:2:1","valueSize":1},{"declaration":768,"isOffset":false,"isSlot":false,"src":"10151:2:1","valueSize":1},{"declaration":768,"isOffset":false,"isSlot":false,"src":"9727:2:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"10031:7:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10020:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10044:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10048:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10110:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10118:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10122:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10173:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10226:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10243:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10248:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"9648:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"9699:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"9747:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"9799:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"9847:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"9915:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"9923:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"9941:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"9945:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"9949:1:1","valueSize":1},{"declaration":753,"isOffset":false,"isSlot":false,"src":"10079:1:1","valueSize":1},{"declaration":753,"isOffset":false,"isSlot":false,"src":"10219:1:1","valueSize":1},{"declaration":753,"isOffset":false,"isSlot":false,"src":"9740:1:1","valueSize":1},{"declaration":753,"isOffset":false,"isSlot":false,"src":"9908:1:1","valueSize":1},{"declaration":753,"isOffset":false,"isSlot":false,"src":"9934:1:1","valueSize":1},{"declaration":755,"isOffset":false,"isSlot":false,"src":"10240:1:1","valueSize":1},{"declaration":755,"isOffset":false,"isSlot":false,"src":"9645:1:1","valueSize":1},{"declaration":757,"isOffset":false,"isSlot":false,"src":"10012:2:1","valueSize":1},{"declaration":757,"isOffset":false,"isSlot":false,"src":"10016:2:1","valueSize":1},{"declaration":757,"isOffset":false,"isSlot":false,"src":"10091:2:1","valueSize":1},{"declaration":757,"isOffset":false,"isSlot":false,"src":"9843:2:1","valueSize":1},{"declaration":757,"isOffset":false,"isSlot":false,"src":"9878:2:1","valueSize":1},{"declaration":757,"isOffset":false,"isSlot":false,"src":"9918:2:1","valueSize":1},{"declaration":757,"isOffset":false,"isSlot":false,"src":"9937:2:1","valueSize":1},{"declaration":759,"isOffset":false,"isSlot":false,"src":"10168:3:1","valueSize":1}],"id":770,"nodeType":"InlineAssembly","src":"9602:681:1"}]},{"expression":{"components":[{"id":772,"name":"P0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":762,"src":"10310:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":773,"name":"P1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":764,"src":"10314:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":774,"name":"P2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"10318:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":775,"name":"P3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":768,"src":"10322:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":776,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10309:16:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"functionReturnParameters":769,"id":777,"nodeType":"Return","src":"10302:23:1"}]},"documentation":{"id":751,"nodeType":"StructuredDocumentation","src":"9301:50:1","text":" /* @dev Sutherland2008 doubling"},"id":779,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_Dbl","nameLocation":"9413:8:1","nodeType":"FunctionDefinition","parameters":{"id":760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":753,"mutability":"mutable","name":"x","nameLocation":"9430:1:1","nodeType":"VariableDeclaration","scope":779,"src":"9422:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":752,"name":"uint256","nodeType":"ElementaryTypeName","src":"9422:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":755,"mutability":"mutable","name":"y","nameLocation":"9441:1:1","nodeType":"VariableDeclaration","scope":779,"src":"9433:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":754,"name":"uint256","nodeType":"ElementaryTypeName","src":"9433:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":757,"mutability":"mutable","name":"zz","nameLocation":"9452:2:1","nodeType":"VariableDeclaration","scope":779,"src":"9444:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":756,"name":"uint256","nodeType":"ElementaryTypeName","src":"9444:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":759,"mutability":"mutable","name":"zzz","nameLocation":"9464:3:1","nodeType":"VariableDeclaration","scope":779,"src":"9456:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":758,"name":"uint256","nodeType":"ElementaryTypeName","src":"9456:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9421:47:1"},"returnParameters":{"id":769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":762,"mutability":"mutable","name":"P0","nameLocation":"9524:2:1","nodeType":"VariableDeclaration","scope":779,"src":"9516:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":761,"name":"uint256","nodeType":"ElementaryTypeName","src":"9516:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":764,"mutability":"mutable","name":"P1","nameLocation":"9536:2:1","nodeType":"VariableDeclaration","scope":779,"src":"9528:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":763,"name":"uint256","nodeType":"ElementaryTypeName","src":"9528:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":766,"mutability":"mutable","name":"P2","nameLocation":"9548:2:1","nodeType":"VariableDeclaration","scope":779,"src":"9540:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":765,"name":"uint256","nodeType":"ElementaryTypeName","src":"9540:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":768,"mutability":"mutable","name":"P3","nameLocation":"9560:2:1","nodeType":"VariableDeclaration","scope":779,"src":"9552:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":767,"name":"uint256","nodeType":"ElementaryTypeName","src":"9552:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9515:48:1"},"scope":1886,"src":"9404:928:1","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":822,"nodeType":"Block","src":"10742:880:1","statements":[{"id":815,"nodeType":"UncheckedBlock","src":"10752:815:1","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":803,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":784,"src":"10780:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10786:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10780:7:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":813,"nodeType":"IfStatement","src":"10776:67:1","trueBody":{"id":812,"nodeType":"Block","src":"10789:54:1","statements":[{"expression":{"components":[{"id":806,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":790,"src":"10815:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":807,"name":"y2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":792,"src":"10819:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10823:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"31","id":809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10826:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"id":810,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10814:14:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_rational_1_by_1_$_t_rational_1_by_1_$","typeString":"tuple(uint256,uint256,int_const 1,int_const 1)"}},"functionReturnParameters":802,"id":811,"nodeType":"Return","src":"10807:21:1"}]}},{"AST":{"nodeType":"YulBlock","src":"10866:664:1","statements":[{"nodeType":"YulAssignment","src":"10884:16:1","value":{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"10894:1:1"},{"name":"y1","nodeType":"YulIdentifier","src":"10897:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10890:3:1"},"nodeType":"YulFunctionCall","src":"10890:10:1"},"variableNames":[{"name":"y1","nodeType":"YulIdentifier","src":"10884:2:1"}]},{"nodeType":"YulAssignment","src":"10917:40:1","value":{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"10937:2:1"},{"name":"zzz1","nodeType":"YulIdentifier","src":"10941:4:1"},{"name":"p","nodeType":"YulIdentifier","src":"10947:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10930:6:1"},"nodeType":"YulFunctionCall","src":"10930:19:1"},{"name":"y1","nodeType":"YulIdentifier","src":"10951:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"10955:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"10923:6:1"},"nodeType":"YulFunctionCall","src":"10923:34:1"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"10917:2:1"}]},{"nodeType":"YulAssignment","src":"10974:47:1","value":{"arguments":[{"arguments":[{"name":"x2","nodeType":"YulIdentifier","src":"10994:2:1"},{"name":"zz1","nodeType":"YulIdentifier","src":"10998:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"11003:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"10987:6:1"},"nodeType":"YulFunctionCall","src":"10987:18:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"11011:1:1"},{"name":"x1","nodeType":"YulIdentifier","src":"11014:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11007:3:1"},"nodeType":"YulFunctionCall","src":"11007:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"11019:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"10980:6:1"},"nodeType":"YulFunctionCall","src":"10980:41:1"},"variableNames":[{"name":"x2","nodeType":"YulIdentifier","src":"10974:2:1"}]},{"nodeType":"YulAssignment","src":"11038:23:1","value":{"arguments":[{"name":"x2","nodeType":"YulIdentifier","src":"11051:2:1"},{"name":"x2","nodeType":"YulIdentifier","src":"11055:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"11059:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11044:6:1"},"nodeType":"YulFunctionCall","src":"11044:17:1"},"variableNames":[{"name":"P0","nodeType":"YulIdentifier","src":"11038:2:1"}]},{"nodeType":"YulAssignment","src":"11089:23:1","value":{"arguments":[{"name":"P0","nodeType":"YulIdentifier","src":"11102:2:1"},{"name":"x2","nodeType":"YulIdentifier","src":"11106:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"11110:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11095:6:1"},"nodeType":"YulFunctionCall","src":"11095:17:1"},"variableNames":[{"name":"P1","nodeType":"YulIdentifier","src":"11089:2:1"}]},{"nodeType":"YulAssignment","src":"11142:24:1","value":{"arguments":[{"name":"zz1","nodeType":"YulIdentifier","src":"11155:3:1"},{"name":"P0","nodeType":"YulIdentifier","src":"11160:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"11164:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11148:6:1"},"nodeType":"YulFunctionCall","src":"11148:18:1"},"variableNames":[{"name":"P2","nodeType":"YulIdentifier","src":"11142:2:1"}]},{"nodeType":"YulAssignment","src":"11200:25:1","value":{"arguments":[{"name":"zzz1","nodeType":"YulIdentifier","src":"11213:4:1"},{"name":"P1","nodeType":"YulIdentifier","src":"11219:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"11223:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11206:6:1"},"nodeType":"YulFunctionCall","src":"11206:19:1"},"variableNames":[{"name":"P3","nodeType":"YulIdentifier","src":"11200:2:1"}]},{"nodeType":"YulAssignment","src":"11262:24:1","value":{"arguments":[{"name":"x1","nodeType":"YulIdentifier","src":"11276:2:1"},{"name":"P0","nodeType":"YulIdentifier","src":"11280:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"11284:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11269:6:1"},"nodeType":"YulFunctionCall","src":"11269:17:1"},"variableNames":[{"name":"zz1","nodeType":"YulIdentifier","src":"11262:3:1"}]},{"nodeType":"YulAssignment","src":"11315:82:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"11342:2:1"},{"name":"y2","nodeType":"YulIdentifier","src":"11346:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"11350:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11335:6:1"},"nodeType":"YulFunctionCall","src":"11335:17:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"11358:1:1"},{"name":"P1","nodeType":"YulIdentifier","src":"11361:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11354:3:1"},"nodeType":"YulFunctionCall","src":"11354:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"11366:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"11328:6:1"},"nodeType":"YulFunctionCall","src":"11328:40:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"11377:7:1"},{"name":"zz1","nodeType":"YulIdentifier","src":"11386:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"11391:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11370:6:1"},"nodeType":"YulFunctionCall","src":"11370:23:1"},{"name":"p","nodeType":"YulIdentifier","src":"11395:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"11321:6:1"},"nodeType":"YulFunctionCall","src":"11321:76:1"},"variableNames":[{"name":"P0","nodeType":"YulIdentifier","src":"11315:2:1"}]},{"nodeType":"YulAssignment","src":"11428:77:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"zz1","nodeType":"YulIdentifier","src":"11455:3:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"11464:1:1"},{"name":"P0","nodeType":"YulIdentifier","src":"11467:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11460:3:1"},"nodeType":"YulFunctionCall","src":"11460:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"11472:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"11448:6:1"},"nodeType":"YulFunctionCall","src":"11448:26:1"},{"name":"y2","nodeType":"YulIdentifier","src":"11476:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"11480:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11441:6:1"},"nodeType":"YulFunctionCall","src":"11441:41:1"},{"arguments":[{"name":"y1","nodeType":"YulIdentifier","src":"11491:2:1"},{"name":"P1","nodeType":"YulIdentifier","src":"11495:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"11499:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"11484:6:1"},"nodeType":"YulFunctionCall","src":"11484:17:1"},{"name":"p","nodeType":"YulIdentifier","src":"11503:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"11434:6:1"},"nodeType":"YulFunctionCall","src":"11434:71:1"},"variableNames":[{"name":"P1","nodeType":"YulIdentifier","src":"11428:2:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":795,"isOffset":false,"isSlot":false,"src":"11038:2:1","valueSize":1},{"declaration":795,"isOffset":false,"isSlot":false,"src":"11102:2:1","valueSize":1},{"declaration":795,"isOffset":false,"isSlot":false,"src":"11160:2:1","valueSize":1},{"declaration":795,"isOffset":false,"isSlot":false,"src":"11280:2:1","valueSize":1},{"declaration":795,"isOffset":false,"isSlot":false,"src":"11315:2:1","valueSize":1},{"declaration":795,"isOffset":false,"isSlot":false,"src":"11467:2:1","valueSize":1},{"declaration":797,"isOffset":false,"isSlot":false,"src":"11089:2:1","valueSize":1},{"declaration":797,"isOffset":false,"isSlot":false,"src":"11219:2:1","valueSize":1},{"declaration":797,"isOffset":false,"isSlot":false,"src":"11361:2:1","valueSize":1},{"declaration":797,"isOffset":false,"isSlot":false,"src":"11428:2:1","valueSize":1},{"declaration":797,"isOffset":false,"isSlot":false,"src":"11495:2:1","valueSize":1},{"declaration":799,"isOffset":false,"isSlot":false,"src":"11142:2:1","valueSize":1},{"declaration":801,"isOffset":false,"isSlot":false,"src":"11200:2:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"11377:7:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10894:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10947:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"10955:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11003:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11011:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11019:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11059:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11110:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11164:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11223:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11284:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11350:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11358:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11366:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11391:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11395:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11464:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11472:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11480:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11499:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"11503:1:1","valueSize":1},{"declaration":782,"isOffset":false,"isSlot":false,"src":"11014:2:1","valueSize":1},{"declaration":782,"isOffset":false,"isSlot":false,"src":"11276:2:1","valueSize":1},{"declaration":790,"isOffset":false,"isSlot":false,"src":"10974:2:1","valueSize":1},{"declaration":790,"isOffset":false,"isSlot":false,"src":"10994:2:1","valueSize":1},{"declaration":790,"isOffset":false,"isSlot":false,"src":"11051:2:1","valueSize":1},{"declaration":790,"isOffset":false,"isSlot":false,"src":"11055:2:1","valueSize":1},{"declaration":790,"isOffset":false,"isSlot":false,"src":"11106:2:1","valueSize":1},{"declaration":784,"isOffset":false,"isSlot":false,"src":"10884:2:1","valueSize":1},{"declaration":784,"isOffset":false,"isSlot":false,"src":"10897:2:1","valueSize":1},{"declaration":784,"isOffset":false,"isSlot":false,"src":"10951:2:1","valueSize":1},{"declaration":784,"isOffset":false,"isSlot":false,"src":"11491:2:1","valueSize":1},{"declaration":792,"isOffset":false,"isSlot":false,"src":"10917:2:1","valueSize":1},{"declaration":792,"isOffset":false,"isSlot":false,"src":"10937:2:1","valueSize":1},{"declaration":792,"isOffset":false,"isSlot":false,"src":"11342:2:1","valueSize":1},{"declaration":792,"isOffset":false,"isSlot":false,"src":"11346:2:1","valueSize":1},{"declaration":792,"isOffset":false,"isSlot":false,"src":"11476:2:1","valueSize":1},{"declaration":786,"isOffset":false,"isSlot":false,"src":"10998:3:1","valueSize":1},{"declaration":786,"isOffset":false,"isSlot":false,"src":"11155:3:1","valueSize":1},{"declaration":786,"isOffset":false,"isSlot":false,"src":"11262:3:1","valueSize":1},{"declaration":786,"isOffset":false,"isSlot":false,"src":"11386:3:1","valueSize":1},{"declaration":786,"isOffset":false,"isSlot":false,"src":"11455:3:1","valueSize":1},{"declaration":788,"isOffset":false,"isSlot":false,"src":"10941:4:1","valueSize":1},{"declaration":788,"isOffset":false,"isSlot":false,"src":"11213:4:1","valueSize":1}],"id":814,"nodeType":"InlineAssembly","src":"10857:673:1"}]},{"expression":{"components":[{"id":816,"name":"P0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":795,"src":"11600:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":817,"name":"P1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":797,"src":"11604:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":818,"name":"P2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"11608:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":819,"name":"P3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"11612:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":820,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11599:16:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"functionReturnParameters":802,"id":821,"nodeType":"Return","src":"11592:23:1"}]},"documentation":{"id":780,"nodeType":"StructuredDocumentation","src":"10338:205:1","text":" @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\n warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)"},"id":823,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_AddN","nameLocation":"10558:9:1","nodeType":"FunctionDefinition","parameters":{"id":793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":782,"mutability":"mutable","name":"x1","nameLocation":"10576:2:1","nodeType":"VariableDeclaration","scope":823,"src":"10568:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":781,"name":"uint256","nodeType":"ElementaryTypeName","src":"10568:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":784,"mutability":"mutable","name":"y1","nameLocation":"10588:2:1","nodeType":"VariableDeclaration","scope":823,"src":"10580:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":783,"name":"uint256","nodeType":"ElementaryTypeName","src":"10580:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":786,"mutability":"mutable","name":"zz1","nameLocation":"10600:3:1","nodeType":"VariableDeclaration","scope":823,"src":"10592:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":785,"name":"uint256","nodeType":"ElementaryTypeName","src":"10592:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":788,"mutability":"mutable","name":"zzz1","nameLocation":"10613:4:1","nodeType":"VariableDeclaration","scope":823,"src":"10605:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":787,"name":"uint256","nodeType":"ElementaryTypeName","src":"10605:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":790,"mutability":"mutable","name":"x2","nameLocation":"10627:2:1","nodeType":"VariableDeclaration","scope":823,"src":"10619:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":789,"name":"uint256","nodeType":"ElementaryTypeName","src":"10619:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":792,"mutability":"mutable","name":"y2","nameLocation":"10639:2:1","nodeType":"VariableDeclaration","scope":823,"src":"10631:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":791,"name":"uint256","nodeType":"ElementaryTypeName","src":"10631:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10567:75:1"},"returnParameters":{"id":802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":795,"mutability":"mutable","name":"P0","nameLocation":"10698:2:1","nodeType":"VariableDeclaration","scope":823,"src":"10690:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":794,"name":"uint256","nodeType":"ElementaryTypeName","src":"10690:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":797,"mutability":"mutable","name":"P1","nameLocation":"10710:2:1","nodeType":"VariableDeclaration","scope":823,"src":"10702:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":796,"name":"uint256","nodeType":"ElementaryTypeName","src":"10702:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":799,"mutability":"mutable","name":"P2","nameLocation":"10722:2:1","nodeType":"VariableDeclaration","scope":823,"src":"10714:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":798,"name":"uint256","nodeType":"ElementaryTypeName","src":"10714:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":801,"mutability":"mutable","name":"P3","nameLocation":"10734:2:1","nodeType":"VariableDeclaration","scope":823,"src":"10726:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":800,"name":"uint256","nodeType":"ElementaryTypeName","src":"10726:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10689:48:1"},"scope":1886,"src":"10549:1073:1","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":841,"nodeType":"Block","src":"11793:36:1","statements":[{"expression":{"components":[{"hexValue":"30","id":835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11811:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11814:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11817:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11820:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":839,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"11810:12:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0,int_const 0,int_const 0)"}},"functionReturnParameters":834,"id":840,"nodeType":"Return","src":"11803:19:1"}]},"documentation":{"id":824,"nodeType":"StructuredDocumentation","src":"11628:66:1","text":" @dev Return the zero curve in XYZZ coordinates."},"id":842,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_SetZero","nameLocation":"11708:12:1","nodeType":"FunctionDefinition","parameters":{"id":825,"nodeType":"ParameterList","parameters":[],"src":"11720:2:1"},"returnParameters":{"id":834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":827,"mutability":"mutable","name":"x","nameLocation":"11754:1:1","nodeType":"VariableDeclaration","scope":842,"src":"11746:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":826,"name":"uint256","nodeType":"ElementaryTypeName","src":"11746:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":829,"mutability":"mutable","name":"y","nameLocation":"11765:1:1","nodeType":"VariableDeclaration","scope":842,"src":"11757:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":828,"name":"uint256","nodeType":"ElementaryTypeName","src":"11757:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":831,"mutability":"mutable","name":"zz","nameLocation":"11776:2:1","nodeType":"VariableDeclaration","scope":842,"src":"11768:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":830,"name":"uint256","nodeType":"ElementaryTypeName","src":"11768:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":833,"mutability":"mutable","name":"zzz","nameLocation":"11788:3:1","nodeType":"VariableDeclaration","scope":842,"src":"11780:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":832,"name":"uint256","nodeType":"ElementaryTypeName","src":"11780:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11745:47:1"},"scope":1886,"src":"11699:130:1","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":860,"nodeType":"Block","src":"12052:31:1","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":856,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":847,"src":"12069:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12075:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12069:7:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":855,"id":859,"nodeType":"Return","src":"12062:14:1"}]},"documentation":{"id":843,"nodeType":"StructuredDocumentation","src":"11834:66:1","text":" @dev Check if point is the neutral of the curve"},"id":861,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_IsZero","nameLocation":"11972:11:1","nodeType":"FunctionDefinition","parameters":{"id":852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":845,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":861,"src":"11984:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":844,"name":"uint256","nodeType":"ElementaryTypeName","src":"11984:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":847,"mutability":"mutable","name":"y0","nameLocation":"12001:2:1","nodeType":"VariableDeclaration","scope":861,"src":"11993:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":846,"name":"uint256","nodeType":"ElementaryTypeName","src":"11993:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":849,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":861,"src":"12005:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":848,"name":"uint256","nodeType":"ElementaryTypeName","src":"12005:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":851,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":861,"src":"12014:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":850,"name":"uint256","nodeType":"ElementaryTypeName","src":"12014:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11983:39:1"},"returnParameters":{"id":855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":854,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":861,"src":"12046:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":853,"name":"bool","nodeType":"ElementaryTypeName","src":"12046:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12045:6:1"},"scope":1886,"src":"11963:120:1","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":873,"nodeType":"Block","src":"12286:30:1","statements":[{"expression":{"components":[{"hexValue":"30","id":869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12304:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12307:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":871,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"12303:6:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0)"}},"functionReturnParameters":868,"id":872,"nodeType":"Return","src":"12296:13:1"}]},"documentation":{"id":862,"nodeType":"StructuredDocumentation","src":"12088:122:1","text":" @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)"},"id":874,"implemented":true,"kind":"function","modifiers":[],"name":"ecAff_SetZero","nameLocation":"12225:13:1","nodeType":"FunctionDefinition","parameters":{"id":863,"nodeType":"ParameterList","parameters":[],"src":"12238:2:1"},"returnParameters":{"id":868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":865,"mutability":"mutable","name":"x","nameLocation":"12272:1:1","nodeType":"VariableDeclaration","scope":874,"src":"12264:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":864,"name":"uint256","nodeType":"ElementaryTypeName","src":"12264:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":867,"mutability":"mutable","name":"y","nameLocation":"12283:1:1","nodeType":"VariableDeclaration","scope":874,"src":"12275:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":866,"name":"uint256","nodeType":"ElementaryTypeName","src":"12275:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12263:22:1"},"scope":1886,"src":"12216:100:1","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":889,"nodeType":"Block","src":"12507:32:1","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":884,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":879,"src":"12525:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12530:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12525:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":887,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12524:8:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":883,"id":888,"nodeType":"Return","src":"12517:15:1"}]},"documentation":{"id":875,"nodeType":"StructuredDocumentation","src":"12322:75:1","text":" @dev Check if the curve is the zero curve in affine rep."},"id":890,"implemented":true,"kind":"function","modifiers":[],"name":"ecAff_IsZero","nameLocation":"12440:12:1","nodeType":"FunctionDefinition","parameters":{"id":880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":877,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":890,"src":"12453:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":876,"name":"uint256","nodeType":"ElementaryTypeName","src":"12453:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":879,"mutability":"mutable","name":"y","nameLocation":"12470:1:1","nodeType":"VariableDeclaration","scope":890,"src":"12462:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":878,"name":"uint256","nodeType":"ElementaryTypeName","src":"12462:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12452:20:1"},"returnParameters":{"id":883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":882,"mutability":"mutable","name":"flag","nameLocation":"12501:4:1","nodeType":"VariableDeclaration","scope":890,"src":"12496:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":881,"name":"bool","nodeType":"ElementaryTypeName","src":"12496:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12495:11:1"},"scope":1886,"src":"12431:108:1","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":960,"nodeType":"Block","src":"12750:356:1","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"30","id":900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12764:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":901,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"12769:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12764:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":903,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"12774:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":904,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"12779:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12774:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12764:16:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"30","id":907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12784:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":908,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":895,"src":"12789:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12784:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12764:26:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":911,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":895,"src":"12794:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":912,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"12799:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12794:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12764:36:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":918,"nodeType":"IfStatement","src":"12760:79:1","trueBody":{"id":917,"nodeType":"Block","src":"12802:37:1","statements":[{"expression":{"hexValue":"66616c7365","id":915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12823:5:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":899,"id":916,"nodeType":"Return","src":"12816:12:1"}]}},{"id":959,"nodeType":"UncheckedBlock","src":"12848:252:1","statements":[{"assignments":[920],"declarations":[{"constant":false,"id":920,"mutability":"mutable","name":"LHS","nameLocation":"12880:3:1","nodeType":"VariableDeclaration","scope":959,"src":"12872:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":919,"name":"uint256","nodeType":"ElementaryTypeName","src":"12872:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":926,"initialValue":{"arguments":[{"id":922,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":895,"src":"12893:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":923,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":895,"src":"12896:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":924,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"12899:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":921,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"12886:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12886:15:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12872:29:1"},{"assignments":[928],"declarations":[{"constant":false,"id":928,"mutability":"mutable","name":"RHS","nameLocation":"12930:3:1","nodeType":"VariableDeclaration","scope":959,"src":"12922:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":927,"name":"uint256","nodeType":"ElementaryTypeName","src":"12922:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":946,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":932,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"12957:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":933,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"12960:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":934,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"12963:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":931,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"12950:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12950:15:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":936,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"12967:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":937,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"12970:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":930,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"12943:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12943:29:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":940,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"12981:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":941,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":258,"src":"12984:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":942,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"12987:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":939,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"12974:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12974:15:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":944,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"12991:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":929,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"12936:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12936:57:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12922:71:1"},{"expression":{"id":953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":947,"name":"RHS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":928,"src":"13017:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":949,"name":"RHS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":928,"src":"13030:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":950,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"13035:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":951,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"13038:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":948,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"13023:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13023:17:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13017:23:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":954,"nodeType":"ExpressionStatement","src":"13017:23:1"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":955,"name":"LHS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":920,"src":"13079:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":956,"name":"RHS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":928,"src":"13086:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13079:10:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":899,"id":958,"nodeType":"Return","src":"13072:17:1"}]}]},"documentation":{"id":891,"nodeType":"StructuredDocumentation","src":"12545:124:1","text":" @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve)."},"id":961,"implemented":true,"kind":"function","modifiers":[],"name":"ecAff_isOnCurve","nameLocation":"12683:15:1","nodeType":"FunctionDefinition","parameters":{"id":896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":893,"mutability":"mutable","name":"x","nameLocation":"12707:1:1","nodeType":"VariableDeclaration","scope":961,"src":"12699:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":892,"name":"uint256","nodeType":"ElementaryTypeName","src":"12699:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":895,"mutability":"mutable","name":"y","nameLocation":"12718:1:1","nodeType":"VariableDeclaration","scope":961,"src":"12710:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":894,"name":"uint256","nodeType":"ElementaryTypeName","src":"12710:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12698:22:1"},"returnParameters":{"id":899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":898,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":961,"src":"12744:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":897,"name":"bool","nodeType":"ElementaryTypeName","src":"12744:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12743:6:1"},"scope":1886,"src":"12674:432:1","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1023,"nodeType":"Block","src":"13302:265:1","statements":[{"assignments":[978],"declarations":[{"constant":false,"id":978,"mutability":"mutable","name":"zz0","nameLocation":"13320:3:1","nodeType":"VariableDeclaration","scope":1023,"src":"13312:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":977,"name":"uint256","nodeType":"ElementaryTypeName","src":"13312:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":979,"nodeType":"VariableDeclarationStatement","src":"13312:11:1"},{"assignments":[981],"declarations":[{"constant":false,"id":981,"mutability":"mutable","name":"zzz0","nameLocation":"13341:4:1","nodeType":"VariableDeclaration","scope":1023,"src":"13333:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":980,"name":"uint256","nodeType":"ElementaryTypeName","src":"13333:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":982,"nodeType":"VariableDeclarationStatement","src":"13333:12:1"},{"condition":{"arguments":[{"id":984,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":964,"src":"13373:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":985,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"13377:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":983,"name":"ecAff_IsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":890,"src":"13360:12:1","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13360:20:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":991,"nodeType":"IfStatement","src":"13356:41:1","trueBody":{"expression":{"components":[{"id":987,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":968,"src":"13390:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":988,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":970,"src":"13394:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":989,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13389:8:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":976,"id":990,"nodeType":"Return","src":"13382:15:1"}},{"condition":{"arguments":[{"id":993,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":968,"src":"13424:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":994,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":970,"src":"13428:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":992,"name":"ecAff_IsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":890,"src":"13411:12:1","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13411:20:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1000,"nodeType":"IfStatement","src":"13407:41:1","trueBody":{"expression":{"components":[{"id":996,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":964,"src":"13441:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":997,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"13445:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":998,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13440:8:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":976,"id":999,"nodeType":"Return","src":"13433:15:1"}},{"expression":{"id":1014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":1001,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":964,"src":"13460:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1002,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"13464:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1003,"name":"zz0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":978,"src":"13468:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1004,"name":"zzz0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":981,"src":"13473:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1005,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13459:19:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1007,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":964,"src":"13491:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1008,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"13495:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":1009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13499:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"31","id":1010,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13502:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"id":1011,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":968,"src":"13505:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1012,"name":"y1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":970,"src":"13509:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1006,"name":"ecZZ_AddN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":823,"src":"13481:9:1","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256)"}},"id":1013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13481:31:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"13459:53:1","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1015,"nodeType":"ExpressionStatement","src":"13459:53:1"},{"expression":{"arguments":[{"id":1017,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":964,"src":"13542:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1018,"name":"y0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"13546:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1019,"name":"zz0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":978,"src":"13550:3:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1020,"name":"zzz0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":981,"src":"13555:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1016,"name":"ecZZ_SetAff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":750,"src":"13530:11:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":1021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13530:30:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":976,"id":1022,"nodeType":"Return","src":"13523:37:1"}]},"documentation":{"id":962,"nodeType":"StructuredDocumentation","src":"13112:76:1","text":" @dev Add two elliptic curve points in affine coordinates."},"id":1024,"implemented":true,"kind":"function","modifiers":[],"name":"ecAff_add","nameLocation":"13203:9:1","nodeType":"FunctionDefinition","parameters":{"id":971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":964,"mutability":"mutable","name":"x0","nameLocation":"13221:2:1","nodeType":"VariableDeclaration","scope":1024,"src":"13213:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":963,"name":"uint256","nodeType":"ElementaryTypeName","src":"13213:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":966,"mutability":"mutable","name":"y0","nameLocation":"13233:2:1","nodeType":"VariableDeclaration","scope":1024,"src":"13225:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":965,"name":"uint256","nodeType":"ElementaryTypeName","src":"13225:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":968,"mutability":"mutable","name":"x1","nameLocation":"13245:2:1","nodeType":"VariableDeclaration","scope":1024,"src":"13237:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":967,"name":"uint256","nodeType":"ElementaryTypeName","src":"13237:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":970,"mutability":"mutable","name":"y1","nameLocation":"13257:2:1","nodeType":"VariableDeclaration","scope":1024,"src":"13249:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":969,"name":"uint256","nodeType":"ElementaryTypeName","src":"13249:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13212:48:1"},"returnParameters":{"id":976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":973,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1024,"src":"13284:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":972,"name":"uint256","nodeType":"ElementaryTypeName","src":"13284:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":975,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1024,"src":"13293:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":974,"name":"uint256","nodeType":"ElementaryTypeName","src":"13293:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13283:18:1"},"scope":1886,"src":"13194:373:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1082,"nodeType":"Block","src":"13932:6313:1","statements":[{"assignments":[1039],"declarations":[{"constant":false,"id":1039,"mutability":"mutable","name":"zz","nameLocation":"13950:2:1","nodeType":"VariableDeclaration","scope":1082,"src":"13942:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1038,"name":"uint256","nodeType":"ElementaryTypeName","src":"13942:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1040,"nodeType":"VariableDeclarationStatement","src":"13942:10:1"},{"assignments":[1042],"declarations":[{"constant":false,"id":1042,"mutability":"mutable","name":"zzz","nameLocation":"13970:3:1","nodeType":"VariableDeclaration","scope":1082,"src":"13962:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1041,"name":"uint256","nodeType":"ElementaryTypeName","src":"13962:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1043,"nodeType":"VariableDeclarationStatement","src":"13962:11:1"},{"assignments":[1045],"declarations":[{"constant":false,"id":1045,"mutability":"mutable","name":"Y","nameLocation":"13991:1:1","nodeType":"VariableDeclaration","scope":1082,"src":"13983:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1044,"name":"uint256","nodeType":"ElementaryTypeName","src":"13983:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1046,"nodeType":"VariableDeclarationStatement","src":"13983:9:1"},{"assignments":[1048],"declarations":[{"constant":false,"id":1048,"mutability":"mutable","name":"index","nameLocation":"14010:5:1","nodeType":"VariableDeclaration","scope":1082,"src":"14002:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1047,"name":"uint256","nodeType":"ElementaryTypeName","src":"14002:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1050,"initialValue":{"hexValue":"323535","id":1049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14018:3:1","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"nodeType":"VariableDeclarationStatement","src":"14002:19:1"},{"assignments":[1052],"declarations":[{"constant":false,"id":1052,"mutability":"mutable","name":"H0","nameLocation":"14039:2:1","nodeType":"VariableDeclaration","scope":1082,"src":"14031:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1051,"name":"uint256","nodeType":"ElementaryTypeName","src":"14031:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1053,"nodeType":"VariableDeclarationStatement","src":"14031:10:1"},{"assignments":[1055],"declarations":[{"constant":false,"id":1055,"mutability":"mutable","name":"H1","nameLocation":"14059:2:1","nodeType":"VariableDeclaration","scope":1082,"src":"14051:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1054,"name":"uint256","nodeType":"ElementaryTypeName","src":"14051:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1056,"nodeType":"VariableDeclarationStatement","src":"14051:10:1"},{"id":1079,"nodeType":"UncheckedBlock","src":"14072:6132:1","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1057,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1031,"src":"14100:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14112:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14100:13:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1060,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1033,"src":"14117:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14129:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14117:13:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14100:30:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1066,"nodeType":"IfStatement","src":"14096:44:1","trueBody":{"expression":{"hexValue":"30","id":1064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14139:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":1037,"id":1065,"nodeType":"Return","src":"14132:8:1"}},{"expression":{"id":1076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":1067,"name":"H0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1052,"src":"14156:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1068,"name":"H1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1055,"src":"14160:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1069,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"14155:8:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1071,"name":"gx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":264,"src":"14176:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1072,"name":"gy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":267,"src":"14180:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1073,"name":"Q0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1027,"src":"14184:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1074,"name":"Q1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1029,"src":"14188:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1070,"name":"ecAff_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1024,"src":"14166:9:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":1075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14166:25:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"14155:36:1","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1077,"nodeType":"ExpressionStatement","src":"14155:36:1"},{"AST":{"nodeType":"YulBlock","src":"14269:5910:1","statements":[{"body":{"nodeType":"YulBlock","src":"14548:2:1","statements":[]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"14380:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"14384:1:1","type":"","value":"0"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14377:2:1"},"nodeType":"YulFunctionCall","src":"14377:9:1"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"14387:160:1","statements":[{"nodeType":"YulAssignment","src":"14409:22:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14422:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"14429:1:1","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14418:3:1"},"nodeType":"YulFunctionCall","src":"14418:13:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"14409:5:1"}]},{"nodeType":"YulAssignment","src":"14452:77:1","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14466:1:1","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14477:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"14484:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14473:3:1"},"nodeType":"YulFunctionCall","src":"14473:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"14495:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14469:3:1"},"nodeType":"YulFunctionCall","src":"14469:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14462:3:1"},"nodeType":"YulFunctionCall","src":"14462:36:1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14508:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"14515:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14504:3:1"},"nodeType":"YulFunctionCall","src":"14504:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"14526:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14500:3:1"},"nodeType":"YulFunctionCall","src":"14500:28:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14458:3:1"},"nodeType":"YulFunctionCall","src":"14458:71:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"14452:2:1"}]}]},"pre":{"nodeType":"YulBlock","src":"14291:85:1","statements":[{"nodeType":"YulVariableDeclaration","src":"14293:81:1","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14311:1:1","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14322:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"14329:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14318:3:1"},"nodeType":"YulFunctionCall","src":"14318:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"14340:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14314:3:1"},"nodeType":"YulFunctionCall","src":"14314:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14307:3:1"},"nodeType":"YulFunctionCall","src":"14307:36:1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14353:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"14360:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14349:3:1"},"nodeType":"YulFunctionCall","src":"14349:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"14371:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14345:3:1"},"nodeType":"YulFunctionCall","src":"14345:28:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14303:3:1"},"nodeType":"YulFunctionCall","src":"14303:71:1"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"14297:2:1","type":""}]}]},"src":"14287:263:1"},{"nodeType":"YulAssignment","src":"14567:77:1","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14581:1:1","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14592:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"14599:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14588:3:1"},"nodeType":"YulFunctionCall","src":"14588:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"14610:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14584:3:1"},"nodeType":"YulFunctionCall","src":"14584:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14577:3:1"},"nodeType":"YulFunctionCall","src":"14577:36:1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14623:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"14630:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14619:3:1"},"nodeType":"YulFunctionCall","src":"14619:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"14641:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14615:3:1"},"nodeType":"YulFunctionCall","src":"14615:28:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14573:3:1"},"nodeType":"YulFunctionCall","src":"14573:71:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"14567:2:1"}]},{"body":{"nodeType":"YulBlock","src":"14675:75:1","statements":[{"nodeType":"YulAssignment","src":"14697:7:1","value":{"name":"gx","nodeType":"YulIdentifier","src":"14702:2:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"14697:1:1"}]},{"nodeType":"YulAssignment","src":"14725:7:1","value":{"name":"gy","nodeType":"YulIdentifier","src":"14730:2:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"14725:1:1"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"14668:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"14672:1:1","type":"","value":"1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14665:2:1"},"nodeType":"YulFunctionCall","src":"14665:9:1"},"nodeType":"YulIf","src":"14662:88:1"},{"body":{"nodeType":"YulBlock","src":"14780:75:1","statements":[{"nodeType":"YulAssignment","src":"14802:7:1","value":{"name":"Q0","nodeType":"YulIdentifier","src":"14807:2:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"14802:1:1"}]},{"nodeType":"YulAssignment","src":"14830:7:1","value":{"name":"Q1","nodeType":"YulIdentifier","src":"14835:2:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"14830:1:1"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"14773:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"14777:1:1","type":"","value":"2"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14770:2:1"},"nodeType":"YulFunctionCall","src":"14770:9:1"},"nodeType":"YulIf","src":"14767:88:1"},{"body":{"nodeType":"YulBlock","src":"14885:75:1","statements":[{"nodeType":"YulAssignment","src":"14907:7:1","value":{"name":"H0","nodeType":"YulIdentifier","src":"14912:2:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"14907:1:1"}]},{"nodeType":"YulAssignment","src":"14935:7:1","value":{"name":"H1","nodeType":"YulIdentifier","src":"14940:2:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"14935:1:1"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"14878:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"14882:1:1","type":"","value":"3"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14875:2:1"},"nodeType":"YulFunctionCall","src":"14875:9:1"},"nodeType":"YulIf","src":"14872:88:1"},{"nodeType":"YulAssignment","src":"14978:22:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"14991:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"14998:1:1","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14987:3:1"},"nodeType":"YulFunctionCall","src":"14987:13:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"14978:5:1"}]},{"nodeType":"YulAssignment","src":"15017:7:1","value":{"kind":"number","nodeType":"YulLiteral","src":"15023:1:1","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"15017:2:1"}]},{"nodeType":"YulAssignment","src":"15041:8:1","value":{"kind":"number","nodeType":"YulLiteral","src":"15048:1:1","type":"","value":"1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"15041:3:1"}]},{"body":{"nodeType":"YulBlock","src":"15120:4061:1","statements":[{"nodeType":"YulVariableDeclaration","src":"15182:25:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15199:1:1","type":"","value":"2"},{"name":"Y","nodeType":"YulIdentifier","src":"15202:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"15205:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15192:6:1"},"nodeType":"YulFunctionCall","src":"15192:15:1"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"15186:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15247:27:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"15264:2:1"},{"name":"T1","nodeType":"YulIdentifier","src":"15268:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"15272:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15257:6:1"},"nodeType":"YulFunctionCall","src":"15257:17:1"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"15251:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15304:26:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"15321:1:1"},{"name":"T2","nodeType":"YulIdentifier","src":"15324:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"15328:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15314:6:1"},"nodeType":"YulFunctionCall","src":"15314:16:1"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"15308:2:1","type":""}]},{"nodeType":"YulAssignment","src":"15363:23:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"15376:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"15380:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"15384:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15369:6:1"},"nodeType":"YulFunctionCall","src":"15369:17:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"15363:2:1"}]},{"nodeType":"YulVariableDeclaration","src":"15415:77:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15432:1:1","type":"","value":"3"},{"arguments":[{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"15449:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"15456:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"15459:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15452:3:1"},"nodeType":"YulFunctionCall","src":"15452:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"15464:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"15442:6:1"},"nodeType":"YulFunctionCall","src":"15442:24:1"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"15475:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"15478:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"15482:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"15468:6:1"},"nodeType":"YulFunctionCall","src":"15468:16:1"},{"name":"p","nodeType":"YulIdentifier","src":"15486:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15435:6:1"},"nodeType":"YulFunctionCall","src":"15435:53:1"},{"name":"p","nodeType":"YulIdentifier","src":"15490:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15425:6:1"},"nodeType":"YulFunctionCall","src":"15425:67:1"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"15419:2:1","type":""}]},{"nodeType":"YulAssignment","src":"15537:25:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"15551:2:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"15555:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"15560:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15544:6:1"},"nodeType":"YulFunctionCall","src":"15544:18:1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"15537:3:1"}]},{"nodeType":"YulAssignment","src":"15597:23:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"15610:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"15614:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"15618:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15603:6:1"},"nodeType":"YulFunctionCall","src":"15603:17:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"15597:2:1"}]},{"nodeType":"YulAssignment","src":"15662:57:1","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"15681:2:1"},{"name":"T4","nodeType":"YulIdentifier","src":"15685:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"15689:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15674:6:1"},"nodeType":"YulFunctionCall","src":"15674:17:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"15700:7:1"},{"name":"T3","nodeType":"YulIdentifier","src":"15709:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"15713:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15693:6:1"},"nodeType":"YulFunctionCall","src":"15693:22:1"},{"name":"p","nodeType":"YulIdentifier","src":"15717:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"15667:6:1"},"nodeType":"YulFunctionCall","src":"15667:52:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"15662:1:1"}]},{"nodeType":"YulAssignment","src":"15752:45:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"15765:2:1"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"15776:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"15783:1:1"},{"name":"T3","nodeType":"YulIdentifier","src":"15786:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15779:3:1"},"nodeType":"YulFunctionCall","src":"15779:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"15791:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"15769:6:1"},"nodeType":"YulFunctionCall","src":"15769:24:1"},{"name":"p","nodeType":"YulIdentifier","src":"15795:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15758:6:1"},"nodeType":"YulFunctionCall","src":"15758:39:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"15752:2:1"}]},{"nodeType":"YulAssignment","src":"15837:36:1","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"15856:2:1"},{"name":"Y","nodeType":"YulIdentifier","src":"15860:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"15863:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"15849:6:1"},"nodeType":"YulFunctionCall","src":"15849:16:1"},{"name":"T2","nodeType":"YulIdentifier","src":"15867:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"15871:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"15842:6:1"},"nodeType":"YulFunctionCall","src":"15842:31:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"15837:1:1"}]},{"nodeType":"YulBlock","src":"15959:3204:1","statements":[{"nodeType":"YulAssignment","src":"16026:77:1","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16040:1:1","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"16051:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"16058:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"16047:3:1"},"nodeType":"YulFunctionCall","src":"16047:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"16069:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16043:3:1"},"nodeType":"YulFunctionCall","src":"16043:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16036:3:1"},"nodeType":"YulFunctionCall","src":"16036:36:1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"16082:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"16089:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"16078:3:1"},"nodeType":"YulFunctionCall","src":"16078:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"16100:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16074:3:1"},"nodeType":"YulFunctionCall","src":"16074:28:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16032:3:1"},"nodeType":"YulFunctionCall","src":"16032:71:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"16026:2:1"}]},{"body":{"nodeType":"YulBlock","src":"16143:134:1","statements":[{"nodeType":"YulAssignment","src":"16173:14:1","value":{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"16182:1:1"},{"name":"Y","nodeType":"YulIdentifier","src":"16185:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16178:3:1"},"nodeType":"YulFunctionCall","src":"16178:9:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"16173:1:1"}]},{"nodeType":"YulContinue","src":"16243:8:1"}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"16139:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16132:6:1"},"nodeType":"YulFunctionCall","src":"16132:10:1"},"nodeType":"YulIf","src":"16129:148:1"},{"body":{"nodeType":"YulBlock","src":"16328:101:1","statements":[{"nodeType":"YulAssignment","src":"16358:8:1","value":{"name":"gx","nodeType":"YulIdentifier","src":"16364:2:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"16358:2:1"}]},{"nodeType":"YulAssignment","src":"16395:8:1","value":{"name":"gy","nodeType":"YulIdentifier","src":"16401:2:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"16395:2:1"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"16321:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"16325:1:1","type":"","value":"1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16318:2:1"},"nodeType":"YulFunctionCall","src":"16318:9:1"},"nodeType":"YulIf","src":"16315:114:1"},{"body":{"nodeType":"YulBlock","src":"16467:101:1","statements":[{"nodeType":"YulAssignment","src":"16497:8:1","value":{"name":"Q0","nodeType":"YulIdentifier","src":"16503:2:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"16497:2:1"}]},{"nodeType":"YulAssignment","src":"16534:8:1","value":{"name":"Q1","nodeType":"YulIdentifier","src":"16540:2:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"16534:2:1"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"16460:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"16464:1:1","type":"","value":"2"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16457:2:1"},"nodeType":"YulFunctionCall","src":"16457:9:1"},"nodeType":"YulIf","src":"16454:114:1"},{"body":{"nodeType":"YulBlock","src":"16606:101:1","statements":[{"nodeType":"YulAssignment","src":"16636:8:1","value":{"name":"H0","nodeType":"YulIdentifier","src":"16642:2:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"16636:2:1"}]},{"nodeType":"YulAssignment","src":"16673:8:1","value":{"name":"H1","nodeType":"YulIdentifier","src":"16679:2:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"16673:2:1"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"16599:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"16603:1:1","type":"","value":"3"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16596:2:1"},"nodeType":"YulFunctionCall","src":"16596:9:1"},"nodeType":"YulIf","src":"16593:114:1"},{"body":{"nodeType":"YulBlock","src":"16746:209:1","statements":[{"nodeType":"YulAssignment","src":"16776:7:1","value":{"name":"T1","nodeType":"YulIdentifier","src":"16781:2:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"16776:1:1"}]},{"nodeType":"YulAssignment","src":"16812:7:1","value":{"name":"T2","nodeType":"YulIdentifier","src":"16817:2:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"16812:1:1"}]},{"nodeType":"YulAssignment","src":"16848:7:1","value":{"kind":"number","nodeType":"YulLiteral","src":"16854:1:1","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"16848:2:1"}]},{"nodeType":"YulAssignment","src":"16884:8:1","value":{"kind":"number","nodeType":"YulLiteral","src":"16891:1:1","type":"","value":"1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"16884:3:1"}]},{"nodeType":"YulContinue","src":"16921:8:1"}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"16742:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16735:6:1"},"nodeType":"YulFunctionCall","src":"16735:10:1"},"nodeType":"YulIf","src":"16732:223:1"},{"nodeType":"YulVariableDeclaration","src":"17098:42:1","value":{"arguments":[{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"17122:2:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"17126:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"17131:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17115:6:1"},"nodeType":"YulFunctionCall","src":"17115:18:1"},{"name":"Y","nodeType":"YulIdentifier","src":"17135:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"17138:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"17108:6:1"},"nodeType":"YulFunctionCall","src":"17108:32:1"},"variables":[{"name":"y2","nodeType":"YulTypedName","src":"17102:2:1","type":""}]},{"nodeType":"YulAssignment","src":"17169:45:1","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"17189:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"17193:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"17197:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17182:6:1"},"nodeType":"YulFunctionCall","src":"17182:17:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"17205:1:1"},{"name":"X","nodeType":"YulIdentifier","src":"17208:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17201:3:1"},"nodeType":"YulFunctionCall","src":"17201:9:1"},{"name":"p","nodeType":"YulIdentifier","src":"17212:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"17175:6:1"},"nodeType":"YulFunctionCall","src":"17175:39:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"17169:2:1"}]},{"body":{"nodeType":"YulBlock","src":"17443:1118:1","statements":[{"body":{"nodeType":"YulBlock","src":"17487:1048:1","statements":[{"nodeType":"YulAssignment","src":"17521:27:1","value":{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"17534:7:1"},{"name":"Y","nodeType":"YulIdentifier","src":"17543:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"17546:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17527:6:1"},"nodeType":"YulFunctionCall","src":"17527:21:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"17521:2:1"}]},{"nodeType":"YulAssignment","src":"17600:23:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"17613:2:1"},{"name":"T1","nodeType":"YulIdentifier","src":"17617:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"17621:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17606:6:1"},"nodeType":"YulFunctionCall","src":"17606:17:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"17600:2:1"}]},{"nodeType":"YulAssignment","src":"17665:22:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"17678:1:1"},{"name":"T2","nodeType":"YulIdentifier","src":"17681:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"17685:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17671:6:1"},"nodeType":"YulFunctionCall","src":"17671:16:1"},"variableNames":[{"name":"T3","nodeType":"YulIdentifier","src":"17665:2:1"}]},{"nodeType":"YulAssignment","src":"17733:23:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"17746:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"17750:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"17754:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17739:6:1"},"nodeType":"YulFunctionCall","src":"17739:17:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"17733:2:1"}]},{"nodeType":"YulAssignment","src":"17797:22:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"17810:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"17813:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"17817:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"17803:6:1"},"nodeType":"YulFunctionCall","src":"17803:16:1"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"17797:2:1"}]},{"nodeType":"YulVariableDeclaration","src":"17860:35:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"17878:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"17885:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"17888:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17881:3:1"},"nodeType":"YulFunctionCall","src":"17881:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"17893:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"17871:6:1"},"nodeType":"YulFunctionCall","src":"17871:24:1"},"variables":[{"name":"TT1","nodeType":"YulTypedName","src":"17864:3:1","type":""}]},{"nodeType":"YulAssignment","src":"17935:24:1","value":{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"17948:2:1"},{"name":"TT1","nodeType":"YulIdentifier","src":"17952:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"17957:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"17941:6:1"},"nodeType":"YulFunctionCall","src":"17941:18:1"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"17935:2:1"}]},{"nodeType":"YulAssignment","src":"18007:22:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18020:1:1","type":"","value":"3"},{"name":"y2","nodeType":"YulIdentifier","src":"18023:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"18027:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18013:6:1"},"nodeType":"YulFunctionCall","src":"18013:16:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"18007:2:1"}]},{"nodeType":"YulAssignment","src":"18067:26:1","value":{"arguments":[{"name":"TT1","nodeType":"YulIdentifier","src":"18081:3:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"18086:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"18091:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18074:6:1"},"nodeType":"YulFunctionCall","src":"18074:19:1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"18067:3:1"}]},{"nodeType":"YulAssignment","src":"18140:23:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"18153:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"18157:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"18161:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18146:6:1"},"nodeType":"YulFunctionCall","src":"18146:17:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"18140:2:1"}]},{"nodeType":"YulAssignment","src":"18217:57:1","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"18236:2:1"},{"name":"T4","nodeType":"YulIdentifier","src":"18240:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"18244:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18229:6:1"},"nodeType":"YulFunctionCall","src":"18229:17:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"18255:7:1"},{"name":"T3","nodeType":"YulIdentifier","src":"18264:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"18268:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18248:6:1"},"nodeType":"YulFunctionCall","src":"18248:22:1"},{"name":"p","nodeType":"YulIdentifier","src":"18272:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"18222:6:1"},"nodeType":"YulFunctionCall","src":"18222:52:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"18217:1:1"}]},{"nodeType":"YulAssignment","src":"18319:45:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"18332:2:1"},{"arguments":[{"name":"T3","nodeType":"YulIdentifier","src":"18343:2:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"18351:1:1"},{"name":"X","nodeType":"YulIdentifier","src":"18354:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18347:3:1"},"nodeType":"YulFunctionCall","src":"18347:9:1"},{"name":"p","nodeType":"YulIdentifier","src":"18358:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"18336:6:1"},"nodeType":"YulFunctionCall","src":"18336:24:1"},{"name":"p","nodeType":"YulIdentifier","src":"18362:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18325:6:1"},"nodeType":"YulFunctionCall","src":"18325:39:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"18319:2:1"}]},{"nodeType":"YulAssignment","src":"18408:36:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"18420:2:1"},{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"18431:2:1"},{"name":"Y","nodeType":"YulIdentifier","src":"18435:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"18438:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18424:6:1"},"nodeType":"YulFunctionCall","src":"18424:16:1"},{"name":"p","nodeType":"YulIdentifier","src":"18442:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"18413:6:1"},"nodeType":"YulFunctionCall","src":"18413:31:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"18408:1:1"}]},{"nodeType":"YulContinue","src":"18497:8:1"}]},"condition":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"17483:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17476:6:1"},"nodeType":"YulFunctionCall","src":"17476:10:1"},"nodeType":"YulIf","src":"17473:1062:1"}]},"condition":{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"17439:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17432:6:1"},"nodeType":"YulFunctionCall","src":"17432:10:1"},"nodeType":"YulIf","src":"17429:1132:1"},{"nodeType":"YulAssignment","src":"18587:23:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"18600:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"18604:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"18608:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18593:6:1"},"nodeType":"YulFunctionCall","src":"18593:17:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"18587:2:1"}]},{"nodeType":"YulVariableDeclaration","src":"18640:28:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"18658:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"18662:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"18666:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18651:6:1"},"nodeType":"YulFunctionCall","src":"18651:17:1"},"variables":[{"name":"TT1","nodeType":"YulTypedName","src":"18644:3:1","type":""}]},{"nodeType":"YulAssignment","src":"18761:23:1","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"18774:2:1"},{"name":"T4","nodeType":"YulIdentifier","src":"18778:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"18782:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18767:6:1"},"nodeType":"YulFunctionCall","src":"18767:17:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"18761:2:1"}]},{"nodeType":"YulAssignment","src":"18809:26:1","value":{"arguments":[{"name":"zzz","nodeType":"YulIdentifier","src":"18823:3:1"},{"name":"TT1","nodeType":"YulIdentifier","src":"18828:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"18833:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18816:6:1"},"nodeType":"YulFunctionCall","src":"18816:19:1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"18809:3:1"}]},{"nodeType":"YulVariableDeclaration","src":"18872:27:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"18890:1:1"},{"name":"T4","nodeType":"YulIdentifier","src":"18893:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"18897:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18883:6:1"},"nodeType":"YulFunctionCall","src":"18883:16:1"},"variables":[{"name":"TT2","nodeType":"YulTypedName","src":"18876:3:1","type":""}]},{"nodeType":"YulAssignment","src":"18924:83:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"18951:2:1"},{"name":"y2","nodeType":"YulIdentifier","src":"18955:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"18959:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18944:6:1"},"nodeType":"YulFunctionCall","src":"18944:17:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"18967:1:1"},{"name":"TT1","nodeType":"YulIdentifier","src":"18970:3:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18963:3:1"},"nodeType":"YulFunctionCall","src":"18963:11:1"},{"name":"p","nodeType":"YulIdentifier","src":"18976:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"18937:6:1"},"nodeType":"YulFunctionCall","src":"18937:41:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"18987:7:1"},{"name":"TT2","nodeType":"YulIdentifier","src":"18996:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"19001:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"18980:6:1"},"nodeType":"YulFunctionCall","src":"18980:23:1"},{"name":"p","nodeType":"YulIdentifier","src":"19005:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"18930:6:1"},"nodeType":"YulFunctionCall","src":"18930:77:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"18924:2:1"}]},{"nodeType":"YulAssignment","src":"19032:76:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"TT2","nodeType":"YulIdentifier","src":"19058:3:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"19067:1:1"},{"name":"T4","nodeType":"YulIdentifier","src":"19070:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19063:3:1"},"nodeType":"YulFunctionCall","src":"19063:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"19075:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"19051:6:1"},"nodeType":"YulFunctionCall","src":"19051:26:1"},{"name":"y2","nodeType":"YulIdentifier","src":"19079:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"19083:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"19044:6:1"},"nodeType":"YulFunctionCall","src":"19044:41:1"},{"arguments":[{"name":"Y","nodeType":"YulIdentifier","src":"19094:1:1"},{"name":"TT1","nodeType":"YulIdentifier","src":"19097:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"19102:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"19087:6:1"},"nodeType":"YulFunctionCall","src":"19087:17:1"},{"name":"p","nodeType":"YulIdentifier","src":"19106:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"19037:6:1"},"nodeType":"YulFunctionCall","src":"19037:71:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"19032:1:1"}]},{"nodeType":"YulAssignment","src":"19134:7:1","value":{"name":"T4","nodeType":"YulIdentifier","src":"19139:2:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"19134:1:1"}]}]}]},"condition":{"arguments":[{"name":"minus_1","nodeType":"YulIdentifier","src":"15077:7:1"},{"name":"index","nodeType":"YulIdentifier","src":"15086:5:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15074:2:1"},"nodeType":"YulFunctionCall","src":"15074:18:1"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"15093:26:1","statements":[{"nodeType":"YulAssignment","src":"15095:22:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"15108:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"15115:1:1","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15104:3:1"},"nodeType":"YulFunctionCall","src":"15104:13:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"15095:5:1"}]}]},"pre":{"nodeType":"YulBlock","src":"15071:2:1","statements":[]},"src":"15067:4114:1"},{"nodeType":"YulVariableDeclaration","src":"19209:20:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19224:4:1","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19218:5:1"},"nodeType":"YulFunctionCall","src":"19218:11:1"},"variables":[{"name":"T","nodeType":"YulTypedName","src":"19213:1:1","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19257:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"19260:4:1","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19253:3:1"},"nodeType":"YulFunctionCall","src":"19253:12:1"},{"name":"zz","nodeType":"YulIdentifier","src":"19267:2:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19246:6:1"},"nodeType":"YulFunctionCall","src":"19246:24:1"},"nodeType":"YulExpressionStatement","src":"19246:24:1"},{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19529:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"19532:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19522:6:1"},"nodeType":"YulFunctionCall","src":"19522:15:1"},"nodeType":"YulExpressionStatement","src":"19522:15:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19565:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"19568:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19561:3:1"},"nodeType":"YulFunctionCall","src":"19561:12:1"},{"kind":"number","nodeType":"YulLiteral","src":"19575:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19554:6:1"},"nodeType":"YulFunctionCall","src":"19554:26:1"},"nodeType":"YulExpressionStatement","src":"19554:26:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19608:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"19611:4:1","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19604:3:1"},"nodeType":"YulFunctionCall","src":"19604:12:1"},{"kind":"number","nodeType":"YulLiteral","src":"19618:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19597:6:1"},"nodeType":"YulFunctionCall","src":"19597:26:1"},"nodeType":"YulExpressionStatement","src":"19597:26:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19762:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"19765:4:1","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19758:3:1"},"nodeType":"YulFunctionCall","src":"19758:12:1"},{"name":"minus_2","nodeType":"YulIdentifier","src":"19772:7:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19751:6:1"},"nodeType":"YulFunctionCall","src":"19751:29:1"},"nodeType":"YulExpressionStatement","src":"19751:29:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"19808:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"19811:4:1","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19804:3:1"},"nodeType":"YulFunctionCall","src":"19804:12:1"},{"name":"p","nodeType":"YulIdentifier","src":"19818:1:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19797:6:1"},"nodeType":"YulFunctionCall","src":"19797:23:1"},"nodeType":"YulExpressionStatement","src":"19797:23:1"},{"body":{"nodeType":"YulBlock","src":"19955:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19964:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19967:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19957:6:1"},"nodeType":"YulFunctionCall","src":"19957:12:1"},"nodeType":"YulExpressionStatement","src":"19957:12:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19926:1:1","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"19922:3:1"},"nodeType":"YulFunctionCall","src":"19922:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"19930:4:1","type":"","value":"0x05"},{"name":"T","nodeType":"YulIdentifier","src":"19936:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"19939:4:1","type":"","value":"0xc0"},{"name":"T","nodeType":"YulIdentifier","src":"19945:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"19948:4:1","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"19911:10:1"},"nodeType":"YulFunctionCall","src":"19911:42:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19904:6:1"},"nodeType":"YulFunctionCall","src":"19904:50:1"},"nodeType":"YulIf","src":"19901:70:1"},{"nodeType":"YulAssignment","src":"20131:27:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"20143:1:1"},{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"20152:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20146:5:1"},"nodeType":"YulFunctionCall","src":"20146:8:1"},{"name":"p","nodeType":"YulIdentifier","src":"20156:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"20136:6:1"},"nodeType":"YulFunctionCall","src":"20136:22:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"20131:1:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1052,"isOffset":false,"isSlot":false,"src":"14912:2:1","valueSize":1},{"declaration":1052,"isOffset":false,"isSlot":false,"src":"16642:2:1","valueSize":1},{"declaration":1055,"isOffset":false,"isSlot":false,"src":"14940:2:1","valueSize":1},{"declaration":1055,"isOffset":false,"isSlot":false,"src":"16679:2:1","valueSize":1},{"declaration":1027,"isOffset":false,"isSlot":false,"src":"14807:2:1","valueSize":1},{"declaration":1027,"isOffset":false,"isSlot":false,"src":"16503:2:1","valueSize":1},{"declaration":1029,"isOffset":false,"isSlot":false,"src":"14835:2:1","valueSize":1},{"declaration":1029,"isOffset":false,"isSlot":false,"src":"16540:2:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"14697:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"14802:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"14907:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"15321:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"15449:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"15475:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"15662:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"15776:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"16776:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"17208:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"17678:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"17810:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"17878:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"18217:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"18354:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"18890:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"19134:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"20131:1:1","valueSize":1},{"declaration":1036,"isOffset":false,"isSlot":false,"src":"20143:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"14725:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"14830:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"14935:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"15202:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"15837:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"15860:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"16173:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"16185:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"16812:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"17135:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"17543:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"18408:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"18435:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"19032:1:1","valueSize":1},{"declaration":1045,"isOffset":false,"isSlot":false,"src":"19094:1:1","valueSize":1},{"declaration":264,"isOffset":false,"isSlot":false,"src":"14702:2:1","valueSize":1},{"declaration":264,"isOffset":false,"isSlot":false,"src":"16364:2:1","valueSize":1},{"declaration":267,"isOffset":false,"isSlot":false,"src":"14730:2:1","valueSize":1},{"declaration":267,"isOffset":false,"isSlot":false,"src":"16401:2:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"14322:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"14353:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"14409:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"14422:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"14477:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"14508:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"14592:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"14623:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"14978:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"14991:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"15086:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"15095:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"15108:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"16051:5:1","valueSize":1},{"declaration":1048,"isOffset":false,"isSlot":false,"src":"16082:5:1","valueSize":1},{"declaration":279,"isOffset":false,"isSlot":false,"src":"15077:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"15700:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"17534:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"18255:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"18987:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"19772:7:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15205:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15272:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15328:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15384:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15456:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15464:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15482:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15486:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15490:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15560:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15618:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15689:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15713:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15717:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15783:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15791:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15795:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15863:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"15871:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"16182:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17131:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17138:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17197:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17205:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17212:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17546:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17621:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17685:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17754:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17817:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17885:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17893:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"17957:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18027:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18091:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18161:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18244:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18268:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18272:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18351:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18358:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18362:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18438:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18442:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18608:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18666:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18782:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18833:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18897:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18959:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18967:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"18976:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"19001:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"19005:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"19067:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"19075:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"19083:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"19102:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"19106:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"19818:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"20156:1:1","valueSize":1},{"declaration":1031,"isOffset":false,"isSlot":false,"src":"14360:8:1","valueSize":1},{"declaration":1031,"isOffset":false,"isSlot":false,"src":"14515:8:1","valueSize":1},{"declaration":1031,"isOffset":false,"isSlot":false,"src":"14630:8:1","valueSize":1},{"declaration":1031,"isOffset":false,"isSlot":false,"src":"16089:8:1","valueSize":1},{"declaration":1033,"isOffset":false,"isSlot":false,"src":"14329:8:1","valueSize":1},{"declaration":1033,"isOffset":false,"isSlot":false,"src":"14484:8:1","valueSize":1},{"declaration":1033,"isOffset":false,"isSlot":false,"src":"14599:8:1","valueSize":1},{"declaration":1033,"isOffset":false,"isSlot":false,"src":"16058:8:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"14567:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"14668:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"14773:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"14878:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"15017:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"15459:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"15478:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"15597:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"15614:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"16742:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"16848:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"17193:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"17813:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"17888:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"18140:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"18157:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"18761:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"18774:2:1","valueSize":1},{"declaration":1039,"isOffset":false,"isSlot":false,"src":"19267:2:1","valueSize":1},{"declaration":1042,"isOffset":false,"isSlot":false,"src":"15041:3:1","valueSize":1},{"declaration":1042,"isOffset":false,"isSlot":false,"src":"15537:3:1","valueSize":1},{"declaration":1042,"isOffset":false,"isSlot":false,"src":"15555:3:1","valueSize":1},{"declaration":1042,"isOffset":false,"isSlot":false,"src":"16884:3:1","valueSize":1},{"declaration":1042,"isOffset":false,"isSlot":false,"src":"17126:3:1","valueSize":1},{"declaration":1042,"isOffset":false,"isSlot":false,"src":"18067:3:1","valueSize":1},{"declaration":1042,"isOffset":false,"isSlot":false,"src":"18086:3:1","valueSize":1},{"declaration":1042,"isOffset":false,"isSlot":false,"src":"18809:3:1","valueSize":1},{"declaration":1042,"isOffset":false,"isSlot":false,"src":"18823:3:1","valueSize":1}],"id":1078,"nodeType":"InlineAssembly","src":"14260:5919:1"}]},{"expression":{"id":1080,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1036,"src":"20237:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1037,"id":1081,"nodeType":"Return","src":"20230:8:1"}]},"documentation":{"id":1025,"nodeType":"StructuredDocumentation","src":"13573:161:1","text":" @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\n Returns only x for ECDSA use \n "},"id":1083,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_mulmuladd_S_asm","nameLocation":"13748:20:1","nodeType":"FunctionDefinition","parameters":{"id":1034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1027,"mutability":"mutable","name":"Q0","nameLocation":"13786:2:1","nodeType":"VariableDeclaration","scope":1083,"src":"13778:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1026,"name":"uint256","nodeType":"ElementaryTypeName","src":"13778:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1029,"mutability":"mutable","name":"Q1","nameLocation":"13806:2:1","nodeType":"VariableDeclaration","scope":1083,"src":"13798:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1028,"name":"uint256","nodeType":"ElementaryTypeName","src":"13798:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1031,"mutability":"mutable","name":"scalar_u","nameLocation":"13857:8:1","nodeType":"VariableDeclaration","scope":1083,"src":"13849:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1030,"name":"uint256","nodeType":"ElementaryTypeName","src":"13849:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1033,"mutability":"mutable","name":"scalar_v","nameLocation":"13883:8:1","nodeType":"VariableDeclaration","scope":1083,"src":"13875:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1032,"name":"uint256","nodeType":"ElementaryTypeName","src":"13875:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13768:129:1"},"returnParameters":{"id":1037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1036,"mutability":"mutable","name":"X","nameLocation":"13929:1:1","nodeType":"VariableDeclaration","scope":1083,"src":"13921:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1035,"name":"uint256","nodeType":"ElementaryTypeName","src":"13921:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13920:11:1"},"scope":1886,"src":"13739:6506:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1156,"nodeType":"Block","src":"20634:6321:1","statements":[{"assignments":[1100],"declarations":[{"constant":false,"id":1100,"mutability":"mutable","name":"zz","nameLocation":"20652:2:1","nodeType":"VariableDeclaration","scope":1156,"src":"20644:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1099,"name":"uint256","nodeType":"ElementaryTypeName","src":"20644:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1101,"nodeType":"VariableDeclarationStatement","src":"20644:10:1"},{"assignments":[1103],"declarations":[{"constant":false,"id":1103,"mutability":"mutable","name":"zzz","nameLocation":"20672:3:1","nodeType":"VariableDeclaration","scope":1156,"src":"20664:11:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1102,"name":"uint256","nodeType":"ElementaryTypeName","src":"20664:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1104,"nodeType":"VariableDeclarationStatement","src":"20664:11:1"},{"assignments":[1106],"declarations":[{"constant":false,"id":1106,"mutability":"mutable","name":"index","nameLocation":"20693:5:1","nodeType":"VariableDeclaration","scope":1156,"src":"20685:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1105,"name":"uint256","nodeType":"ElementaryTypeName","src":"20685:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1108,"initialValue":{"hexValue":"323535","id":1107,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20701:3:1","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"nodeType":"VariableDeclarationStatement","src":"20685:19:1"},{"assignments":[1114],"declarations":[{"constant":false,"id":1114,"mutability":"mutable","name":"T","nameLocation":"20732:1:1","nodeType":"VariableDeclaration","scope":1156,"src":"20714:19:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6]"},"typeName":{"baseType":{"id":1112,"name":"uint256","nodeType":"ElementaryTypeName","src":"20714:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1113,"length":{"hexValue":"36","id":1111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20722:1:1","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"ArrayTypeName","src":"20714:10:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_storage_ptr","typeString":"uint256[6]"}},"visibility":"internal"}],"id":1115,"nodeType":"VariableDeclarationStatement","src":"20714:19:1"},{"assignments":[1121],"declarations":[{"constant":false,"id":1121,"mutability":"mutable","name":"H","nameLocation":"20761:1:1","nodeType":"VariableDeclaration","scope":1156,"src":"20743:19:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":1119,"name":"uint256","nodeType":"ElementaryTypeName","src":"20743:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1120,"length":{"hexValue":"32","id":1118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20751:1:1","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"20743:10:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"id":1122,"nodeType":"VariableDeclarationStatement","src":"20743:19:1"},{"id":1151,"nodeType":"UncheckedBlock","src":"20774:6136:1","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1123,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"20802:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20814:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20802:13:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1126,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1092,"src":"20819:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1127,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20831:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20819:13:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"20802:30:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1134,"nodeType":"IfStatement","src":"20798:48:1","trueBody":{"expression":{"components":[{"hexValue":"30","id":1130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20842:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":1131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20844:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":1132,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"20841:5:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0)"}},"functionReturnParameters":1098,"id":1133,"nodeType":"Return","src":"20834:12:1"}},{"expression":{"id":1148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":1135,"name":"H","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1121,"src":"20862:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1137,"indexExpression":{"hexValue":"30","id":1136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20864:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20862:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":1138,"name":"H","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1121,"src":"20868:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":1140,"indexExpression":{"hexValue":"31","id":1139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20870:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20868:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1141,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"20861:12:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1143,"name":"gx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":264,"src":"20886:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1144,"name":"gy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":267,"src":"20890:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1145,"name":"Q0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1086,"src":"20894:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1146,"name":"Q1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1088,"src":"20898:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1142,"name":"ecAff_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1024,"src":"20876:9:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":1147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20876:25:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"20861:40:1","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1149,"nodeType":"ExpressionStatement","src":"20861:40:1"},{"AST":{"nodeType":"YulBlock","src":"20979:5906:1","statements":[{"body":{"nodeType":"YulBlock","src":"21258:2:1","statements":[]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"21090:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"21094:1:1","type":"","value":"0"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"21087:2:1"},"nodeType":"YulFunctionCall","src":"21087:9:1"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"21097:160:1","statements":[{"nodeType":"YulAssignment","src":"21119:22:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21132:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"21139:1:1","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21128:3:1"},"nodeType":"YulFunctionCall","src":"21128:13:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"21119:5:1"}]},{"nodeType":"YulAssignment","src":"21162:77:1","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21176:1:1","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21187:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"21194:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21183:3:1"},"nodeType":"YulFunctionCall","src":"21183:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"21205:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21179:3:1"},"nodeType":"YulFunctionCall","src":"21179:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21172:3:1"},"nodeType":"YulFunctionCall","src":"21172:36:1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21218:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"21225:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21214:3:1"},"nodeType":"YulFunctionCall","src":"21214:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"21236:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21210:3:1"},"nodeType":"YulFunctionCall","src":"21210:28:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21168:3:1"},"nodeType":"YulFunctionCall","src":"21168:71:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"21162:2:1"}]}]},"pre":{"nodeType":"YulBlock","src":"21001:85:1","statements":[{"nodeType":"YulVariableDeclaration","src":"21003:81:1","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21021:1:1","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21032:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"21039:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21028:3:1"},"nodeType":"YulFunctionCall","src":"21028:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"21050:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21024:3:1"},"nodeType":"YulFunctionCall","src":"21024:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21017:3:1"},"nodeType":"YulFunctionCall","src":"21017:36:1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21063:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"21070:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21059:3:1"},"nodeType":"YulFunctionCall","src":"21059:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"21081:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21055:3:1"},"nodeType":"YulFunctionCall","src":"21055:28:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21013:3:1"},"nodeType":"YulFunctionCall","src":"21013:71:1"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"21007:2:1","type":""}]}]},"src":"20997:263:1"},{"nodeType":"YulAssignment","src":"21277:77:1","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21291:1:1","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21302:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"21309:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21298:3:1"},"nodeType":"YulFunctionCall","src":"21298:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"21320:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21294:3:1"},"nodeType":"YulFunctionCall","src":"21294:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21287:3:1"},"nodeType":"YulFunctionCall","src":"21287:36:1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21333:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"21340:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21329:3:1"},"nodeType":"YulFunctionCall","src":"21329:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"21351:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21325:3:1"},"nodeType":"YulFunctionCall","src":"21325:28:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21283:3:1"},"nodeType":"YulFunctionCall","src":"21283:71:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"21277:2:1"}]},{"body":{"nodeType":"YulBlock","src":"21385:75:1","statements":[{"nodeType":"YulAssignment","src":"21407:7:1","value":{"name":"gx","nodeType":"YulIdentifier","src":"21412:2:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"21407:1:1"}]},{"nodeType":"YulAssignment","src":"21435:7:1","value":{"name":"gy","nodeType":"YulIdentifier","src":"21440:2:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"21435:1:1"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"21378:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"21382:1:1","type":"","value":"1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"21375:2:1"},"nodeType":"YulFunctionCall","src":"21375:9:1"},"nodeType":"YulIf","src":"21372:88:1"},{"body":{"nodeType":"YulBlock","src":"21490:75:1","statements":[{"nodeType":"YulAssignment","src":"21512:7:1","value":{"name":"Q0","nodeType":"YulIdentifier","src":"21517:2:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"21512:1:1"}]},{"nodeType":"YulAssignment","src":"21540:7:1","value":{"name":"Q1","nodeType":"YulIdentifier","src":"21545:2:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"21540:1:1"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"21483:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"21487:1:1","type":"","value":"2"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"21480:2:1"},"nodeType":"YulFunctionCall","src":"21480:9:1"},"nodeType":"YulIf","src":"21477:88:1"},{"body":{"nodeType":"YulBlock","src":"21595:95:1","statements":[{"nodeType":"YulAssignment","src":"21617:21:1","value":{"arguments":[{"arguments":[{"name":"H","nodeType":"YulIdentifier","src":"21632:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"21634:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21628:3:1"},"nodeType":"YulFunctionCall","src":"21628:9:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21622:5:1"},"nodeType":"YulFunctionCall","src":"21622:16:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"21617:1:1"}]},{"nodeType":"YulAssignment","src":"21659:13:1","value":{"arguments":[{"name":"H","nodeType":"YulIdentifier","src":"21670:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21664:5:1"},"nodeType":"YulFunctionCall","src":"21664:8:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"21659:1:1"}]}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"21588:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"21592:1:1","type":"","value":"3"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"21585:2:1"},"nodeType":"YulFunctionCall","src":"21585:9:1"},"nodeType":"YulIf","src":"21582:108:1"},{"nodeType":"YulAssignment","src":"21708:22:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21721:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"21728:1:1","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21717:3:1"},"nodeType":"YulFunctionCall","src":"21717:13:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"21708:5:1"}]},{"nodeType":"YulAssignment","src":"21747:7:1","value":{"kind":"number","nodeType":"YulLiteral","src":"21753:1:1","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"21747:2:1"}]},{"nodeType":"YulAssignment","src":"21771:8:1","value":{"kind":"number","nodeType":"YulLiteral","src":"21778:1:1","type":"","value":"1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"21771:3:1"}]},{"body":{"nodeType":"YulBlock","src":"21850:4080:1","statements":[{"nodeType":"YulVariableDeclaration","src":"21912:25:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21929:1:1","type":"","value":"2"},{"name":"Y","nodeType":"YulIdentifier","src":"21932:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"21935:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"21922:6:1"},"nodeType":"YulFunctionCall","src":"21922:15:1"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"21916:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"21977:27:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"21994:2:1"},{"name":"T1","nodeType":"YulIdentifier","src":"21998:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"22002:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"21987:6:1"},"nodeType":"YulFunctionCall","src":"21987:17:1"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"21981:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"22034:26:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"22051:1:1"},{"name":"T2","nodeType":"YulIdentifier","src":"22054:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"22058:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22044:6:1"},"nodeType":"YulFunctionCall","src":"22044:16:1"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"22038:2:1","type":""}]},{"nodeType":"YulAssignment","src":"22093:23:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"22106:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"22110:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"22114:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22099:6:1"},"nodeType":"YulFunctionCall","src":"22099:17:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"22093:2:1"}]},{"nodeType":"YulVariableDeclaration","src":"22145:77:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22162:1:1","type":"","value":"3"},{"arguments":[{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"22179:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"22186:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"22189:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22182:3:1"},"nodeType":"YulFunctionCall","src":"22182:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"22194:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"22172:6:1"},"nodeType":"YulFunctionCall","src":"22172:24:1"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"22205:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"22208:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"22212:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"22198:6:1"},"nodeType":"YulFunctionCall","src":"22198:16:1"},{"name":"p","nodeType":"YulIdentifier","src":"22216:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22165:6:1"},"nodeType":"YulFunctionCall","src":"22165:53:1"},{"name":"p","nodeType":"YulIdentifier","src":"22220:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22155:6:1"},"nodeType":"YulFunctionCall","src":"22155:67:1"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"22149:2:1","type":""}]},{"nodeType":"YulAssignment","src":"22267:25:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"22281:2:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"22285:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"22290:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22274:6:1"},"nodeType":"YulFunctionCall","src":"22274:18:1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"22267:3:1"}]},{"nodeType":"YulAssignment","src":"22327:23:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"22340:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"22344:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"22348:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22333:6:1"},"nodeType":"YulFunctionCall","src":"22333:17:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"22327:2:1"}]},{"nodeType":"YulAssignment","src":"22392:57:1","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"22411:2:1"},{"name":"T4","nodeType":"YulIdentifier","src":"22415:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"22419:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22404:6:1"},"nodeType":"YulFunctionCall","src":"22404:17:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"22430:7:1"},{"name":"T3","nodeType":"YulIdentifier","src":"22439:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"22443:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22423:6:1"},"nodeType":"YulFunctionCall","src":"22423:22:1"},{"name":"p","nodeType":"YulIdentifier","src":"22447:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"22397:6:1"},"nodeType":"YulFunctionCall","src":"22397:52:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"22392:1:1"}]},{"nodeType":"YulAssignment","src":"22482:45:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"22495:2:1"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"22506:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"22513:1:1"},{"name":"T3","nodeType":"YulIdentifier","src":"22516:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22509:3:1"},"nodeType":"YulFunctionCall","src":"22509:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"22521:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"22499:6:1"},"nodeType":"YulFunctionCall","src":"22499:24:1"},{"name":"p","nodeType":"YulIdentifier","src":"22525:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22488:6:1"},"nodeType":"YulFunctionCall","src":"22488:39:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"22482:2:1"}]},{"nodeType":"YulAssignment","src":"22567:36:1","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"22586:2:1"},{"name":"Y","nodeType":"YulIdentifier","src":"22590:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"22593:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"22579:6:1"},"nodeType":"YulFunctionCall","src":"22579:16:1"},{"name":"T2","nodeType":"YulIdentifier","src":"22597:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"22601:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"22572:6:1"},"nodeType":"YulFunctionCall","src":"22572:31:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"22567:1:1"}]},{"nodeType":"YulBlock","src":"22689:3223:1","statements":[{"nodeType":"YulAssignment","src":"22756:77:1","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22770:1:1","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"22781:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"22788:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"22777:3:1"},"nodeType":"YulFunctionCall","src":"22777:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"22799:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22773:3:1"},"nodeType":"YulFunctionCall","src":"22773:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22766:3:1"},"nodeType":"YulFunctionCall","src":"22766:36:1"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"22812:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"22819:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"22808:3:1"},"nodeType":"YulFunctionCall","src":"22808:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"22830:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22804:3:1"},"nodeType":"YulFunctionCall","src":"22804:28:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22762:3:1"},"nodeType":"YulFunctionCall","src":"22762:71:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"22756:2:1"}]},{"body":{"nodeType":"YulBlock","src":"22873:134:1","statements":[{"nodeType":"YulAssignment","src":"22903:14:1","value":{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"22912:1:1"},{"name":"Y","nodeType":"YulIdentifier","src":"22915:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22908:3:1"},"nodeType":"YulFunctionCall","src":"22908:9:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"22903:1:1"}]},{"nodeType":"YulContinue","src":"22973:8:1"}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"22869:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22862:6:1"},"nodeType":"YulFunctionCall","src":"22862:10:1"},"nodeType":"YulIf","src":"22859:148:1"},{"body":{"nodeType":"YulBlock","src":"23058:101:1","statements":[{"nodeType":"YulAssignment","src":"23088:8:1","value":{"name":"gx","nodeType":"YulIdentifier","src":"23094:2:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"23088:2:1"}]},{"nodeType":"YulAssignment","src":"23125:8:1","value":{"name":"gy","nodeType":"YulIdentifier","src":"23131:2:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"23125:2:1"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"23051:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"23055:1:1","type":"","value":"1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"23048:2:1"},"nodeType":"YulFunctionCall","src":"23048:9:1"},"nodeType":"YulIf","src":"23045:114:1"},{"body":{"nodeType":"YulBlock","src":"23197:101:1","statements":[{"nodeType":"YulAssignment","src":"23227:8:1","value":{"name":"Q0","nodeType":"YulIdentifier","src":"23233:2:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"23227:2:1"}]},{"nodeType":"YulAssignment","src":"23264:8:1","value":{"name":"Q1","nodeType":"YulIdentifier","src":"23270:2:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"23264:2:1"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"23190:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"23194:1:1","type":"","value":"2"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"23187:2:1"},"nodeType":"YulFunctionCall","src":"23187:9:1"},"nodeType":"YulIf","src":"23184:114:1"},{"body":{"nodeType":"YulBlock","src":"23336:121:1","statements":[{"nodeType":"YulAssignment","src":"23366:14:1","value":{"arguments":[{"name":"H","nodeType":"YulIdentifier","src":"23378:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23372:5:1"},"nodeType":"YulFunctionCall","src":"23372:8:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"23366:2:1"}]},{"nodeType":"YulAssignment","src":"23409:22:1","value":{"arguments":[{"arguments":[{"name":"H","nodeType":"YulIdentifier","src":"23425:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"23427:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23421:3:1"},"nodeType":"YulFunctionCall","src":"23421:9:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23415:5:1"},"nodeType":"YulFunctionCall","src":"23415:16:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"23409:2:1"}]}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"23329:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"23333:1:1","type":"","value":"3"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"23326:2:1"},"nodeType":"YulFunctionCall","src":"23326:9:1"},"nodeType":"YulIf","src":"23323:134:1"},{"body":{"nodeType":"YulBlock","src":"23496:209:1","statements":[{"nodeType":"YulAssignment","src":"23526:7:1","value":{"name":"T1","nodeType":"YulIdentifier","src":"23531:2:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"23526:1:1"}]},{"nodeType":"YulAssignment","src":"23562:7:1","value":{"name":"T2","nodeType":"YulIdentifier","src":"23567:2:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"23562:1:1"}]},{"nodeType":"YulAssignment","src":"23598:7:1","value":{"kind":"number","nodeType":"YulLiteral","src":"23604:1:1","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"23598:2:1"}]},{"nodeType":"YulAssignment","src":"23634:8:1","value":{"kind":"number","nodeType":"YulLiteral","src":"23641:1:1","type":"","value":"1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"23634:3:1"}]},{"nodeType":"YulContinue","src":"23671:8:1"}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"23492:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23485:6:1"},"nodeType":"YulFunctionCall","src":"23485:10:1"},"nodeType":"YulIf","src":"23482:223:1"},{"nodeType":"YulVariableDeclaration","src":"23848:42:1","value":{"arguments":[{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"23872:2:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"23876:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"23881:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"23865:6:1"},"nodeType":"YulFunctionCall","src":"23865:18:1"},{"name":"Y","nodeType":"YulIdentifier","src":"23885:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"23888:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"23858:6:1"},"nodeType":"YulFunctionCall","src":"23858:32:1"},"variables":[{"name":"y2","nodeType":"YulTypedName","src":"23852:2:1","type":""}]},{"nodeType":"YulAssignment","src":"23919:45:1","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"23939:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"23943:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"23947:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"23932:6:1"},"nodeType":"YulFunctionCall","src":"23932:17:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"23955:1:1"},{"name":"X","nodeType":"YulIdentifier","src":"23958:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23951:3:1"},"nodeType":"YulFunctionCall","src":"23951:9:1"},{"name":"p","nodeType":"YulIdentifier","src":"23962:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"23925:6:1"},"nodeType":"YulFunctionCall","src":"23925:39:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"23919:2:1"}]},{"body":{"nodeType":"YulBlock","src":"24193:1117:1","statements":[{"body":{"nodeType":"YulBlock","src":"24237:1047:1","statements":[{"nodeType":"YulAssignment","src":"24271:27:1","value":{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"24284:7:1"},{"name":"Y","nodeType":"YulIdentifier","src":"24293:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"24296:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24277:6:1"},"nodeType":"YulFunctionCall","src":"24277:21:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"24271:2:1"}]},{"nodeType":"YulAssignment","src":"24350:23:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"24363:2:1"},{"name":"T1","nodeType":"YulIdentifier","src":"24367:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"24371:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24356:6:1"},"nodeType":"YulFunctionCall","src":"24356:17:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"24350:2:1"}]},{"nodeType":"YulAssignment","src":"24415:22:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"24428:1:1"},{"name":"T2","nodeType":"YulIdentifier","src":"24431:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"24435:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24421:6:1"},"nodeType":"YulFunctionCall","src":"24421:16:1"},"variableNames":[{"name":"T3","nodeType":"YulIdentifier","src":"24415:2:1"}]},{"nodeType":"YulAssignment","src":"24483:23:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"24496:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"24500:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"24504:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24489:6:1"},"nodeType":"YulFunctionCall","src":"24489:17:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"24483:2:1"}]},{"nodeType":"YulAssignment","src":"24547:22:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"24560:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"24563:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"24567:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"24553:6:1"},"nodeType":"YulFunctionCall","src":"24553:16:1"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"24547:2:1"}]},{"nodeType":"YulVariableDeclaration","src":"24609:35:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"24627:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"24634:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"24637:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24630:3:1"},"nodeType":"YulFunctionCall","src":"24630:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"24642:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"24620:6:1"},"nodeType":"YulFunctionCall","src":"24620:24:1"},"variables":[{"name":"TT1","nodeType":"YulTypedName","src":"24613:3:1","type":""}]},{"nodeType":"YulAssignment","src":"24684:24:1","value":{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"24697:2:1"},{"name":"TT1","nodeType":"YulIdentifier","src":"24701:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"24706:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24690:6:1"},"nodeType":"YulFunctionCall","src":"24690:18:1"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"24684:2:1"}]},{"nodeType":"YulAssignment","src":"24756:22:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24769:1:1","type":"","value":"3"},{"name":"y2","nodeType":"YulIdentifier","src":"24772:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"24776:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24762:6:1"},"nodeType":"YulFunctionCall","src":"24762:16:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"24756:2:1"}]},{"nodeType":"YulAssignment","src":"24816:26:1","value":{"arguments":[{"name":"TT1","nodeType":"YulIdentifier","src":"24830:3:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"24835:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"24840:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24823:6:1"},"nodeType":"YulFunctionCall","src":"24823:19:1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"24816:3:1"}]},{"nodeType":"YulAssignment","src":"24889:23:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"24902:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"24906:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"24910:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24895:6:1"},"nodeType":"YulFunctionCall","src":"24895:17:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"24889:2:1"}]},{"nodeType":"YulAssignment","src":"24966:57:1","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"24985:2:1"},{"name":"T4","nodeType":"YulIdentifier","src":"24989:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"24993:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24978:6:1"},"nodeType":"YulFunctionCall","src":"24978:17:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"25004:7:1"},{"name":"T3","nodeType":"YulIdentifier","src":"25013:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"25017:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"24997:6:1"},"nodeType":"YulFunctionCall","src":"24997:22:1"},{"name":"p","nodeType":"YulIdentifier","src":"25021:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"24971:6:1"},"nodeType":"YulFunctionCall","src":"24971:52:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"24966:1:1"}]},{"nodeType":"YulAssignment","src":"25068:45:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"25081:2:1"},{"arguments":[{"name":"T3","nodeType":"YulIdentifier","src":"25092:2:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"25100:1:1"},{"name":"X","nodeType":"YulIdentifier","src":"25103:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25096:3:1"},"nodeType":"YulFunctionCall","src":"25096:9:1"},{"name":"p","nodeType":"YulIdentifier","src":"25107:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25085:6:1"},"nodeType":"YulFunctionCall","src":"25085:24:1"},{"name":"p","nodeType":"YulIdentifier","src":"25111:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25074:6:1"},"nodeType":"YulFunctionCall","src":"25074:39:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"25068:2:1"}]},{"nodeType":"YulAssignment","src":"25157:36:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"25169:2:1"},{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"25180:2:1"},{"name":"Y","nodeType":"YulIdentifier","src":"25184:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"25187:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25173:6:1"},"nodeType":"YulFunctionCall","src":"25173:16:1"},{"name":"p","nodeType":"YulIdentifier","src":"25191:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25162:6:1"},"nodeType":"YulFunctionCall","src":"25162:31:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"25157:1:1"}]},{"nodeType":"YulContinue","src":"25246:8:1"}]},"condition":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"24233:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24226:6:1"},"nodeType":"YulFunctionCall","src":"24226:10:1"},"nodeType":"YulIf","src":"24223:1061:1"}]},"condition":{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"24189:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24182:6:1"},"nodeType":"YulFunctionCall","src":"24182:10:1"},"nodeType":"YulIf","src":"24179:1131:1"},{"nodeType":"YulAssignment","src":"25336:23:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"25349:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"25353:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"25357:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25342:6:1"},"nodeType":"YulFunctionCall","src":"25342:17:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"25336:2:1"}]},{"nodeType":"YulVariableDeclaration","src":"25389:28:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"25407:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"25411:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"25415:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25400:6:1"},"nodeType":"YulFunctionCall","src":"25400:17:1"},"variables":[{"name":"TT1","nodeType":"YulTypedName","src":"25393:3:1","type":""}]},{"nodeType":"YulAssignment","src":"25510:23:1","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"25523:2:1"},{"name":"T4","nodeType":"YulIdentifier","src":"25527:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"25531:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25516:6:1"},"nodeType":"YulFunctionCall","src":"25516:17:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"25510:2:1"}]},{"nodeType":"YulAssignment","src":"25558:26:1","value":{"arguments":[{"name":"zzz","nodeType":"YulIdentifier","src":"25572:3:1"},{"name":"TT1","nodeType":"YulIdentifier","src":"25577:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"25582:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25565:6:1"},"nodeType":"YulFunctionCall","src":"25565:19:1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"25558:3:1"}]},{"nodeType":"YulVariableDeclaration","src":"25621:27:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"25639:1:1"},{"name":"T4","nodeType":"YulIdentifier","src":"25642:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"25646:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25632:6:1"},"nodeType":"YulFunctionCall","src":"25632:16:1"},"variables":[{"name":"TT2","nodeType":"YulTypedName","src":"25625:3:1","type":""}]},{"nodeType":"YulAssignment","src":"25673:83:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"25700:2:1"},{"name":"y2","nodeType":"YulIdentifier","src":"25704:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"25708:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25693:6:1"},"nodeType":"YulFunctionCall","src":"25693:17:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"25716:1:1"},{"name":"TT1","nodeType":"YulIdentifier","src":"25719:3:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25712:3:1"},"nodeType":"YulFunctionCall","src":"25712:11:1"},{"name":"p","nodeType":"YulIdentifier","src":"25725:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25686:6:1"},"nodeType":"YulFunctionCall","src":"25686:41:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"25736:7:1"},{"name":"TT2","nodeType":"YulIdentifier","src":"25745:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"25750:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25729:6:1"},"nodeType":"YulFunctionCall","src":"25729:23:1"},{"name":"p","nodeType":"YulIdentifier","src":"25754:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25679:6:1"},"nodeType":"YulFunctionCall","src":"25679:77:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"25673:2:1"}]},{"nodeType":"YulAssignment","src":"25781:76:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"TT2","nodeType":"YulIdentifier","src":"25807:3:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"25816:1:1"},{"name":"T4","nodeType":"YulIdentifier","src":"25819:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25812:3:1"},"nodeType":"YulFunctionCall","src":"25812:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"25824:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25800:6:1"},"nodeType":"YulFunctionCall","src":"25800:26:1"},{"name":"y2","nodeType":"YulIdentifier","src":"25828:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"25832:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25793:6:1"},"nodeType":"YulFunctionCall","src":"25793:41:1"},{"arguments":[{"name":"Y","nodeType":"YulIdentifier","src":"25843:1:1"},{"name":"TT1","nodeType":"YulIdentifier","src":"25846:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"25851:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"25836:6:1"},"nodeType":"YulFunctionCall","src":"25836:17:1"},{"name":"p","nodeType":"YulIdentifier","src":"25855:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"25786:6:1"},"nodeType":"YulFunctionCall","src":"25786:71:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"25781:1:1"}]},{"nodeType":"YulAssignment","src":"25883:7:1","value":{"name":"T4","nodeType":"YulIdentifier","src":"25888:2:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"25883:1:1"}]}]}]},"condition":{"arguments":[{"name":"minus_1","nodeType":"YulIdentifier","src":"21807:7:1"},{"name":"index","nodeType":"YulIdentifier","src":"21816:5:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21804:2:1"},"nodeType":"YulFunctionCall","src":"21804:18:1"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"21823:26:1","statements":[{"nodeType":"YulAssignment","src":"21825:22:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"21838:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"21845:1:1","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21834:3:1"},"nodeType":"YulFunctionCall","src":"21834:13:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"21825:5:1"}]}]},"pre":{"nodeType":"YulBlock","src":"21801:2:1","statements":[]},"src":"21797:4133:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"25969:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"25972:4:1","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25965:3:1"},"nodeType":"YulFunctionCall","src":"25965:12:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"25979:3:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25958:6:1"},"nodeType":"YulFunctionCall","src":"25958:25:1"},"nodeType":"YulExpressionStatement","src":"25958:25:1"},{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26242:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"26245:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26235:6:1"},"nodeType":"YulFunctionCall","src":"26235:15:1"},"nodeType":"YulExpressionStatement","src":"26235:15:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26278:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"26281:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26274:3:1"},"nodeType":"YulFunctionCall","src":"26274:12:1"},{"kind":"number","nodeType":"YulLiteral","src":"26288:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26267:6:1"},"nodeType":"YulFunctionCall","src":"26267:26:1"},"nodeType":"YulExpressionStatement","src":"26267:26:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26321:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"26324:4:1","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26317:3:1"},"nodeType":"YulFunctionCall","src":"26317:12:1"},{"kind":"number","nodeType":"YulLiteral","src":"26331:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26310:6:1"},"nodeType":"YulFunctionCall","src":"26310:26:1"},"nodeType":"YulExpressionStatement","src":"26310:26:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26475:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"26478:4:1","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26471:3:1"},"nodeType":"YulFunctionCall","src":"26471:12:1"},{"name":"minus_2","nodeType":"YulIdentifier","src":"26485:7:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26464:6:1"},"nodeType":"YulFunctionCall","src":"26464:29:1"},"nodeType":"YulExpressionStatement","src":"26464:29:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26521:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"26524:4:1","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26517:3:1"},"nodeType":"YulFunctionCall","src":"26517:12:1"},{"name":"p","nodeType":"YulIdentifier","src":"26531:1:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26510:6:1"},"nodeType":"YulFunctionCall","src":"26510:23:1"},"nodeType":"YulExpressionStatement","src":"26510:23:1"},{"body":{"nodeType":"YulBlock","src":"26668:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26677:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"26680:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"26670:6:1"},"nodeType":"YulFunctionCall","src":"26670:12:1"},"nodeType":"YulExpressionStatement","src":"26670:12:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26639:1:1","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"26635:3:1"},"nodeType":"YulFunctionCall","src":"26635:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"26643:4:1","type":"","value":"0x05"},{"name":"T","nodeType":"YulIdentifier","src":"26649:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"26652:4:1","type":"","value":"0xc0"},{"name":"T","nodeType":"YulIdentifier","src":"26658:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"26661:4:1","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"26624:10:1"},"nodeType":"YulFunctionCall","src":"26624:42:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26617:6:1"},"nodeType":"YulFunctionCall","src":"26617:50:1"},"nodeType":"YulIf","src":"26614:70:1"},{"nodeType":"YulAssignment","src":"26702:23:1","value":{"arguments":[{"name":"Y","nodeType":"YulIdentifier","src":"26712:1:1"},{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26720:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26714:5:1"},"nodeType":"YulFunctionCall","src":"26714:8:1"},{"name":"p","nodeType":"YulIdentifier","src":"26723:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"26705:6:1"},"nodeType":"YulFunctionCall","src":"26705:20:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"26702:1:1"}]},{"nodeType":"YulAssignment","src":"26749:27:1","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"26761:2:1"},{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"26771:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26765:5:1"},"nodeType":"YulFunctionCall","src":"26765:8:1"},{"name":"p","nodeType":"YulIdentifier","src":"26774:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"26754:6:1"},"nodeType":"YulFunctionCall","src":"26754:22:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"26749:2:1"}]},{"nodeType":"YulAssignment","src":"26799:20:1","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"26811:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"26814:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"26817:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"26804:6:1"},"nodeType":"YulFunctionCall","src":"26804:15:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"26799:2:1"}]},{"nodeType":"YulAssignment","src":"26843:21:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"26855:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"26858:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"26862:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"26848:6:1"},"nodeType":"YulFunctionCall","src":"26848:16:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"26843:1:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1121,"isOffset":false,"isSlot":false,"src":"21632:1:1","valueSize":1},{"declaration":1121,"isOffset":false,"isSlot":false,"src":"21670:1:1","valueSize":1},{"declaration":1121,"isOffset":false,"isSlot":false,"src":"23378:1:1","valueSize":1},{"declaration":1121,"isOffset":false,"isSlot":false,"src":"23425:1:1","valueSize":1},{"declaration":1086,"isOffset":false,"isSlot":false,"src":"21517:2:1","valueSize":1},{"declaration":1086,"isOffset":false,"isSlot":false,"src":"23233:2:1","valueSize":1},{"declaration":1088,"isOffset":false,"isSlot":false,"src":"21545:2:1","valueSize":1},{"declaration":1088,"isOffset":false,"isSlot":false,"src":"23270:2:1","valueSize":1},{"declaration":1114,"isOffset":false,"isSlot":false,"src":"25969:1:1","valueSize":1},{"declaration":1114,"isOffset":false,"isSlot":false,"src":"26242:1:1","valueSize":1},{"declaration":1114,"isOffset":false,"isSlot":false,"src":"26278:1:1","valueSize":1},{"declaration":1114,"isOffset":false,"isSlot":false,"src":"26321:1:1","valueSize":1},{"declaration":1114,"isOffset":false,"isSlot":false,"src":"26475:1:1","valueSize":1},{"declaration":1114,"isOffset":false,"isSlot":false,"src":"26521:1:1","valueSize":1},{"declaration":1114,"isOffset":false,"isSlot":false,"src":"26649:1:1","valueSize":1},{"declaration":1114,"isOffset":false,"isSlot":false,"src":"26658:1:1","valueSize":1},{"declaration":1114,"isOffset":false,"isSlot":false,"src":"26720:1:1","valueSize":1},{"declaration":1114,"isOffset":false,"isSlot":false,"src":"26771:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"21407:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"21512:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"21659:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"22051:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"22179:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"22205:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"22392:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"22506:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"23526:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"23958:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"24428:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"24560:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"24627:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"24966:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"25103:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"25639:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"25883:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"26843:1:1","valueSize":1},{"declaration":1095,"isOffset":false,"isSlot":false,"src":"26855:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"21435:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"21540:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"21617:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"21932:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"22567:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"22590:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"22903:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"22915:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"23562:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"23885:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"24293:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"25157:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"25184:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"25781:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"25843:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"26702:1:1","valueSize":1},{"declaration":1097,"isOffset":false,"isSlot":false,"src":"26712:1:1","valueSize":1},{"declaration":264,"isOffset":false,"isSlot":false,"src":"21412:2:1","valueSize":1},{"declaration":264,"isOffset":false,"isSlot":false,"src":"23094:2:1","valueSize":1},{"declaration":267,"isOffset":false,"isSlot":false,"src":"21440:2:1","valueSize":1},{"declaration":267,"isOffset":false,"isSlot":false,"src":"23131:2:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21032:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21063:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21119:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21132:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21187:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21218:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21302:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21333:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21708:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21721:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21816:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21825:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"21838:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"22781:5:1","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"22812:5:1","valueSize":1},{"declaration":279,"isOffset":false,"isSlot":false,"src":"21807:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"22430:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"24284:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"25004:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"25736:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"26485:7:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"21935:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22002:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22058:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22114:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22186:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22194:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22212:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22216:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22220:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22290:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22348:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22419:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22443:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22447:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22513:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22521:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22525:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22593:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22601:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"22912:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"23881:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"23888:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"23947:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"23955:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"23962:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24296:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24371:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24435:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24504:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24567:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24634:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24642:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24706:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24776:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24840:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24910:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"24993:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25017:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25021:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25100:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25107:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25111:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25187:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25191:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25357:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25415:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25531:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25582:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25646:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25708:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25716:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25725:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25750:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25754:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25816:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25824:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25832:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25851:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"25855:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"26531:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"26723:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"26774:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"26817:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"26862:1:1","valueSize":1},{"declaration":1090,"isOffset":false,"isSlot":false,"src":"21070:8:1","valueSize":1},{"declaration":1090,"isOffset":false,"isSlot":false,"src":"21225:8:1","valueSize":1},{"declaration":1090,"isOffset":false,"isSlot":false,"src":"21340:8:1","valueSize":1},{"declaration":1090,"isOffset":false,"isSlot":false,"src":"22819:8:1","valueSize":1},{"declaration":1092,"isOffset":false,"isSlot":false,"src":"21039:8:1","valueSize":1},{"declaration":1092,"isOffset":false,"isSlot":false,"src":"21194:8:1","valueSize":1},{"declaration":1092,"isOffset":false,"isSlot":false,"src":"21309:8:1","valueSize":1},{"declaration":1092,"isOffset":false,"isSlot":false,"src":"22788:8:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"21277:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"21378:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"21483:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"21588:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"21747:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"22189:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"22208:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"22327:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"22344:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"23492:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"23598:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"23943:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"24563:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"24637:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"24889:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"24906:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"25510:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"25523:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"26749:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"26761:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"26799:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"26811:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"26814:2:1","valueSize":1},{"declaration":1100,"isOffset":false,"isSlot":false,"src":"26858:2:1","valueSize":1},{"declaration":1103,"isOffset":false,"isSlot":false,"src":"21771:3:1","valueSize":1},{"declaration":1103,"isOffset":false,"isSlot":false,"src":"22267:3:1","valueSize":1},{"declaration":1103,"isOffset":false,"isSlot":false,"src":"22285:3:1","valueSize":1},{"declaration":1103,"isOffset":false,"isSlot":false,"src":"23634:3:1","valueSize":1},{"declaration":1103,"isOffset":false,"isSlot":false,"src":"23876:3:1","valueSize":1},{"declaration":1103,"isOffset":false,"isSlot":false,"src":"24816:3:1","valueSize":1},{"declaration":1103,"isOffset":false,"isSlot":false,"src":"24835:3:1","valueSize":1},{"declaration":1103,"isOffset":false,"isSlot":false,"src":"25558:3:1","valueSize":1},{"declaration":1103,"isOffset":false,"isSlot":false,"src":"25572:3:1","valueSize":1},{"declaration":1103,"isOffset":false,"isSlot":false,"src":"25979:3:1","valueSize":1}],"id":1150,"nodeType":"InlineAssembly","src":"20970:5915:1"}]},{"expression":{"components":[{"id":1152,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1095,"src":"26944:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1153,"name":"Y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1097,"src":"26946:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1154,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26943:5:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":1098,"id":1155,"nodeType":"Return","src":"26936:12:1"}]},"documentation":{"id":1084,"nodeType":"StructuredDocumentation","src":"20252:179:1","text":" @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\n Returns affine representation of point (normalized) \n "},"id":1157,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_mulmuladd","nameLocation":"20445:14:1","nodeType":"FunctionDefinition","parameters":{"id":1093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1086,"mutability":"mutable","name":"Q0","nameLocation":"20477:2:1","nodeType":"VariableDeclaration","scope":1157,"src":"20469:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1085,"name":"uint256","nodeType":"ElementaryTypeName","src":"20469:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1088,"mutability":"mutable","name":"Q1","nameLocation":"20497:2:1","nodeType":"VariableDeclaration","scope":1157,"src":"20489:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1087,"name":"uint256","nodeType":"ElementaryTypeName","src":"20489:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1090,"mutability":"mutable","name":"scalar_u","nameLocation":"20548:8:1","nodeType":"VariableDeclaration","scope":1157,"src":"20540:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1089,"name":"uint256","nodeType":"ElementaryTypeName","src":"20540:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1092,"mutability":"mutable","name":"scalar_v","nameLocation":"20574:8:1","nodeType":"VariableDeclaration","scope":1157,"src":"20566:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1091,"name":"uint256","nodeType":"ElementaryTypeName","src":"20566:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20459:129:1"},"returnParameters":{"id":1098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1095,"mutability":"mutable","name":"X","nameLocation":"20620:1:1","nodeType":"VariableDeclaration","scope":1157,"src":"20612:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1094,"name":"uint256","nodeType":"ElementaryTypeName","src":"20612:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1097,"mutability":"mutable","name":"Y","nameLocation":"20631:1:1","nodeType":"VariableDeclaration","scope":1157,"src":"20623:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1096,"name":"uint256","nodeType":"ElementaryTypeName","src":"20623:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20611:22:1"},"scope":1886,"src":"20436:6519:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1300,"nodeType":"Block","src":"27452:6599:1","statements":[{"id":1299,"nodeType":"UncheckedBlock","src":"27462:6567:1","statements":[{"assignments":[1169],"declarations":[{"constant":false,"id":1169,"mutability":"mutable","name":"zz","nameLocation":"27494:2:1","nodeType":"VariableDeclaration","scope":1299,"src":"27486:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1168,"name":"uint256","nodeType":"ElementaryTypeName","src":"27486:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1170,"nodeType":"VariableDeclarationStatement","src":"27486:10:1"},{"assignments":[1176],"declarations":[{"constant":false,"id":1176,"mutability":"mutable","name":"T","nameLocation":"27568:1:1","nodeType":"VariableDeclaration","scope":1299,"src":"27550:19:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6]"},"typeName":{"baseType":{"id":1174,"name":"uint256","nodeType":"ElementaryTypeName","src":"27550:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1175,"length":{"hexValue":"36","id":1173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27558:1:1","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"ArrayTypeName","src":"27550:10:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_storage_ptr","typeString":"uint256[6]"}},"visibility":"internal"}],"id":1177,"nodeType":"VariableDeclarationStatement","src":"27550:19:1"},{"expression":{"id":1180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1178,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1169,"src":"27583:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"323536","id":1179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27588:3:1","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"src":"27583:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1181,"nodeType":"ExpressionStatement","src":"27583:8:1"},{"body":{"id":1296,"nodeType":"Block","src":"27638:552:1","statements":[{"expression":{"id":1191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1187,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1169,"src":"27656:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1188,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1169,"src":"27661:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":1189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27666:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27661:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27656:11:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1192,"nodeType":"ExpressionStatement","src":"27656:11:1"},{"expression":{"id":1294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1193,"name":"T","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1176,"src":"27735:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6] memory"}},"id":1195,"indexExpression":{"hexValue":"30","id":1194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27737:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27735:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3634","id":1196,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27742:2:1","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"313238","id":1197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27793:3:1","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1198,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1161,"src":"27801:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":1199,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1169,"src":"27813:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27801:14:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1201,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27800:16:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27819:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27800:20:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1204,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27799:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27793:28:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3634","id":1206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27824:2:1","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1207,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1161,"src":"27831:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1208,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1169,"src":"27844:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3634","id":1209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27849:2:1","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"27844:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1211,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27843:9:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27831:21:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1213,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27830:23:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27856:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27830:27:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1216,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27829:29:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27824:34:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27793:65:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3332","id":1219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27889:2:1","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1220,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1161,"src":"27896:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1221,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1169,"src":"27909:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313238","id":1222,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27914:3:1","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"27909:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1224,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27908:10:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27896:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1226,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27895:24:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27922:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27895:28:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1229,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27894:30:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27889:35:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27793:131:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3136","id":1232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27927:2:1","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1233,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1161,"src":"27934:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1234,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1169,"src":"27947:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313932","id":1235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27952:3:1","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},"src":"27947:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1237,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27946:10:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27934:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1239,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27933:24:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27960:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27933:28:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1242,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27932:30:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27927:35:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27793:169:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":1245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27993:1:1","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1246,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1159,"src":"27999:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":1247,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1169,"src":"28011:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27999:14:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1249,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27998:16:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28017:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27998:20:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1252,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27997:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27993:26:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27793:226:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":1255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28022:1:1","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1256,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1159,"src":"28028:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1257,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1169,"src":"28041:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3634","id":1258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28046:2:1","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"28041:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1260,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28040:9:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28028:21:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1262,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28027:23:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28053:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28027:27:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1265,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28026:29:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28022:33:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27793:262:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28086:1:1","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1269,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1159,"src":"28092:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1270,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1169,"src":"28105:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313238","id":1271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28110:3:1","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"28105:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1273,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28104:10:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28092:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1275,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28091:24:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28118:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28091:28:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1278,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28090:30:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28086:34:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27793:327:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1281,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1159,"src":"28125:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1282,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1169,"src":"28138:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313932","id":1283,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28143:3:1","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},"src":"28138:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1285,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28137:10:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28125:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1287,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28124:24:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28151:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28124:28:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1290,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28123:30:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27793:360:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1292,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27767:408:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27742:433:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27735:440:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1295,"nodeType":"ExpressionStatement","src":"27735:440:1"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":1182,"name":"T","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1176,"src":"27627:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6] memory"}},"id":1184,"indexExpression":{"hexValue":"30","id":1183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27629:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27627:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27635:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27627:9:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1297,"nodeType":"WhileStatement","src":"27620:570:1"},{"AST":{"nodeType":"YulBlock","src":"28212:5807:1","statements":[{"expression":{"arguments":[{"name":"dataPointer","nodeType":"YulIdentifier","src":"28242:11:1"},{"name":"T","nodeType":"YulIdentifier","src":"28255:1:1"},{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"28264:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28258:5:1"},"nodeType":"YulFunctionCall","src":"28258:8:1"},{"kind":"number","nodeType":"YulLiteral","src":"28268:2:1","type":"","value":"64"}],"functionName":{"name":"extcodecopy","nodeType":"YulIdentifier","src":"28230:11:1"},"nodeType":"YulFunctionCall","src":"28230:41:1"},"nodeType":"YulExpressionStatement","src":"28230:41:1"},{"nodeType":"YulVariableDeclaration","src":"28288:23:1","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"28305:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"28309:1:1","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28301:3:1"},"nodeType":"YulFunctionCall","src":"28301:10:1"},"variables":[{"name":"index","nodeType":"YulTypedName","src":"28292:5:1","type":""}]},{"nodeType":"YulAssignment","src":"28328:13:1","value":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"28339:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28333:5:1"},"nodeType":"YulFunctionCall","src":"28333:8:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"28328:1:1"}]},{"nodeType":"YulVariableDeclaration","src":"28358:26:1","value":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"28377:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"28380:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28373:3:1"},"nodeType":"YulFunctionCall","src":"28373:10:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28367:5:1"},"nodeType":"YulFunctionCall","src":"28367:17:1"},"variables":[{"name":"Y","nodeType":"YulTypedName","src":"28362:1:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"28401:12:1","value":{"kind":"number","nodeType":"YulLiteral","src":"28412:1:1","type":"","value":"1"},"variables":[{"name":"zzz","nodeType":"YulTypedName","src":"28405:3:1","type":""}]},{"nodeType":"YulAssignment","src":"28430:7:1","value":{"kind":"number","nodeType":"YulLiteral","src":"28436:1:1","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"28430:2:1"}]},{"body":{"nodeType":"YulBlock","src":"28585:4589:1","statements":[{"nodeType":"YulBlock","src":"28643:1095:1","statements":[{"nodeType":"YulVariableDeclaration","src":"28669:26:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28687:1:1","type":"","value":"2"},{"name":"Y","nodeType":"YulIdentifier","src":"28690:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"28693:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"28680:6:1"},"nodeType":"YulFunctionCall","src":"28680:15:1"},"variables":[{"name":"TT1","nodeType":"YulTypedName","src":"28673:3:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"28739:29:1","value":{"arguments":[{"name":"TT1","nodeType":"YulIdentifier","src":"28756:3:1"},{"name":"TT1","nodeType":"YulIdentifier","src":"28761:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"28766:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"28749:6:1"},"nodeType":"YulFunctionCall","src":"28749:19:1"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"28743:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"28802:26:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"28819:1:1"},{"name":"T2","nodeType":"YulIdentifier","src":"28822:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"28826:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"28812:6:1"},"nodeType":"YulFunctionCall","src":"28812:16:1"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"28806:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"28865:28:1","value":{"arguments":[{"name":"TT1","nodeType":"YulIdentifier","src":"28882:3:1"},{"name":"T2","nodeType":"YulIdentifier","src":"28887:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"28891:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"28875:6:1"},"nodeType":"YulFunctionCall","src":"28875:18:1"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"28869:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"28926:77:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28943:1:1","type":"","value":"3"},{"arguments":[{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"28960:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"28967:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"28970:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28963:3:1"},"nodeType":"YulFunctionCall","src":"28963:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"28975:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"28953:6:1"},"nodeType":"YulFunctionCall","src":"28953:24:1"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"28986:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"28989:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"28993:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"28979:6:1"},"nodeType":"YulFunctionCall","src":"28979:16:1"},{"name":"p","nodeType":"YulIdentifier","src":"28997:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"28946:6:1"},"nodeType":"YulFunctionCall","src":"28946:53:1"},{"name":"p","nodeType":"YulIdentifier","src":"29001:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"28936:6:1"},"nodeType":"YulFunctionCall","src":"28936:67:1"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"28930:2:1","type":""}]},{"nodeType":"YulAssignment","src":"29052:25:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"29066:2:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"29070:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"29075:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29059:6:1"},"nodeType":"YulFunctionCall","src":"29059:18:1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"29052:3:1"}]},{"nodeType":"YulAssignment","src":"29116:23:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"29129:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"29133:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"29137:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29122:6:1"},"nodeType":"YulFunctionCall","src":"29122:17:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"29116:2:1"}]},{"nodeType":"YulAssignment","src":"29185:57:1","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"29204:2:1"},{"name":"T4","nodeType":"YulIdentifier","src":"29208:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"29212:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29197:6:1"},"nodeType":"YulFunctionCall","src":"29197:17:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"29223:7:1"},{"name":"T3","nodeType":"YulIdentifier","src":"29232:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"29236:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29216:6:1"},"nodeType":"YulFunctionCall","src":"29216:22:1"},{"name":"p","nodeType":"YulIdentifier","src":"29240:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"29190:6:1"},"nodeType":"YulFunctionCall","src":"29190:52:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"29185:1:1"}]},{"nodeType":"YulVariableDeclaration","src":"29355:49:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"29372:2:1"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"29383:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"29390:1:1"},{"name":"T3","nodeType":"YulIdentifier","src":"29393:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29386:3:1"},"nodeType":"YulFunctionCall","src":"29386:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"29398:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"29376:6:1"},"nodeType":"YulFunctionCall","src":"29376:24:1"},{"name":"p","nodeType":"YulIdentifier","src":"29402:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29365:6:1"},"nodeType":"YulFunctionCall","src":"29365:39:1"},"variables":[{"name":"T5","nodeType":"YulTypedName","src":"29359:2:1","type":""}]},{"nodeType":"YulAssignment","src":"29538:36:1","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"29557:2:1"},{"name":"Y","nodeType":"YulIdentifier","src":"29561:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"29564:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"29550:6:1"},"nodeType":"YulFunctionCall","src":"29550:16:1"},{"name":"T5","nodeType":"YulIdentifier","src":"29568:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"29572:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"29543:6:1"},"nodeType":"YulFunctionCall","src":"29543:31:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"29538:1:1"}]}]},{"nodeType":"YulBlock","src":"29759:1058:1","statements":[{"nodeType":"YulVariableDeclaration","src":"29785:90:1","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29803:2:1","type":"","value":"13"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"29815:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"29822:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"29811:3:1"},"nodeType":"YulFunctionCall","src":"29811:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"29833:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29807:3:1"},"nodeType":"YulFunctionCall","src":"29807:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29799:3:1"},"nodeType":"YulFunctionCall","src":"29799:37:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29842:1:1","type":"","value":"9"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"29853:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"29860:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"29849:3:1"},"nodeType":"YulFunctionCall","src":"29849:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"29871:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29845:3:1"},"nodeType":"YulFunctionCall","src":"29845:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29838:3:1"},"nodeType":"YulFunctionCall","src":"29838:36:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29795:3:1"},"nodeType":"YulFunctionCall","src":"29795:80:1"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"29789:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"29900:28:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"29918:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"29925:2:1","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29914:3:1"},"nodeType":"YulFunctionCall","src":"29914:14:1"},"variables":[{"name":"index2","nodeType":"YulTypedName","src":"29904:6:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"29953:129:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"29995:2:1"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30007:2:1","type":"","value":"12"},{"arguments":[{"arguments":[{"name":"index2","nodeType":"YulIdentifier","src":"30019:6:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"30027:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30015:3:1"},"nodeType":"YulFunctionCall","src":"30015:21:1"},{"kind":"number","nodeType":"YulLiteral","src":"30038:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30011:3:1"},"nodeType":"YulFunctionCall","src":"30011:29:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30003:3:1"},"nodeType":"YulFunctionCall","src":"30003:38:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30047:1:1","type":"","value":"8"},{"arguments":[{"arguments":[{"name":"index2","nodeType":"YulIdentifier","src":"30058:6:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"30066:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30054:3:1"},"nodeType":"YulFunctionCall","src":"30054:21:1"},{"kind":"number","nodeType":"YulLiteral","src":"30077:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30050:3:1"},"nodeType":"YulFunctionCall","src":"30050:29:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30043:3:1"},"nodeType":"YulFunctionCall","src":"30043:37:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29999:3:1"},"nodeType":"YulFunctionCall","src":"29999:82:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29991:3:1"},"nodeType":"YulFunctionCall","src":"29991:91:1"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"29957:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"30107:29:1","value":{"arguments":[{"name":"index2","nodeType":"YulIdentifier","src":"30125:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"30133:2:1","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30121:3:1"},"nodeType":"YulFunctionCall","src":"30121:15:1"},"variables":[{"name":"index3","nodeType":"YulTypedName","src":"30111:6:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"30161:129:1","value":{"arguments":[{"name":"T3","nodeType":"YulIdentifier","src":"30203:2:1"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30215:2:1","type":"","value":"11"},{"arguments":[{"arguments":[{"name":"index3","nodeType":"YulIdentifier","src":"30227:6:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"30235:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30223:3:1"},"nodeType":"YulFunctionCall","src":"30223:21:1"},{"kind":"number","nodeType":"YulLiteral","src":"30246:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30219:3:1"},"nodeType":"YulFunctionCall","src":"30219:29:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30211:3:1"},"nodeType":"YulFunctionCall","src":"30211:38:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30255:1:1","type":"","value":"7"},{"arguments":[{"arguments":[{"name":"index3","nodeType":"YulIdentifier","src":"30266:6:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"30274:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30262:3:1"},"nodeType":"YulFunctionCall","src":"30262:21:1"},{"kind":"number","nodeType":"YulLiteral","src":"30285:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30258:3:1"},"nodeType":"YulFunctionCall","src":"30258:29:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30251:3:1"},"nodeType":"YulFunctionCall","src":"30251:37:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30207:3:1"},"nodeType":"YulFunctionCall","src":"30207:82:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30199:3:1"},"nodeType":"YulFunctionCall","src":"30199:91:1"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"30165:2:1","type":""}]},{"nodeType":"YulAssignment","src":"30315:24:1","value":{"arguments":[{"name":"index3","nodeType":"YulIdentifier","src":"30328:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"30336:2:1","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30324:3:1"},"nodeType":"YulFunctionCall","src":"30324:15:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"30315:5:1"}]},{"nodeType":"YulVariableDeclaration","src":"30364:127:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"30406:2:1"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30418:2:1","type":"","value":"10"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"30430:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"30437:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30426:3:1"},"nodeType":"YulFunctionCall","src":"30426:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"30448:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30422:3:1"},"nodeType":"YulFunctionCall","src":"30422:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30414:3:1"},"nodeType":"YulFunctionCall","src":"30414:37:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30457:1:1","type":"","value":"6"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"30468:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"30475:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"30464:3:1"},"nodeType":"YulFunctionCall","src":"30464:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"30486:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30460:3:1"},"nodeType":"YulFunctionCall","src":"30460:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30453:3:1"},"nodeType":"YulFunctionCall","src":"30453:36:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30410:3:1"},"nodeType":"YulFunctionCall","src":"30410:80:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30402:3:1"},"nodeType":"YulFunctionCall","src":"30402:89:1"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"30368:2:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"30627:108:1","statements":[{"nodeType":"YulAssignment","src":"30657:14:1","value":{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"30666:1:1"},{"name":"Y","nodeType":"YulIdentifier","src":"30669:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30662:3:1"},"nodeType":"YulFunctionCall","src":"30662:9:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"30657:1:1"}]},{"nodeType":"YulContinue","src":"30701:8:1"}]},"condition":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"30623:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"30616:6:1"},"nodeType":"YulFunctionCall","src":"30616:10:1"},"nodeType":"YulIf","src":"30613:122:1"},{"expression":{"arguments":[{"name":"dataPointer","nodeType":"YulIdentifier","src":"30772:11:1"},{"name":"T","nodeType":"YulIdentifier","src":"30785:1:1"},{"name":"T1","nodeType":"YulIdentifier","src":"30788:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"30792:2:1","type":"","value":"64"}],"functionName":{"name":"extcodecopy","nodeType":"YulIdentifier","src":"30760:11:1"},"nodeType":"YulFunctionCall","src":"30760:35:1"},"nodeType":"YulExpressionStatement","src":"30760:35:1"}]},{"nodeType":"YulBlock","src":"30839:2317:1","statements":[{"body":{"nodeType":"YulBlock","src":"31006:231:1","statements":[{"nodeType":"YulAssignment","src":"31036:13:1","value":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"31047:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31041:5:1"},"nodeType":"YulFunctionCall","src":"31041:8:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"31036:1:1"}]},{"nodeType":"YulAssignment","src":"31078:22:1","value":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"31093:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"31096:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31089:3:1"},"nodeType":"YulFunctionCall","src":"31089:10:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31083:5:1"},"nodeType":"YulFunctionCall","src":"31083:17:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"31078:1:1"}]},{"nodeType":"YulAssignment","src":"31129:7:1","value":{"kind":"number","nodeType":"YulLiteral","src":"31135:1:1","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"31129:2:1"}]},{"nodeType":"YulAssignment","src":"31165:8:1","value":{"kind":"number","nodeType":"YulLiteral","src":"31172:1:1","type":"","value":"1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"31165:3:1"}]},{"nodeType":"YulContinue","src":"31203:8:1"}]},"condition":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"31002:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"30995:6:1"},"nodeType":"YulFunctionCall","src":"30995:10:1"},"nodeType":"YulIf","src":"30992:245:1"},{"nodeType":"YulVariableDeclaration","src":"31263:57:1","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"31297:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"31300:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31293:3:1"},"nodeType":"YulFunctionCall","src":"31293:10:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31287:5:1"},"nodeType":"YulFunctionCall","src":"31287:17:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"31306:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"31311:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31280:6:1"},"nodeType":"YulFunctionCall","src":"31280:33:1"},{"name":"Y","nodeType":"YulIdentifier","src":"31315:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"31318:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"31273:6:1"},"nodeType":"YulFunctionCall","src":"31273:47:1"},"variables":[{"name":"y2","nodeType":"YulTypedName","src":"31267:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31345:55:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"31375:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31369:5:1"},"nodeType":"YulFunctionCall","src":"31369:8:1"},{"name":"zz","nodeType":"YulIdentifier","src":"31379:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"31383:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31362:6:1"},"nodeType":"YulFunctionCall","src":"31362:23:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"31391:1:1"},{"name":"X","nodeType":"YulIdentifier","src":"31394:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31387:3:1"},"nodeType":"YulFunctionCall","src":"31387:9:1"},{"name":"p","nodeType":"YulIdentifier","src":"31398:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"31355:6:1"},"nodeType":"YulFunctionCall","src":"31355:45:1"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"31349:2:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"31496:1129:1","statements":[{"body":{"nodeType":"YulBlock","src":"31540:1059:1","statements":[{"nodeType":"YulVariableDeclaration","src":"31574:31:1","value":{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"31591:7:1"},{"name":"Y","nodeType":"YulIdentifier","src":"31600:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"31603:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31584:6:1"},"nodeType":"YulFunctionCall","src":"31584:21:1"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"31578:2:1","type":""}]},{"nodeType":"YulAssignment","src":"31657:23:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"31670:2:1"},{"name":"T1","nodeType":"YulIdentifier","src":"31674:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"31678:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31663:6:1"},"nodeType":"YulFunctionCall","src":"31663:17:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"31657:2:1"}]},{"nodeType":"YulVariableDeclaration","src":"31722:26:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"31739:1:1"},{"name":"T2","nodeType":"YulIdentifier","src":"31742:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"31746:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31732:6:1"},"nodeType":"YulFunctionCall","src":"31732:16:1"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"31726:2:1","type":""}]},{"nodeType":"YulAssignment","src":"31794:23:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"31807:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"31811:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"31815:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"31800:6:1"},"nodeType":"YulFunctionCall","src":"31800:17:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"31794:2:1"}]},{"nodeType":"YulAssignment","src":"31858:22:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"31871:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"31874:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"31878:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"31864:6:1"},"nodeType":"YulFunctionCall","src":"31864:16:1"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"31858:2:1"}]},{"nodeType":"YulVariableDeclaration","src":"31920:35:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"31938:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"31945:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"31948:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31941:3:1"},"nodeType":"YulFunctionCall","src":"31941:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"31953:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"31931:6:1"},"nodeType":"YulFunctionCall","src":"31931:24:1"},"variables":[{"name":"TT1","nodeType":"YulTypedName","src":"31924:3:1","type":""}]},{"nodeType":"YulAssignment","src":"31995:24:1","value":{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"32008:2:1"},{"name":"TT1","nodeType":"YulIdentifier","src":"32012:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"32017:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32001:6:1"},"nodeType":"YulFunctionCall","src":"32001:18:1"},"variableNames":[{"name":"y2","nodeType":"YulIdentifier","src":"31995:2:1"}]},{"nodeType":"YulVariableDeclaration","src":"32067:26:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32084:1:1","type":"","value":"3"},{"name":"y2","nodeType":"YulIdentifier","src":"32087:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"32091:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32077:6:1"},"nodeType":"YulFunctionCall","src":"32077:16:1"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"32071:2:1","type":""}]},{"nodeType":"YulAssignment","src":"32131:26:1","value":{"arguments":[{"name":"TT1","nodeType":"YulIdentifier","src":"32145:3:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"32150:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"32155:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32138:6:1"},"nodeType":"YulFunctionCall","src":"32138:19:1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"32131:3:1"}]},{"nodeType":"YulAssignment","src":"32204:23:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"32217:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"32221:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"32225:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32210:6:1"},"nodeType":"YulFunctionCall","src":"32210:17:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"32204:2:1"}]},{"nodeType":"YulAssignment","src":"32281:57:1","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"32300:2:1"},{"name":"T4","nodeType":"YulIdentifier","src":"32304:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"32308:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32293:6:1"},"nodeType":"YulFunctionCall","src":"32293:17:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"32319:7:1"},{"name":"T3","nodeType":"YulIdentifier","src":"32328:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"32332:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32312:6:1"},"nodeType":"YulFunctionCall","src":"32312:22:1"},{"name":"p","nodeType":"YulIdentifier","src":"32336:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"32286:6:1"},"nodeType":"YulFunctionCall","src":"32286:52:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"32281:1:1"}]},{"nodeType":"YulAssignment","src":"32383:45:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"32396:2:1"},{"arguments":[{"name":"T3","nodeType":"YulIdentifier","src":"32407:2:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"32415:1:1"},{"name":"X","nodeType":"YulIdentifier","src":"32418:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32411:3:1"},"nodeType":"YulFunctionCall","src":"32411:9:1"},{"name":"p","nodeType":"YulIdentifier","src":"32422:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"32400:6:1"},"nodeType":"YulFunctionCall","src":"32400:24:1"},{"name":"p","nodeType":"YulIdentifier","src":"32426:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32389:6:1"},"nodeType":"YulFunctionCall","src":"32389:39:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"32383:2:1"}]},{"nodeType":"YulAssignment","src":"32472:36:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"32484:2:1"},{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"32495:2:1"},{"name":"Y","nodeType":"YulIdentifier","src":"32499:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"32502:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32488:6:1"},"nodeType":"YulFunctionCall","src":"32488:16:1"},{"name":"p","nodeType":"YulIdentifier","src":"32506:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"32477:6:1"},"nodeType":"YulFunctionCall","src":"32477:31:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"32472:1:1"}]},{"nodeType":"YulContinue","src":"32561:8:1"}]},"condition":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"31536:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31529:6:1"},"nodeType":"YulFunctionCall","src":"31529:10:1"},"nodeType":"YulIf","src":"31526:1073:1"}]},"condition":{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"31492:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31485:6:1"},"nodeType":"YulFunctionCall","src":"31485:10:1"},"nodeType":"YulIf","src":"31482:1143:1"},{"nodeType":"YulVariableDeclaration","src":"32651:27:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"32668:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"32672:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"32676:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32661:6:1"},"nodeType":"YulFunctionCall","src":"32661:17:1"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"32655:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"32703:27:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"32720:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"32724:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"32728:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32713:6:1"},"nodeType":"YulFunctionCall","src":"32713:17:1"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"32707:2:1","type":""}]},{"nodeType":"YulAssignment","src":"32758:23:1","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"32771:2:1"},{"name":"T4","nodeType":"YulIdentifier","src":"32775:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"32779:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32764:6:1"},"nodeType":"YulFunctionCall","src":"32764:17:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"32758:2:1"}]},{"nodeType":"YulAssignment","src":"32843:25:1","value":{"arguments":[{"name":"zzz","nodeType":"YulIdentifier","src":"32857:3:1"},{"name":"T1","nodeType":"YulIdentifier","src":"32862:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"32866:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32850:6:1"},"nodeType":"YulFunctionCall","src":"32850:18:1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"32843:3:1"}]},{"nodeType":"YulVariableDeclaration","src":"32902:27:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"32920:1:1"},{"name":"T4","nodeType":"YulIdentifier","src":"32923:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"32927:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32913:6:1"},"nodeType":"YulFunctionCall","src":"32913:16:1"},"variables":[{"name":"zz1","nodeType":"YulTypedName","src":"32906:3:1","type":""}]},{"nodeType":"YulAssignment","src":"32954:81:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"32980:2:1"},{"name":"y2","nodeType":"YulIdentifier","src":"32984:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"32988:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"32973:6:1"},"nodeType":"YulFunctionCall","src":"32973:17:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"32996:1:1"},{"name":"T1","nodeType":"YulIdentifier","src":"32999:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32992:3:1"},"nodeType":"YulFunctionCall","src":"32992:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"33004:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"32966:6:1"},"nodeType":"YulFunctionCall","src":"32966:40:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"33015:7:1"},{"name":"zz1","nodeType":"YulIdentifier","src":"33024:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"33029:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"33008:6:1"},"nodeType":"YulFunctionCall","src":"33008:23:1"},{"name":"p","nodeType":"YulIdentifier","src":"33033:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"32959:6:1"},"nodeType":"YulFunctionCall","src":"32959:76:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"32954:1:1"}]},{"nodeType":"YulAssignment","src":"33060:74:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"zz1","nodeType":"YulIdentifier","src":"33086:3:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"33095:1:1"},{"name":"X","nodeType":"YulIdentifier","src":"33098:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"33091:3:1"},"nodeType":"YulFunctionCall","src":"33091:9:1"},{"name":"p","nodeType":"YulIdentifier","src":"33102:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"33079:6:1"},"nodeType":"YulFunctionCall","src":"33079:25:1"},{"name":"y2","nodeType":"YulIdentifier","src":"33106:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"33110:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"33072:6:1"},"nodeType":"YulFunctionCall","src":"33072:40:1"},{"arguments":[{"name":"Y","nodeType":"YulIdentifier","src":"33121:1:1"},{"name":"T1","nodeType":"YulIdentifier","src":"33124:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"33128:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"33114:6:1"},"nodeType":"YulFunctionCall","src":"33114:16:1"},{"name":"p","nodeType":"YulIdentifier","src":"33132:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"33065:6:1"},"nodeType":"YulFunctionCall","src":"33065:69:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"33060:1:1"}]}]}]},"condition":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"28544:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"28551:3:1","type":"","value":"191"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"28541:2:1"},"nodeType":"YulFunctionCall","src":"28541:14:1"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"28556:28:1","statements":[{"nodeType":"YulAssignment","src":"28558:24:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"28571:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"28578:3:1","type":"","value":"191"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28567:3:1"},"nodeType":"YulFunctionCall","src":"28567:15:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"28558:5:1"}]}]},"pre":{"nodeType":"YulBlock","src":"28538:2:1","statements":[]},"src":"28534:4640:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33213:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"33216:4:1","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33209:3:1"},"nodeType":"YulFunctionCall","src":"33209:12:1"},{"name":"zz","nodeType":"YulIdentifier","src":"33223:2:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33202:6:1"},"nodeType":"YulFunctionCall","src":"33202:24:1"},"nodeType":"YulExpressionStatement","src":"33202:24:1"},{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33486:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"33489:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33479:6:1"},"nodeType":"YulFunctionCall","src":"33479:15:1"},"nodeType":"YulExpressionStatement","src":"33479:15:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33522:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"33525:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33518:3:1"},"nodeType":"YulFunctionCall","src":"33518:12:1"},{"kind":"number","nodeType":"YulLiteral","src":"33532:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33511:6:1"},"nodeType":"YulFunctionCall","src":"33511:26:1"},"nodeType":"YulExpressionStatement","src":"33511:26:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33565:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"33568:4:1","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33561:3:1"},"nodeType":"YulFunctionCall","src":"33561:12:1"},{"kind":"number","nodeType":"YulLiteral","src":"33575:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33554:6:1"},"nodeType":"YulFunctionCall","src":"33554:26:1"},"nodeType":"YulExpressionStatement","src":"33554:26:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33719:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"33722:4:1","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33715:3:1"},"nodeType":"YulFunctionCall","src":"33715:12:1"},{"name":"minus_2","nodeType":"YulIdentifier","src":"33729:7:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33708:6:1"},"nodeType":"YulFunctionCall","src":"33708:29:1"},"nodeType":"YulExpressionStatement","src":"33708:29:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33765:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"33768:4:1","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33761:3:1"},"nodeType":"YulFunctionCall","src":"33761:12:1"},{"name":"p","nodeType":"YulIdentifier","src":"33775:1:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33754:6:1"},"nodeType":"YulFunctionCall","src":"33754:23:1"},"nodeType":"YulExpressionStatement","src":"33754:23:1"},{"body":{"nodeType":"YulBlock","src":"33912:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"33921:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"33924:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"33914:6:1"},"nodeType":"YulFunctionCall","src":"33914:12:1"},"nodeType":"YulExpressionStatement","src":"33914:12:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"33883:1:1","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"33879:3:1"},"nodeType":"YulFunctionCall","src":"33879:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"33887:4:1","type":"","value":"0x05"},{"name":"T","nodeType":"YulIdentifier","src":"33893:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"33896:4:1","type":"","value":"0xc0"},{"name":"T","nodeType":"YulIdentifier","src":"33902:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"33905:4:1","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"33868:10:1"},"nodeType":"YulFunctionCall","src":"33868:42:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"33861:6:1"},"nodeType":"YulFunctionCall","src":"33861:50:1"},"nodeType":"YulIf","src":"33858:70:1"},{"nodeType":"YulAssignment","src":"33946:14:1","value":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"33958:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33952:5:1"},"nodeType":"YulFunctionCall","src":"33952:8:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"33946:2:1"}]},{"nodeType":"YulAssignment","src":"33977:21:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"33989:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"33992:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"33996:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"33982:6:1"},"nodeType":"YulFunctionCall","src":"33982:16:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"33977:1:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1176,"isOffset":false,"isSlot":false,"src":"28255:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"28264:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"28339:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"28377:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"30785:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"31047:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"31093:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"31297:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"31375:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"33213:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"33486:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"33522:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"33565:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"33719:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"33765:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"33893:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"33902:1:1","valueSize":1},{"declaration":1176,"isOffset":false,"isSlot":false,"src":"33958:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"28328:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"28819:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"28960:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"28986:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"29185:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"29383:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"31036:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"31394:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"31739:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"31871:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"31938:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"32281:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"32418:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"32920:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"32954:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"33098:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"33977:1:1","valueSize":1},{"declaration":1166,"isOffset":false,"isSlot":false,"src":"33989:1:1","valueSize":1},{"declaration":1163,"isOffset":false,"isSlot":false,"src":"28242:11:1","valueSize":1},{"declaration":1163,"isOffset":false,"isSlot":false,"src":"30772:11:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"29223:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"31591:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"32319:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"33015:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"33729:7:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"28693:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"28766:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"28826:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"28891:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"28967:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"28975:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"28993:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"28997:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"29001:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"29075:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"29137:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"29212:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"29236:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"29240:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"29390:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"29398:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"29402:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"29564:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"29572:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"30666:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31311:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31318:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31383:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31391:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31398:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31603:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31678:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31746:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31815:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31878:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31945:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"31953:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32017:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32091:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32155:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32225:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32308:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32332:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32336:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32415:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32422:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32426:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32502:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32506:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32676:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32728:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32779:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32866:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32927:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32988:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"32996:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"33004:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"33029:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"33033:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"33095:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"33102:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"33110:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"33128:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"33132:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"33775:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"33996:1:1","valueSize":1},{"declaration":1159,"isOffset":false,"isSlot":false,"src":"29860:8:1","valueSize":1},{"declaration":1159,"isOffset":false,"isSlot":false,"src":"30066:8:1","valueSize":1},{"declaration":1159,"isOffset":false,"isSlot":false,"src":"30274:8:1","valueSize":1},{"declaration":1159,"isOffset":false,"isSlot":false,"src":"30475:8:1","valueSize":1},{"declaration":1161,"isOffset":false,"isSlot":false,"src":"29822:8:1","valueSize":1},{"declaration":1161,"isOffset":false,"isSlot":false,"src":"30027:8:1","valueSize":1},{"declaration":1161,"isOffset":false,"isSlot":false,"src":"30235:8:1","valueSize":1},{"declaration":1161,"isOffset":false,"isSlot":false,"src":"30437:8:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"28305:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"28430:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"28970:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"28989:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"29116:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"29133:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"31002:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"31129:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"31379:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"31874:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"31948:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"32204:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"32221:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"32758:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"32771:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"33223:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"33946:2:1","valueSize":1},{"declaration":1169,"isOffset":false,"isSlot":false,"src":"33992:2:1","valueSize":1}],"id":1298,"nodeType":"InlineAssembly","src":"28203:5816:1"}]}]},"id":1301,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_mulmuladd_S8_extcode","nameLocation":"27301:25:1","nodeType":"FunctionDefinition","parameters":{"id":1164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1159,"mutability":"mutable","name":"scalar_u","nameLocation":"27335:8:1","nodeType":"VariableDeclaration","scope":1301,"src":"27327:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1158,"name":"uint256","nodeType":"ElementaryTypeName","src":"27327:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1161,"mutability":"mutable","name":"scalar_v","nameLocation":"27353:8:1","nodeType":"VariableDeclaration","scope":1301,"src":"27345:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1160,"name":"uint256","nodeType":"ElementaryTypeName","src":"27345:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1163,"mutability":"mutable","name":"dataPointer","nameLocation":"27371:11:1","nodeType":"VariableDeclaration","scope":1301,"src":"27363:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1162,"name":"address","nodeType":"ElementaryTypeName","src":"27363:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27326:57:1"},"returnParameters":{"id":1167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1166,"mutability":"mutable","name":"X","nameLocation":"27431:1:1","nodeType":"VariableDeclaration","scope":1301,"src":"27423:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1165,"name":"uint256","nodeType":"ElementaryTypeName","src":"27423:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27422:25:1"},"scope":1886,"src":"27292:6759:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1444,"nodeType":"Block","src":"34295:4828:1","statements":[{"assignments":[1313],"declarations":[{"constant":false,"id":1313,"mutability":"mutable","name":"zz","nameLocation":"34313:2:1","nodeType":"VariableDeclaration","scope":1444,"src":"34305:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1312,"name":"uint256","nodeType":"ElementaryTypeName","src":"34305:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1314,"nodeType":"VariableDeclarationStatement","src":"34305:10:1"},{"assignments":[1320],"declarations":[{"constant":false,"id":1320,"mutability":"mutable","name":"T","nameLocation":"34383:1:1","nodeType":"VariableDeclaration","scope":1444,"src":"34365:19:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6]"},"typeName":{"baseType":{"id":1318,"name":"uint256","nodeType":"ElementaryTypeName","src":"34365:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1319,"length":{"hexValue":"36","id":1317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34373:1:1","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"ArrayTypeName","src":"34365:10:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_storage_ptr","typeString":"uint256[6]"}},"visibility":"internal"}],"id":1321,"nodeType":"VariableDeclarationStatement","src":"34365:19:1"},{"expression":{"id":1324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1322,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"34394:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"323536","id":1323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34399:3:1","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"src":"34394:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1325,"nodeType":"ExpressionStatement","src":"34394:8:1"},{"id":1443,"nodeType":"UncheckedBlock","src":"34427:4674:1","statements":[{"body":{"id":1440,"nodeType":"Block","src":"34469:552:1","statements":[{"expression":{"id":1335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1331,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"34487:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1332,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"34492:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":1333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34497:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34492:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34487:11:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1336,"nodeType":"ExpressionStatement","src":"34487:11:1"},{"expression":{"id":1438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1337,"name":"T","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1320,"src":"34566:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6] memory"}},"id":1339,"indexExpression":{"hexValue":"30","id":1338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34568:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34566:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3634","id":1340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34573:2:1","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"313238","id":1341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34624:3:1","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1342,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1305,"src":"34632:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":1343,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"34644:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34632:14:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1345,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34631:16:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1346,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34650:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34631:20:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1348,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34630:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34624:28:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3634","id":1350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34655:2:1","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1351,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1305,"src":"34662:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1352,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"34675:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3634","id":1353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34680:2:1","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"34675:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1355,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34674:9:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34662:21:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1357,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34661:23:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34687:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34661:27:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1360,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34660:29:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34655:34:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34624:65:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3332","id":1363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34720:2:1","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1364,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1305,"src":"34727:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1365,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"34740:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313238","id":1366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34745:3:1","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"34740:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1368,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34739:10:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34727:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1370,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34726:24:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34753:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34726:28:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1373,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34725:30:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34720:35:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34624:131:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3136","id":1376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34758:2:1","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1377,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1305,"src":"34765:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1378,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"34778:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313932","id":1379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34783:3:1","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},"src":"34778:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1381,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34777:10:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34765:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1383,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34764:24:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34791:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34764:28:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1386,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34763:30:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34758:35:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34624:169:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":1389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34824:1:1","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1390,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1303,"src":"34830:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":1391,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"34842:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34830:14:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1393,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34829:16:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34848:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34829:20:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1396,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34828:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34824:26:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34624:226:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":1399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34853:1:1","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1400,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1303,"src":"34859:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1401,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"34872:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3634","id":1402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34877:2:1","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"34872:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1404,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34871:9:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34859:21:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1406,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34858:23:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34884:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34858:27:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1409,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34857:29:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34853:33:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34624:262:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34917:1:1","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1413,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1303,"src":"34923:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1414,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"34936:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313238","id":1415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34941:3:1","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"34936:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1417,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34935:10:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34923:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1419,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34922:24:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34949:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34922:28:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1422,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34921:30:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34917:34:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34624:327:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1425,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1303,"src":"34956:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1426,"name":"zz","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"34969:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"313932","id":1427,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34974:3:1","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},"src":"34969:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1429,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34968:10:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34956:22:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1431,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34955:24:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":1432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34982:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"34955:28:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1434,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34954:30:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34624:360:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1436,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34598:408:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34573:433:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34566:440:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1439,"nodeType":"ExpressionStatement","src":"34566:440:1"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":1326,"name":"T","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1320,"src":"34458:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6] memory"}},"id":1328,"indexExpression":{"hexValue":"30","id":1327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34460:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34458:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1329,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34466:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34458:9:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1441,"nodeType":"WhileStatement","src":"34451:570:1"},{"AST":{"nodeType":"YulBlock","src":"35043:4048:1","statements":[{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"35070:1:1"},{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"35083:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35077:5:1"},"nodeType":"YulFunctionCall","src":"35077:8:1"},{"name":"dataPointer","nodeType":"YulIdentifier","src":"35087:11:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35073:3:1"},"nodeType":"YulFunctionCall","src":"35073:26:1"},{"kind":"number","nodeType":"YulLiteral","src":"35101:2:1","type":"","value":"64"}],"functionName":{"name":"codecopy","nodeType":"YulIdentifier","src":"35061:8:1"},"nodeType":"YulFunctionCall","src":"35061:43:1"},"nodeType":"YulExpressionStatement","src":"35061:43:1"},{"nodeType":"YulAssignment","src":"35121:13:1","value":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"35132:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35126:5:1"},"nodeType":"YulFunctionCall","src":"35126:8:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"35121:1:1"}]},{"nodeType":"YulVariableDeclaration","src":"35151:26:1","value":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"35170:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"35173:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35166:3:1"},"nodeType":"YulFunctionCall","src":"35166:10:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35160:5:1"},"nodeType":"YulFunctionCall","src":"35160:17:1"},"variables":[{"name":"Y","nodeType":"YulTypedName","src":"35155:1:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"35194:12:1","value":{"kind":"number","nodeType":"YulLiteral","src":"35205:1:1","type":"","value":"1"},"variables":[{"name":"zzz","nodeType":"YulTypedName","src":"35198:3:1","type":""}]},{"nodeType":"YulAssignment","src":"35223:7:1","value":{"kind":"number","nodeType":"YulLiteral","src":"35229:1:1","type":"","value":"1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"35223:2:1"}]},{"body":{"nodeType":"YulBlock","src":"35396:2850:1","statements":[{"nodeType":"YulVariableDeclaration","src":"35418:25:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35435:1:1","type":"","value":"2"},{"name":"Y","nodeType":"YulIdentifier","src":"35438:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"35441:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35428:6:1"},"nodeType":"YulFunctionCall","src":"35428:15:1"},"variables":[{"name":"T1","nodeType":"YulTypedName","src":"35422:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"35483:27:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"35500:2:1"},{"name":"T1","nodeType":"YulIdentifier","src":"35504:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"35508:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35493:6:1"},"nodeType":"YulFunctionCall","src":"35493:17:1"},"variables":[{"name":"T2","nodeType":"YulTypedName","src":"35487:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"35540:26:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"35557:1:1"},{"name":"T2","nodeType":"YulIdentifier","src":"35560:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"35564:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35550:6:1"},"nodeType":"YulFunctionCall","src":"35550:16:1"},"variables":[{"name":"T3","nodeType":"YulTypedName","src":"35544:2:1","type":""}]},{"nodeType":"YulAssignment","src":"35599:23:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"35612:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"35616:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"35620:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35605:6:1"},"nodeType":"YulFunctionCall","src":"35605:17:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"35599:2:1"}]},{"nodeType":"YulVariableDeclaration","src":"35651:77:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35668:1:1","type":"","value":"3"},{"arguments":[{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"35685:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"35692:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"35695:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35688:3:1"},"nodeType":"YulFunctionCall","src":"35688:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"35700:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"35678:6:1"},"nodeType":"YulFunctionCall","src":"35678:24:1"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"35711:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"35714:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"35718:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"35704:6:1"},"nodeType":"YulFunctionCall","src":"35704:16:1"},{"name":"p","nodeType":"YulIdentifier","src":"35722:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35671:6:1"},"nodeType":"YulFunctionCall","src":"35671:53:1"},{"name":"p","nodeType":"YulIdentifier","src":"35726:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35661:6:1"},"nodeType":"YulFunctionCall","src":"35661:67:1"},"variables":[{"name":"T4","nodeType":"YulTypedName","src":"35655:2:1","type":""}]},{"nodeType":"YulAssignment","src":"35773:25:1","value":{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"35787:2:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"35791:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"35796:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35780:6:1"},"nodeType":"YulFunctionCall","src":"35780:18:1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"35773:3:1"}]},{"nodeType":"YulAssignment","src":"35833:23:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"35846:2:1"},{"name":"zz","nodeType":"YulIdentifier","src":"35850:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"35854:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35839:6:1"},"nodeType":"YulFunctionCall","src":"35839:17:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"35833:2:1"}]},{"nodeType":"YulAssignment","src":"35898:57:1","value":{"arguments":[{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"35917:2:1"},{"name":"T4","nodeType":"YulIdentifier","src":"35921:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"35925:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35910:6:1"},"nodeType":"YulFunctionCall","src":"35910:17:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"35936:7:1"},{"name":"T3","nodeType":"YulIdentifier","src":"35945:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"35949:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"35929:6:1"},"nodeType":"YulFunctionCall","src":"35929:22:1"},{"name":"p","nodeType":"YulIdentifier","src":"35953:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"35903:6:1"},"nodeType":"YulFunctionCall","src":"35903:52:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"35898:1:1"}]},{"nodeType":"YulAssignment","src":"36060:45:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"36073:2:1"},{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"36084:1:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"36091:1:1"},{"name":"T3","nodeType":"YulIdentifier","src":"36094:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"36087:3:1"},"nodeType":"YulFunctionCall","src":"36087:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"36099:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"36077:6:1"},"nodeType":"YulFunctionCall","src":"36077:24:1"},{"name":"p","nodeType":"YulIdentifier","src":"36103:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"36066:6:1"},"nodeType":"YulFunctionCall","src":"36066:39:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"36060:2:1"}]},{"nodeType":"YulAssignment","src":"36231:36:1","value":{"arguments":[{"arguments":[{"name":"T1","nodeType":"YulIdentifier","src":"36250:2:1"},{"name":"Y","nodeType":"YulIdentifier","src":"36254:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"36257:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"36243:6:1"},"nodeType":"YulFunctionCall","src":"36243:16:1"},{"name":"T2","nodeType":"YulIdentifier","src":"36261:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"36265:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"36236:6:1"},"nodeType":"YulFunctionCall","src":"36236:31:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"36231:1:1"}]},{"nodeType":"YulAssignment","src":"36426:86:1","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36440:2:1","type":"","value":"13"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36452:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"36459:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36448:3:1"},"nodeType":"YulFunctionCall","src":"36448:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"36470:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36444:3:1"},"nodeType":"YulFunctionCall","src":"36444:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36436:3:1"},"nodeType":"YulFunctionCall","src":"36436:37:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36479:1:1","type":"","value":"9"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36490:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"36497:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36486:3:1"},"nodeType":"YulFunctionCall","src":"36486:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"36508:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36482:3:1"},"nodeType":"YulFunctionCall","src":"36482:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36475:3:1"},"nodeType":"YulFunctionCall","src":"36475:36:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36432:3:1"},"nodeType":"YulFunctionCall","src":"36432:80:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"36426:2:1"}]},{"nodeType":"YulAssignment","src":"36533:23:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36546:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"36553:2:1","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"36542:3:1"},"nodeType":"YulFunctionCall","src":"36542:14:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"36533:5:1"}]},{"nodeType":"YulAssignment","src":"36577:95:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"36587:2:1"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36599:2:1","type":"","value":"12"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36611:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"36618:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36607:3:1"},"nodeType":"YulFunctionCall","src":"36607:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"36629:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36603:3:1"},"nodeType":"YulFunctionCall","src":"36603:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36595:3:1"},"nodeType":"YulFunctionCall","src":"36595:37:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36638:1:1","type":"","value":"8"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36649:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"36656:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36645:3:1"},"nodeType":"YulFunctionCall","src":"36645:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"36667:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36641:3:1"},"nodeType":"YulFunctionCall","src":"36641:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36634:3:1"},"nodeType":"YulFunctionCall","src":"36634:36:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36591:3:1"},"nodeType":"YulFunctionCall","src":"36591:80:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36583:3:1"},"nodeType":"YulFunctionCall","src":"36583:89:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"36577:2:1"}]},{"nodeType":"YulAssignment","src":"36693:23:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36706:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"36713:2:1","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"36702:3:1"},"nodeType":"YulFunctionCall","src":"36702:14:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"36693:5:1"}]},{"nodeType":"YulAssignment","src":"36737:95:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"36747:2:1"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36759:2:1","type":"","value":"11"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36771:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"36778:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36767:3:1"},"nodeType":"YulFunctionCall","src":"36767:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"36789:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36763:3:1"},"nodeType":"YulFunctionCall","src":"36763:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36755:3:1"},"nodeType":"YulFunctionCall","src":"36755:37:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36798:1:1","type":"","value":"7"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36809:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"36816:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36805:3:1"},"nodeType":"YulFunctionCall","src":"36805:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"36827:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36801:3:1"},"nodeType":"YulFunctionCall","src":"36801:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36794:3:1"},"nodeType":"YulFunctionCall","src":"36794:36:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36751:3:1"},"nodeType":"YulFunctionCall","src":"36751:80:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36743:3:1"},"nodeType":"YulFunctionCall","src":"36743:89:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"36737:2:1"}]},{"nodeType":"YulAssignment","src":"36853:23:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36866:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"36873:2:1","type":"","value":"64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"36862:3:1"},"nodeType":"YulFunctionCall","src":"36862:14:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"36853:5:1"}]},{"nodeType":"YulAssignment","src":"36897:95:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"36907:2:1"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36919:2:1","type":"","value":"10"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36931:5:1"},{"name":"scalar_v","nodeType":"YulIdentifier","src":"36938:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36927:3:1"},"nodeType":"YulFunctionCall","src":"36927:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"36949:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36923:3:1"},"nodeType":"YulFunctionCall","src":"36923:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36915:3:1"},"nodeType":"YulFunctionCall","src":"36915:37:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36958:1:1","type":"","value":"6"},{"arguments":[{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"36969:5:1"},{"name":"scalar_u","nodeType":"YulIdentifier","src":"36976:8:1"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"36965:3:1"},"nodeType":"YulFunctionCall","src":"36965:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"36987:1:1","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36961:3:1"},"nodeType":"YulFunctionCall","src":"36961:28:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36954:3:1"},"nodeType":"YulFunctionCall","src":"36954:36:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36911:3:1"},"nodeType":"YulFunctionCall","src":"36911:80:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36903:3:1"},"nodeType":"YulFunctionCall","src":"36903:89:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"36897:2:1"}]},{"body":{"nodeType":"YulBlock","src":"37202:96:1","statements":[{"nodeType":"YulAssignment","src":"37228:14:1","value":{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"37237:1:1"},{"name":"Y","nodeType":"YulIdentifier","src":"37240:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"37233:3:1"},"nodeType":"YulFunctionCall","src":"37233:9:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"37228:1:1"}]},{"nodeType":"YulContinue","src":"37268:8:1"}]},"condition":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"37198:2:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"37191:6:1"},"nodeType":"YulFunctionCall","src":"37191:10:1"},"nodeType":"YulIf","src":"37188:110:1"},{"nodeType":"YulBlock","src":"37319:909:1","statements":[{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"37435:1:1"},{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"37442:2:1"},{"name":"dataPointer","nodeType":"YulIdentifier","src":"37446:11:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37438:3:1"},"nodeType":"YulFunctionCall","src":"37438:20:1"},{"kind":"number","nodeType":"YulLiteral","src":"37460:2:1","type":"","value":"64"}],"functionName":{"name":"codecopy","nodeType":"YulIdentifier","src":"37426:8:1"},"nodeType":"YulFunctionCall","src":"37426:37:1"},"nodeType":"YulExpressionStatement","src":"37426:37:1"},{"nodeType":"YulVariableDeclaration","src":"37535:57:1","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"37569:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"37572:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37565:3:1"},"nodeType":"YulFunctionCall","src":"37565:10:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"37559:5:1"},"nodeType":"YulFunctionCall","src":"37559:17:1"},{"name":"zzz","nodeType":"YulIdentifier","src":"37578:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"37583:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37552:6:1"},"nodeType":"YulFunctionCall","src":"37552:33:1"},{"name":"Y","nodeType":"YulIdentifier","src":"37587:1:1"},{"name":"p","nodeType":"YulIdentifier","src":"37590:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"37545:6:1"},"nodeType":"YulFunctionCall","src":"37545:47:1"},"variables":[{"name":"y2","nodeType":"YulTypedName","src":"37539:2:1","type":""}]},{"nodeType":"YulAssignment","src":"37617:51:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"37643:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"37637:5:1"},"nodeType":"YulFunctionCall","src":"37637:8:1"},{"name":"zz","nodeType":"YulIdentifier","src":"37647:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"37651:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37630:6:1"},"nodeType":"YulFunctionCall","src":"37630:23:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"37659:1:1"},{"name":"X","nodeType":"YulIdentifier","src":"37662:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"37655:3:1"},"nodeType":"YulFunctionCall","src":"37655:9:1"},{"name":"p","nodeType":"YulIdentifier","src":"37666:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"37623:6:1"},"nodeType":"YulFunctionCall","src":"37623:45:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"37617:2:1"}]},{"nodeType":"YulAssignment","src":"37693:23:1","value":{"arguments":[{"name":"T2","nodeType":"YulIdentifier","src":"37706:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"37710:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"37714:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37699:6:1"},"nodeType":"YulFunctionCall","src":"37699:17:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"37693:2:1"}]},{"nodeType":"YulAssignment","src":"37741:23:1","value":{"arguments":[{"name":"T4","nodeType":"YulIdentifier","src":"37754:2:1"},{"name":"T2","nodeType":"YulIdentifier","src":"37758:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"37762:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37747:6:1"},"nodeType":"YulFunctionCall","src":"37747:17:1"},"variableNames":[{"name":"T1","nodeType":"YulIdentifier","src":"37741:2:1"}]},{"nodeType":"YulAssignment","src":"37789:23:1","value":{"arguments":[{"name":"zz","nodeType":"YulIdentifier","src":"37802:2:1"},{"name":"T4","nodeType":"YulIdentifier","src":"37806:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"37810:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37795:6:1"},"nodeType":"YulFunctionCall","src":"37795:17:1"},"variableNames":[{"name":"T2","nodeType":"YulIdentifier","src":"37789:2:1"}]},{"nodeType":"YulAssignment","src":"37845:25:1","value":{"arguments":[{"name":"zzz","nodeType":"YulIdentifier","src":"37859:3:1"},{"name":"T1","nodeType":"YulIdentifier","src":"37864:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"37868:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37852:6:1"},"nodeType":"YulFunctionCall","src":"37852:18:1"},"variableNames":[{"name":"zzz","nodeType":"YulIdentifier","src":"37845:3:1"}]},{"nodeType":"YulVariableDeclaration","src":"37907:27:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"37925:1:1"},{"name":"T4","nodeType":"YulIdentifier","src":"37928:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"37932:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37918:6:1"},"nodeType":"YulFunctionCall","src":"37918:16:1"},"variables":[{"name":"zz1","nodeType":"YulTypedName","src":"37911:3:1","type":""}]},{"nodeType":"YulAssignment","src":"37959:82:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"y2","nodeType":"YulIdentifier","src":"37986:2:1"},{"name":"y2","nodeType":"YulIdentifier","src":"37990:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"37994:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"37979:6:1"},"nodeType":"YulFunctionCall","src":"37979:17:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"38002:1:1"},{"name":"T1","nodeType":"YulIdentifier","src":"38005:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"37998:3:1"},"nodeType":"YulFunctionCall","src":"37998:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"38010:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"37972:6:1"},"nodeType":"YulFunctionCall","src":"37972:40:1"},{"arguments":[{"name":"minus_2","nodeType":"YulIdentifier","src":"38021:7:1"},{"name":"zz1","nodeType":"YulIdentifier","src":"38030:3:1"},{"name":"p","nodeType":"YulIdentifier","src":"38035:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"38014:6:1"},"nodeType":"YulFunctionCall","src":"38014:23:1"},{"name":"p","nodeType":"YulIdentifier","src":"38039:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"37965:6:1"},"nodeType":"YulFunctionCall","src":"37965:76:1"},"variableNames":[{"name":"T4","nodeType":"YulIdentifier","src":"37959:2:1"}]},{"nodeType":"YulAssignment","src":"38066:75:1","value":{"arguments":[{"arguments":[{"arguments":[{"name":"zz1","nodeType":"YulIdentifier","src":"38092:3:1"},{"arguments":[{"name":"p","nodeType":"YulIdentifier","src":"38101:1:1"},{"name":"T4","nodeType":"YulIdentifier","src":"38104:2:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"38097:3:1"},"nodeType":"YulFunctionCall","src":"38097:10:1"},{"name":"p","nodeType":"YulIdentifier","src":"38109:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"38085:6:1"},"nodeType":"YulFunctionCall","src":"38085:26:1"},{"name":"y2","nodeType":"YulIdentifier","src":"38113:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"38117:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"38078:6:1"},"nodeType":"YulFunctionCall","src":"38078:41:1"},{"arguments":[{"name":"Y","nodeType":"YulIdentifier","src":"38128:1:1"},{"name":"T1","nodeType":"YulIdentifier","src":"38131:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"38135:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"38121:6:1"},"nodeType":"YulFunctionCall","src":"38121:16:1"},{"name":"p","nodeType":"YulIdentifier","src":"38139:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"38071:6:1"},"nodeType":"YulFunctionCall","src":"38071:70:1"},"variableNames":[{"name":"Y","nodeType":"YulIdentifier","src":"38066:1:1"}]},{"nodeType":"YulAssignment","src":"38166:8:1","value":{"name":"T2","nodeType":"YulIdentifier","src":"38172:2:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"38166:2:1"}]},{"nodeType":"YulAssignment","src":"38199:7:1","value":{"name":"T4","nodeType":"YulIdentifier","src":"38204:2:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"38199:1:1"}]}]}]},"condition":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"35355:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"35362:3:1","type":"","value":"191"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"35352:2:1"},"nodeType":"YulFunctionCall","src":"35352:14:1"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"35367:28:1","statements":[{"nodeType":"YulAssignment","src":"35369:24:1","value":{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"35382:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"35389:3:1","type":"","value":"191"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35378:3:1"},"nodeType":"YulFunctionCall","src":"35378:15:1"},"variableNames":[{"name":"index","nodeType":"YulIdentifier","src":"35369:5:1"}]}]},"pre":{"nodeType":"YulBlock","src":"35331:20:1","statements":[{"nodeType":"YulVariableDeclaration","src":"35333:16:1","value":{"kind":"number","nodeType":"YulLiteral","src":"35346:3:1","type":"","value":"254"},"variables":[{"name":"index","nodeType":"YulTypedName","src":"35337:5:1","type":""}]}]},"src":"35327:2919:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"38285:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"38288:4:1","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38281:3:1"},"nodeType":"YulFunctionCall","src":"38281:12:1"},{"name":"zz","nodeType":"YulIdentifier","src":"38295:2:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38274:6:1"},"nodeType":"YulFunctionCall","src":"38274:24:1"},"nodeType":"YulExpressionStatement","src":"38274:24:1"},{"expression":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"38558:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"38561:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38551:6:1"},"nodeType":"YulFunctionCall","src":"38551:15:1"},"nodeType":"YulExpressionStatement","src":"38551:15:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"38594:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"38597:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38590:3:1"},"nodeType":"YulFunctionCall","src":"38590:12:1"},{"kind":"number","nodeType":"YulLiteral","src":"38604:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38583:6:1"},"nodeType":"YulFunctionCall","src":"38583:26:1"},"nodeType":"YulExpressionStatement","src":"38583:26:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"38637:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"38640:4:1","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38633:3:1"},"nodeType":"YulFunctionCall","src":"38633:12:1"},{"kind":"number","nodeType":"YulLiteral","src":"38647:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38626:6:1"},"nodeType":"YulFunctionCall","src":"38626:26:1"},"nodeType":"YulExpressionStatement","src":"38626:26:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"38791:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"38794:4:1","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38787:3:1"},"nodeType":"YulFunctionCall","src":"38787:12:1"},{"name":"minus_2","nodeType":"YulIdentifier","src":"38801:7:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38780:6:1"},"nodeType":"YulFunctionCall","src":"38780:29:1"},"nodeType":"YulExpressionStatement","src":"38780:29:1"},{"expression":{"arguments":[{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"38837:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"38840:4:1","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38833:3:1"},"nodeType":"YulFunctionCall","src":"38833:12:1"},{"name":"p","nodeType":"YulIdentifier","src":"38847:1:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38826:6:1"},"nodeType":"YulFunctionCall","src":"38826:23:1"},"nodeType":"YulExpressionStatement","src":"38826:23:1"},{"body":{"nodeType":"YulBlock","src":"38984:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"38993:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"38996:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"38986:6:1"},"nodeType":"YulFunctionCall","src":"38986:12:1"},"nodeType":"YulExpressionStatement","src":"38986:12:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"38955:1:1","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"38951:3:1"},"nodeType":"YulFunctionCall","src":"38951:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"38959:4:1","type":"","value":"0x05"},{"name":"T","nodeType":"YulIdentifier","src":"38965:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"38968:4:1","type":"","value":"0xc0"},{"name":"T","nodeType":"YulIdentifier","src":"38974:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"38977:4:1","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"38940:10:1"},"nodeType":"YulFunctionCall","src":"38940:42:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"38933:6:1"},"nodeType":"YulFunctionCall","src":"38933:50:1"},"nodeType":"YulIf","src":"38930:70:1"},{"nodeType":"YulAssignment","src":"39018:14:1","value":{"arguments":[{"name":"T","nodeType":"YulIdentifier","src":"39030:1:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39024:5:1"},"nodeType":"YulFunctionCall","src":"39024:8:1"},"variableNames":[{"name":"zz","nodeType":"YulIdentifier","src":"39018:2:1"}]},{"nodeType":"YulAssignment","src":"39049:21:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"39061:1:1"},{"name":"zz","nodeType":"YulIdentifier","src":"39064:2:1"},{"name":"p","nodeType":"YulIdentifier","src":"39068:1:1"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"39054:6:1"},"nodeType":"YulFunctionCall","src":"39054:16:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"39049:1:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1320,"isOffset":false,"isSlot":false,"src":"35070:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"35083:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"35132:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"35170:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"37435:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"37569:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"37643:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"38285:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"38558:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"38594:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"38637:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"38791:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"38837:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"38965:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"38974:1:1","valueSize":1},{"declaration":1320,"isOffset":false,"isSlot":false,"src":"39030:1:1","valueSize":1},{"declaration":1310,"isOffset":false,"isSlot":false,"src":"35121:1:1","valueSize":1},{"declaration":1310,"isOffset":false,"isSlot":false,"src":"35557:1:1","valueSize":1},{"declaration":1310,"isOffset":false,"isSlot":false,"src":"35685:1:1","valueSize":1},{"declaration":1310,"isOffset":false,"isSlot":false,"src":"35711:1:1","valueSize":1},{"declaration":1310,"isOffset":false,"isSlot":false,"src":"35898:1:1","valueSize":1},{"declaration":1310,"isOffset":false,"isSlot":false,"src":"36084:1:1","valueSize":1},{"declaration":1310,"isOffset":false,"isSlot":false,"src":"37662:1:1","valueSize":1},{"declaration":1310,"isOffset":false,"isSlot":false,"src":"37925:1:1","valueSize":1},{"declaration":1310,"isOffset":false,"isSlot":false,"src":"38199:1:1","valueSize":1},{"declaration":1310,"isOffset":false,"isSlot":false,"src":"39049:1:1","valueSize":1},{"declaration":1310,"isOffset":false,"isSlot":false,"src":"39061:1:1","valueSize":1},{"declaration":1307,"isOffset":false,"isSlot":false,"src":"35087:11:1","valueSize":1},{"declaration":1307,"isOffset":false,"isSlot":false,"src":"37446:11:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"35936:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"38021:7:1","valueSize":1},{"declaration":273,"isOffset":false,"isSlot":false,"src":"38801:7:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35441:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35508:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35564:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35620:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35692:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35700:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35718:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35722:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35726:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35796:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35854:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35925:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35949:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"35953:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"36091:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"36099:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"36103:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"36257:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"36265:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37237:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37583:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37590:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37651:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37659:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37666:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37714:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37762:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37810:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37868:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37932:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"37994:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"38002:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"38010:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"38035:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"38039:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"38101:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"38109:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"38117:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"38135:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"38139:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"38847:1:1","valueSize":1},{"declaration":255,"isOffset":false,"isSlot":false,"src":"39068:1:1","valueSize":1},{"declaration":1303,"isOffset":false,"isSlot":false,"src":"36497:8:1","valueSize":1},{"declaration":1303,"isOffset":false,"isSlot":false,"src":"36656:8:1","valueSize":1},{"declaration":1303,"isOffset":false,"isSlot":false,"src":"36816:8:1","valueSize":1},{"declaration":1303,"isOffset":false,"isSlot":false,"src":"36976:8:1","valueSize":1},{"declaration":1305,"isOffset":false,"isSlot":false,"src":"36459:8:1","valueSize":1},{"declaration":1305,"isOffset":false,"isSlot":false,"src":"36618:8:1","valueSize":1},{"declaration":1305,"isOffset":false,"isSlot":false,"src":"36778:8:1","valueSize":1},{"declaration":1305,"isOffset":false,"isSlot":false,"src":"36938:8:1","valueSize":1},{"declaration":1313,"isOffset":false,"isSlot":false,"src":"35223:2:1","valueSize":1},{"declaration":1313,"isOffset":false,"isSlot":false,"src":"35695:2:1","valueSize":1},{"declaration":1313,"isOffset":false,"isSlot":false,"src":"35714:2:1","valueSize":1},{"declaration":1313,"isOffset":false,"isSlot":false,"src":"35833:2:1","valueSize":1},{"declaration":1313,"isOffset":false,"isSlot":false,"src":"35850:2:1","valueSize":1},{"declaration":1313,"isOffset":false,"isSlot":false,"src":"37647:2:1","valueSize":1},{"declaration":1313,"isOffset":false,"isSlot":false,"src":"37802:2:1","valueSize":1},{"declaration":1313,"isOffset":false,"isSlot":false,"src":"38166:2:1","valueSize":1},{"declaration":1313,"isOffset":false,"isSlot":false,"src":"38295:2:1","valueSize":1},{"declaration":1313,"isOffset":false,"isSlot":false,"src":"39018:2:1","valueSize":1},{"declaration":1313,"isOffset":false,"isSlot":false,"src":"39064:2:1","valueSize":1}],"id":1442,"nodeType":"InlineAssembly","src":"35034:4057:1"}]}]},"id":1445,"implemented":true,"kind":"function","modifiers":[],"name":"ecZZ_mulmuladd_S8_hackmem","nameLocation":"34144:25:1","nodeType":"FunctionDefinition","parameters":{"id":1308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1303,"mutability":"mutable","name":"scalar_u","nameLocation":"34178:8:1","nodeType":"VariableDeclaration","scope":1445,"src":"34170:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1302,"name":"uint256","nodeType":"ElementaryTypeName","src":"34170:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1305,"mutability":"mutable","name":"scalar_v","nameLocation":"34196:8:1","nodeType":"VariableDeclaration","scope":1445,"src":"34188:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1304,"name":"uint256","nodeType":"ElementaryTypeName","src":"34188:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1307,"mutability":"mutable","name":"dataPointer","nameLocation":"34214:11:1","nodeType":"VariableDeclaration","scope":1445,"src":"34206:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1306,"name":"uint256","nodeType":"ElementaryTypeName","src":"34206:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34169:57:1"},"returnParameters":{"id":1311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1310,"mutability":"mutable","name":"X","nameLocation":"34274:1:1","nodeType":"VariableDeclaration","scope":1445,"src":"34266:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1309,"name":"uint256","nodeType":"ElementaryTypeName","src":"34266:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34265:25:1"},"scope":1886,"src":"34135:4988:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1555,"nodeType":"Block","src":"39327:633:1","statements":[{"assignments":[1462],"declarations":[{"constant":false,"id":1462,"mutability":"mutable","name":"r","nameLocation":"39345:1:1","nodeType":"VariableDeclaration","scope":1555,"src":"39337:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1461,"name":"uint256","nodeType":"ElementaryTypeName","src":"39337:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1466,"initialValue":{"baseExpression":{"id":1463,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"39349:2:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":1465,"indexExpression":{"hexValue":"30","id":1464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39352:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39349:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39337:17:1"},{"assignments":[1468],"declarations":[{"constant":false,"id":1468,"mutability":"mutable","name":"s","nameLocation":"39372:1:1","nodeType":"VariableDeclaration","scope":1555,"src":"39364:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1467,"name":"uint256","nodeType":"ElementaryTypeName","src":"39364:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1472,"initialValue":{"baseExpression":{"id":1469,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"39376:2:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":1471,"indexExpression":{"hexValue":"31","id":1470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39379:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39376:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39364:17:1"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1473,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1462,"src":"39395:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39400:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"39395:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1476,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1462,"src":"39405:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1477,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"39410:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"39405:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"39395:16:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1480,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1468,"src":"39415:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39420:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"39415:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"39395:26:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1484,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1468,"src":"39425:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1485,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"39430:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"39425:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"39395:36:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1491,"nodeType":"IfStatement","src":"39391:79:1","trueBody":{"id":1490,"nodeType":"Block","src":"39433:37:1","statements":[{"expression":{"hexValue":"66616c7365","id":1488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"39454:5:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":1460,"id":1489,"nodeType":"Return","src":"39447:12:1"}]}},{"assignments":[1493],"declarations":[{"constant":false,"id":1493,"mutability":"mutable","name":"Q0","nameLocation":"39487:2:1","nodeType":"VariableDeclaration","scope":1555,"src":"39479:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1492,"name":"uint256","nodeType":"ElementaryTypeName","src":"39479:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1497,"initialValue":{"baseExpression":{"id":1494,"name":"Q","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1456,"src":"39492:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":1496,"indexExpression":{"hexValue":"30","id":1495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39494:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39492:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39479:17:1"},{"assignments":[1499],"declarations":[{"constant":false,"id":1499,"mutability":"mutable","name":"Q1","nameLocation":"39514:2:1","nodeType":"VariableDeclaration","scope":1555,"src":"39506:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1498,"name":"uint256","nodeType":"ElementaryTypeName","src":"39506:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1503,"initialValue":{"baseExpression":{"id":1500,"name":"Q","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1456,"src":"39519:1:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":1502,"indexExpression":{"hexValue":"31","id":1501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39521:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39519:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39506:17:1"},{"condition":{"id":1508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"39537:24:1","subExpression":{"arguments":[{"id":1505,"name":"Q0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1493,"src":"39554:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1506,"name":"Q1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1499,"src":"39558:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1504,"name":"ecAff_isOnCurve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":961,"src":"39538:15:1","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":1507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39538:23:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1512,"nodeType":"IfStatement","src":"39533:67:1","trueBody":{"id":1511,"nodeType":"Block","src":"39563:37:1","statements":[{"expression":{"hexValue":"66616c7365","id":1509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"39584:5:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":1460,"id":1510,"nodeType":"Return","src":"39577:12:1"}]}},{"assignments":[1514],"declarations":[{"constant":false,"id":1514,"mutability":"mutable","name":"sInv","nameLocation":"39618:4:1","nodeType":"VariableDeclaration","scope":1555,"src":"39610:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1513,"name":"uint256","nodeType":"ElementaryTypeName","src":"39610:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1518,"initialValue":{"arguments":[{"id":1516,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1468,"src":"39637:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1515,"name":"FCL_nModInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"39625:11:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":1517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39625:14:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39610:29:1"},{"assignments":[1520],"declarations":[{"constant":false,"id":1520,"mutability":"mutable","name":"scalar_u","nameLocation":"39658:8:1","nodeType":"VariableDeclaration","scope":1555,"src":"39650:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1519,"name":"uint256","nodeType":"ElementaryTypeName","src":"39650:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1529,"initialValue":{"arguments":[{"arguments":[{"id":1524,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1448,"src":"39684:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":1523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"39676:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1522,"name":"uint256","nodeType":"ElementaryTypeName","src":"39676:7:1","typeDescriptions":{}}},"id":1525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39676:16:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1526,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1514,"src":"39694:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1527,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"39700:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1521,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"39669:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39669:33:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39650:52:1"},{"assignments":[1531],"declarations":[{"constant":false,"id":1531,"mutability":"mutable","name":"scalar_v","nameLocation":"39720:8:1","nodeType":"VariableDeclaration","scope":1555,"src":"39712:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1530,"name":"uint256","nodeType":"ElementaryTypeName","src":"39712:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1537,"initialValue":{"arguments":[{"id":1533,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1462,"src":"39738:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1534,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1514,"src":"39741:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1535,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"39747:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1532,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"39731:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39731:18:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39712:37:1"},{"assignments":[1539],"declarations":[{"constant":false,"id":1539,"mutability":"mutable","name":"x1","nameLocation":"39767:2:1","nodeType":"VariableDeclaration","scope":1555,"src":"39759:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1538,"name":"uint256","nodeType":"ElementaryTypeName","src":"39759:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1540,"nodeType":"VariableDeclarationStatement","src":"39759:10:1"},{"expression":{"id":1548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1541,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1539,"src":"39780:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1543,"name":"Q0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1493,"src":"39806:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1544,"name":"Q1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1499,"src":"39810:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1545,"name":"scalar_u","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1520,"src":"39814:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1546,"name":"scalar_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1531,"src":"39824:8:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1542,"name":"ecZZ_mulmuladd_S_asm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1083,"src":"39785:20:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256)"}},"id":1547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39785:48:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"39780:53:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1549,"nodeType":"ExpressionStatement","src":"39780:53:1"},{"AST":{"nodeType":"YulBlock","src":"39853:54:1","statements":[{"nodeType":"YulAssignment","src":"39867:30:1","value":{"arguments":[{"name":"x1","nodeType":"YulIdentifier","src":"39880:2:1"},{"arguments":[{"name":"n","nodeType":"YulIdentifier","src":"39888:1:1"},{"name":"r","nodeType":"YulIdentifier","src":"39891:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"39884:3:1"},"nodeType":"YulFunctionCall","src":"39884:9:1"},{"name":"n","nodeType":"YulIdentifier","src":"39895:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"39873:6:1"},"nodeType":"YulFunctionCall","src":"39873:24:1"},"variableNames":[{"name":"x1","nodeType":"YulIdentifier","src":"39867:2:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":270,"isOffset":false,"isSlot":false,"src":"39888:1:1","valueSize":1},{"declaration":270,"isOffset":false,"isSlot":false,"src":"39895:1:1","valueSize":1},{"declaration":1462,"isOffset":false,"isSlot":false,"src":"39891:1:1","valueSize":1},{"declaration":1539,"isOffset":false,"isSlot":false,"src":"39867:2:1","valueSize":1},{"declaration":1539,"isOffset":false,"isSlot":false,"src":"39880:2:1","valueSize":1}],"id":1550,"nodeType":"InlineAssembly","src":"39844:63:1"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1551,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1539,"src":"39946:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1552,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39952:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"39946:7:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1460,"id":1554,"nodeType":"Return","src":"39939:14:1"}]},"documentation":{"id":1446,"nodeType":"StructuredDocumentation","src":"39129:78:1","text":" @dev ECDSA verification, given , signature, and public key."},"id":1556,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_verify","nameLocation":"39221:12:1","nodeType":"FunctionDefinition","parameters":{"id":1457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1448,"mutability":"mutable","name":"message","nameLocation":"39242:7:1","nodeType":"VariableDeclaration","scope":1556,"src":"39234:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1447,"name":"bytes32","nodeType":"ElementaryTypeName","src":"39234:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1452,"mutability":"mutable","name":"rs","nameLocation":"39271:2:1","nodeType":"VariableDeclaration","scope":1556,"src":"39251:22:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":1449,"name":"uint256","nodeType":"ElementaryTypeName","src":"39251:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1451,"length":{"hexValue":"32","id":1450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39259:1:1","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"39251:10:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":1456,"mutability":"mutable","name":"Q","nameLocation":"39295:1:1","nodeType":"VariableDeclaration","scope":1556,"src":"39275:21:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":1453,"name":"uint256","nodeType":"ElementaryTypeName","src":"39275:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1455,"length":{"hexValue":"32","id":1454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39283:1:1","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"39275:10:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"src":"39233:64:1"},"returnParameters":{"id":1460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1459,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1556,"src":"39321:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1458,"name":"bool","nodeType":"ElementaryTypeName","src":"39321:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"39320:6:1"},"scope":1886,"src":"39212:748:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1634,"nodeType":"Block","src":"40392:572:1","statements":[{"assignments":[1571],"declarations":[{"constant":false,"id":1571,"mutability":"mutable","name":"r","nameLocation":"40410:1:1","nodeType":"VariableDeclaration","scope":1634,"src":"40402:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1570,"name":"uint256","nodeType":"ElementaryTypeName","src":"40402:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1575,"initialValue":{"baseExpression":{"id":1572,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1563,"src":"40414:2:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":1574,"indexExpression":{"hexValue":"30","id":1573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40417:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"40414:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40402:17:1"},{"assignments":[1577],"declarations":[{"constant":false,"id":1577,"mutability":"mutable","name":"s","nameLocation":"40437:1:1","nodeType":"VariableDeclaration","scope":1634,"src":"40429:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1576,"name":"uint256","nodeType":"ElementaryTypeName","src":"40429:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1581,"initialValue":{"baseExpression":{"id":1578,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1563,"src":"40441:2:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":1580,"indexExpression":{"hexValue":"31","id":1579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40444:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"40441:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40429:17:1"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1582,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1571,"src":"40460:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40465:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"40460:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1585,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1571,"src":"40470:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1586,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"40475:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40470:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"40460:16:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1589,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1577,"src":"40480:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40485:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"40480:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"40460:26:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1593,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1577,"src":"40490:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1594,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"40495:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40490:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"40460:36:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1600,"nodeType":"IfStatement","src":"40456:79:1","trueBody":{"id":1599,"nodeType":"Block","src":"40498:37:1","statements":[{"expression":{"hexValue":"66616c7365","id":1597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"40519:5:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":1569,"id":1598,"nodeType":"Return","src":"40512:12:1"}]}},{"assignments":[1602],"declarations":[{"constant":false,"id":1602,"mutability":"mutable","name":"sInv","nameLocation":"40687:4:1","nodeType":"VariableDeclaration","scope":1634,"src":"40679:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1601,"name":"uint256","nodeType":"ElementaryTypeName","src":"40679:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1606,"initialValue":{"arguments":[{"id":1604,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1577,"src":"40706:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1603,"name":"FCL_nModInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"40694:11:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":1605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40694:14:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40679:29:1"},{"assignments":[1608],"declarations":[{"constant":false,"id":1608,"mutability":"mutable","name":"X","nameLocation":"40727:1:1","nodeType":"VariableDeclaration","scope":1634,"src":"40719:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1607,"name":"uint256","nodeType":"ElementaryTypeName","src":"40719:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1609,"nodeType":"VariableDeclarationStatement","src":"40719:9:1"},{"expression":{"id":1627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1610,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1608,"src":"40769:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":1615,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1559,"src":"40814:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":1614,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"40806:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1613,"name":"uint256","nodeType":"ElementaryTypeName","src":"40806:7:1","typeDescriptions":{}}},"id":1616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40806:16:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1617,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1602,"src":"40824:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1618,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"40830:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1612,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"40799:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40799:33:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":1621,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1571,"src":"40841:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1622,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1602,"src":"40844:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1623,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"40850:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1620,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"40834:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40834:18:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1625,"name":"Shamir8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1565,"src":"40854:7:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1611,"name":"ecZZ_mulmuladd_S8_extcode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1301,"src":"40773:25:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,uint256,address) view returns (uint256)"}},"id":1626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40773:89:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40769:93:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1628,"nodeType":"ExpressionStatement","src":"40769:93:1"},{"AST":{"nodeType":"YulBlock","src":"40882:52:1","statements":[{"nodeType":"YulAssignment","src":"40896:28:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"40908:1:1"},{"arguments":[{"name":"n","nodeType":"YulIdentifier","src":"40915:1:1"},{"name":"r","nodeType":"YulIdentifier","src":"40918:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"40911:3:1"},"nodeType":"YulFunctionCall","src":"40911:9:1"},{"name":"n","nodeType":"YulIdentifier","src":"40922:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"40901:6:1"},"nodeType":"YulFunctionCall","src":"40901:23:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"40896:1:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1608,"isOffset":false,"isSlot":false,"src":"40896:1:1","valueSize":1},{"declaration":1608,"isOffset":false,"isSlot":false,"src":"40908:1:1","valueSize":1},{"declaration":270,"isOffset":false,"isSlot":false,"src":"40915:1:1","valueSize":1},{"declaration":270,"isOffset":false,"isSlot":false,"src":"40922:1:1","valueSize":1},{"declaration":1571,"isOffset":false,"isSlot":false,"src":"40918:1:1","valueSize":1}],"id":1629,"nodeType":"InlineAssembly","src":"40873:61:1"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1630,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1608,"src":"40951:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40956:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"40951:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1569,"id":1633,"nodeType":"Return","src":"40944:13:1"}]},"documentation":{"id":1557,"nodeType":"StructuredDocumentation","src":"39966:279:1","text":" @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\n generation of contract bytecode for precomputations is done using sagemath code\n (see sage directory, WebAuthn_precompute.sage)"},"id":1635,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_precomputed_verify","nameLocation":"40260:24:1","nodeType":"FunctionDefinition","parameters":{"id":1566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1559,"mutability":"mutable","name":"message","nameLocation":"40293:7:1","nodeType":"VariableDeclaration","scope":1635,"src":"40285:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1558,"name":"bytes32","nodeType":"ElementaryTypeName","src":"40285:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1563,"mutability":"mutable","name":"rs","nameLocation":"40322:2:1","nodeType":"VariableDeclaration","scope":1635,"src":"40302:22:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":1560,"name":"uint256","nodeType":"ElementaryTypeName","src":"40302:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1562,"length":{"hexValue":"32","id":1561,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40310:1:1","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"40302:10:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":1565,"mutability":"mutable","name":"Shamir8","nameLocation":"40334:7:1","nodeType":"VariableDeclaration","scope":1635,"src":"40326:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1564,"name":"address","nodeType":"ElementaryTypeName","src":"40326:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"40284:58:1"},"returnParameters":{"id":1569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1568,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1635,"src":"40382:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1567,"name":"bool","nodeType":"ElementaryTypeName","src":"40382:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"40381:6:1"},"scope":1886,"src":"40251:713:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1713,"nodeType":"Block","src":"41448:574:1","statements":[{"assignments":[1650],"declarations":[{"constant":false,"id":1650,"mutability":"mutable","name":"r","nameLocation":"41466:1:1","nodeType":"VariableDeclaration","scope":1713,"src":"41458:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1649,"name":"uint256","nodeType":"ElementaryTypeName","src":"41458:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1654,"initialValue":{"baseExpression":{"id":1651,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1642,"src":"41470:2:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":1653,"indexExpression":{"hexValue":"30","id":1652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"41473:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"41470:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"41458:17:1"},{"assignments":[1656],"declarations":[{"constant":false,"id":1656,"mutability":"mutable","name":"s","nameLocation":"41493:1:1","nodeType":"VariableDeclaration","scope":1713,"src":"41485:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1655,"name":"uint256","nodeType":"ElementaryTypeName","src":"41485:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1660,"initialValue":{"baseExpression":{"id":1657,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1642,"src":"41497:2:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},"id":1659,"indexExpression":{"hexValue":"31","id":1658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"41500:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"41497:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"41485:17:1"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1661,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1650,"src":"41516:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"41521:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"41516:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1664,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1650,"src":"41526:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1665,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"41531:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41526:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"41516:16:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1668,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1656,"src":"41536:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"41541:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"41536:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"41516:26:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1672,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1656,"src":"41546:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1673,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"41551:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41546:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"41516:36:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1679,"nodeType":"IfStatement","src":"41512:79:1","trueBody":{"id":1678,"nodeType":"Block","src":"41554:37:1","statements":[{"expression":{"hexValue":"66616c7365","id":1676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"41575:5:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":1648,"id":1677,"nodeType":"Return","src":"41568:12:1"}]}},{"assignments":[1681],"declarations":[{"constant":false,"id":1681,"mutability":"mutable","name":"sInv","nameLocation":"41743:4:1","nodeType":"VariableDeclaration","scope":1713,"src":"41735:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1680,"name":"uint256","nodeType":"ElementaryTypeName","src":"41735:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1685,"initialValue":{"arguments":[{"id":1683,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1656,"src":"41762:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1682,"name":"FCL_nModInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"41750:11:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":1684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41750:14:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"41735:29:1"},{"assignments":[1687],"declarations":[{"constant":false,"id":1687,"mutability":"mutable","name":"X","nameLocation":"41782:1:1","nodeType":"VariableDeclaration","scope":1713,"src":"41774:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1686,"name":"uint256","nodeType":"ElementaryTypeName","src":"41774:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1688,"nodeType":"VariableDeclarationStatement","src":"41774:9:1"},{"expression":{"id":1706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1689,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1687,"src":"41824:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":1694,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1638,"src":"41869:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":1693,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"41861:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1692,"name":"uint256","nodeType":"ElementaryTypeName","src":"41861:7:1","typeDescriptions":{}}},"id":1695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41861:16:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1696,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1681,"src":"41879:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1697,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"41885:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1691,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"41854:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41854:33:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":1700,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1650,"src":"41896:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1701,"name":"sInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1681,"src":"41899:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1702,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"41905:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1699,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"41889:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41889:18:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1704,"name":"endcontract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"41909:11:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1690,"name":"ecZZ_mulmuladd_S8_hackmem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1445,"src":"41828:25:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (uint256)"}},"id":1705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41828:93:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41824:97:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1707,"nodeType":"ExpressionStatement","src":"41824:97:1"},{"AST":{"nodeType":"YulBlock","src":"41941:52:1","statements":[{"nodeType":"YulAssignment","src":"41955:28:1","value":{"arguments":[{"name":"X","nodeType":"YulIdentifier","src":"41967:1:1"},{"arguments":[{"name":"n","nodeType":"YulIdentifier","src":"41974:1:1"},{"name":"r","nodeType":"YulIdentifier","src":"41977:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"41970:3:1"},"nodeType":"YulFunctionCall","src":"41970:9:1"},{"name":"n","nodeType":"YulIdentifier","src":"41981:1:1"}],"functionName":{"name":"addmod","nodeType":"YulIdentifier","src":"41960:6:1"},"nodeType":"YulFunctionCall","src":"41960:23:1"},"variableNames":[{"name":"X","nodeType":"YulIdentifier","src":"41955:1:1"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1687,"isOffset":false,"isSlot":false,"src":"41955:1:1","valueSize":1},{"declaration":1687,"isOffset":false,"isSlot":false,"src":"41967:1:1","valueSize":1},{"declaration":270,"isOffset":false,"isSlot":false,"src":"41974:1:1","valueSize":1},{"declaration":270,"isOffset":false,"isSlot":false,"src":"41981:1:1","valueSize":1},{"declaration":1650,"isOffset":false,"isSlot":false,"src":"41977:1:1","valueSize":1}],"id":1708,"nodeType":"InlineAssembly","src":"41932:61:1"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1709,"name":"X","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1687,"src":"42009:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42014:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"42009:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1648,"id":1712,"nodeType":"Return","src":"42002:13:1"}]},"documentation":{"id":1636,"nodeType":"StructuredDocumentation","src":"41004:292:1","text":" @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\n generation of contract bytecode for precomputations is done using sagemath code\n (see sage directory, WebAuthn_precompute.sage)"},"id":1714,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_precomputed_hackmem","nameLocation":"41311:25:1","nodeType":"FunctionDefinition","parameters":{"id":1645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1638,"mutability":"mutable","name":"message","nameLocation":"41345:7:1","nodeType":"VariableDeclaration","scope":1714,"src":"41337:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1637,"name":"bytes32","nodeType":"ElementaryTypeName","src":"41337:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1642,"mutability":"mutable","name":"rs","nameLocation":"41374:2:1","nodeType":"VariableDeclaration","scope":1714,"src":"41354:22:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":1639,"name":"uint256","nodeType":"ElementaryTypeName","src":"41354:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1641,"length":{"hexValue":"32","id":1640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"41362:1:1","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"41354:10:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":1644,"mutability":"mutable","name":"endcontract","nameLocation":"41386:11:1","nodeType":"VariableDeclaration","scope":1714,"src":"41378:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1643,"name":"uint256","nodeType":"ElementaryTypeName","src":"41378:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"41336:62:1"},"returnParameters":{"id":1648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1647,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1714,"src":"41438:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1646,"name":"bool","nodeType":"ElementaryTypeName","src":"41438:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"41437:6:1"},"scope":1886,"src":"41302:720:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1820,"nodeType":"Block","src":"42163:451:1","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1727,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"42178:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42183:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"42178:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1730,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"42188:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1731,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"42193:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42188:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"42178:16:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1734,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1722,"src":"42198:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42203:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"42198:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"42178:26:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1738,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1722,"src":"42208:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1739,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"42213:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42208:6:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"42178:36:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1748,"nodeType":"IfStatement","src":"42174:84:1","trueBody":{"id":1747,"nodeType":"Block","src":"42216:42:1","statements":[{"expression":{"arguments":[{"hexValue":"30","id":1744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42245:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1743,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"42237:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1742,"name":"address","nodeType":"ElementaryTypeName","src":"42237:7:1","typeDescriptions":{}}},"id":1745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42237:10:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1726,"id":1746,"nodeType":"Return","src":"42230:17:1"}]}},{"assignments":[1750],"declarations":[{"constant":false,"id":1750,"mutability":"mutable","name":"y","nameLocation":"42275:1:1","nodeType":"VariableDeclaration","scope":1820,"src":"42267:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1749,"name":"uint256","nodeType":"ElementaryTypeName","src":"42267:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1757,"initialValue":{"arguments":[{"id":1752,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"42291:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1753,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1718,"src":"42294:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3237","id":1754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42296:2:1","typeDescriptions":{"typeIdentifier":"t_rational_27_by_1","typeString":"int_const 27"},"value":"27"},"src":"42294:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1751,"name":"ec_Decompress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"42277:13:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":1756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42277:22:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"42267:32:1"},{"assignments":[1759],"declarations":[{"constant":false,"id":1759,"mutability":"mutable","name":"rinv","nameLocation":"42317:4:1","nodeType":"VariableDeclaration","scope":1820,"src":"42309:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1758,"name":"uint256","nodeType":"ElementaryTypeName","src":"42309:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1763,"initialValue":{"arguments":[{"id":1761,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"42334:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1760,"name":"FCL_nModInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"42322:11:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":1762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42322:14:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"42309:27:1"},{"assignments":[1765],"declarations":[{"constant":false,"id":1765,"mutability":"mutable","name":"u1","nameLocation":"42354:2:1","nodeType":"VariableDeclaration","scope":1820,"src":"42346:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1764,"name":"uint256","nodeType":"ElementaryTypeName","src":"42346:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1777,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1767,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"42364:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"hexValue":"30","id":1769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42373:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":1770,"name":"h","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1716,"src":"42375:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1771,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"42377:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1768,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"42366:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42366:13:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42364:15:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1774,"name":"rinv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1759,"src":"42381:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1775,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"42386:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1766,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"42357:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42357:31:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"42346:42:1"},{"assignments":[1779],"declarations":[{"constant":false,"id":1779,"mutability":"mutable","name":"u2","nameLocation":"42414:2:1","nodeType":"VariableDeclaration","scope":1820,"src":"42406:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1778,"name":"uint256","nodeType":"ElementaryTypeName","src":"42406:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1785,"initialValue":{"arguments":[{"id":1781,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1722,"src":"42424:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1782,"name":"rinv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1759,"src":"42427:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1783,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"42432:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1780,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"42417:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42417:17:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"42406:28:1"},{"assignments":[1787],"declarations":[{"constant":false,"id":1787,"mutability":"mutable","name":"Qx","nameLocation":"42460:2:1","nodeType":"VariableDeclaration","scope":1820,"src":"42452:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1786,"name":"uint256","nodeType":"ElementaryTypeName","src":"42452:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1788,"nodeType":"VariableDeclarationStatement","src":"42452:10:1"},{"assignments":[1790],"declarations":[{"constant":false,"id":1790,"mutability":"mutable","name":"Qy","nameLocation":"42480:2:1","nodeType":"VariableDeclaration","scope":1820,"src":"42472:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1789,"name":"uint256","nodeType":"ElementaryTypeName","src":"42472:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1791,"nodeType":"VariableDeclarationStatement","src":"42472:10:1"},{"expression":{"id":1801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":1792,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1787,"src":"42493:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1793,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1790,"src":"42496:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1794,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"42492:7:1","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1796,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"42515:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1797,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1750,"src":"42517:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1798,"name":"u1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1765,"src":"42520:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1799,"name":"u2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"42524:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1795,"name":"ecZZ_mulmuladd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1157,"src":"42500:14:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256,uint256)"}},"id":1800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42500:27:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"42492:35:1","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1802,"nodeType":"ExpressionStatement","src":"42492:35:1"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":1812,"name":"Qx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1787,"src":"42596:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1813,"name":"Qy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1790,"src":"42600:2:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1810,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"42579:3:1","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1811,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"42583:12:1","memberName":"encodePacked","nodeType":"MemberAccess","src":"42579:16:1","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":1814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42579:24:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1809,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"42569:9:1","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":1815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42569:35:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":1808,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"42561:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1807,"name":"uint256","nodeType":"ElementaryTypeName","src":"42561:7:1","typeDescriptions":{}}},"id":1816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42561:44:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"42553:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":1805,"name":"uint160","nodeType":"ElementaryTypeName","src":"42553:7:1","typeDescriptions":{}}},"id":1817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42553:53:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":1804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"42545:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1803,"name":"address","nodeType":"ElementaryTypeName","src":"42545:7:1","typeDescriptions":{}}},"id":1818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42545:62:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1726,"id":1819,"nodeType":"Return","src":"42538:69:1"}]},"functionSelector":"5f67f323","id":1821,"implemented":true,"kind":"function","modifiers":[],"name":"ec_recover_r1","nameLocation":"42071:13:1","nodeType":"FunctionDefinition","parameters":{"id":1723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1716,"mutability":"mutable","name":"h","nameLocation":"42093:1:1","nodeType":"VariableDeclaration","scope":1821,"src":"42085:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1715,"name":"uint256","nodeType":"ElementaryTypeName","src":"42085:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1718,"mutability":"mutable","name":"v","nameLocation":"42104:1:1","nodeType":"VariableDeclaration","scope":1821,"src":"42096:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1717,"name":"uint256","nodeType":"ElementaryTypeName","src":"42096:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1720,"mutability":"mutable","name":"r","nameLocation":"42115:1:1","nodeType":"VariableDeclaration","scope":1821,"src":"42107:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1719,"name":"uint256","nodeType":"ElementaryTypeName","src":"42107:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1722,"mutability":"mutable","name":"s","nameLocation":"42126:1:1","nodeType":"VariableDeclaration","scope":1821,"src":"42118:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1721,"name":"uint256","nodeType":"ElementaryTypeName","src":"42118:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"42084:44:1"},"returnParameters":{"id":1726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1725,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1821,"src":"42150:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1724,"name":"address","nodeType":"ElementaryTypeName","src":"42150:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"42149:9:1"},"scope":1886,"src":"42062:552:1","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":1884,"nodeType":"Block","src":"42869:312:1","statements":[{"expression":{"id":1841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1834,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1830,"src":"42879:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":1836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42902:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":1837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42904:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":1838,"name":"k","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1825,"src":"42907:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":1839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42910:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1835,"name":"ecZZ_mulmuladd_S_asm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1083,"src":"42881:20:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256)"}},"id":1840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42881:31:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42879:33:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1842,"nodeType":"ExpressionStatement","src":"42879:33:1"},{"expression":{"id":1849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1843,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1830,"src":"42984:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":1845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42993:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":1846,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1830,"src":"42995:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1847,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"42998:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1844,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"42986:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42986:14:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42984:16:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1850,"nodeType":"ExpressionStatement","src":"42984:16:1"},{"expression":{"id":1870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1851,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1832,"src":"43011:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":1854,"name":"k","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1825,"src":"43032:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1853,"name":"FCL_nModInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"43020:11:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":1855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43020:14:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"arguments":[{"id":1859,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1823,"src":"43051:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":1858,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"43043:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1857,"name":"uint256","nodeType":"ElementaryTypeName","src":"43043:7:1","typeDescriptions":{}}},"id":1860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43043:16:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":1862,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1830,"src":"43068:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1863,"name":"kpriv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1827,"src":"43071:5:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1864,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"43078:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1861,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"43061:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43061:19:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1866,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"43081:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1856,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"43036:6:1","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43036:47:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1868,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"43084:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1852,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"43013:6:1","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43013:73:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43011:75:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1871,"nodeType":"ExpressionStatement","src":"43011:75:1"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1872,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1830,"src":"43129:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"43132:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"43129:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1875,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1832,"src":"43135:1:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"43138:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"43135:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"43129:10:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1883,"nodeType":"IfStatement","src":"43126:47:1","trueBody":{"id":1882,"nodeType":"Block","src":"43140:33:1","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1879,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"43154:6:1","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$__$returns$__$","typeString":"function () pure"}},"id":1880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43154:8:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1881,"nodeType":"ExpressionStatement","src":"43154:8:1"}]}}]},"functionSelector":"e982f355","id":1885,"implemented":true,"kind":"function","modifiers":[],"name":"ecdsa_sign","nameLocation":"42768:10:1","nodeType":"FunctionDefinition","parameters":{"id":1828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1823,"mutability":"mutable","name":"message","nameLocation":"42787:7:1","nodeType":"VariableDeclaration","scope":1885,"src":"42779:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1822,"name":"bytes32","nodeType":"ElementaryTypeName","src":"42779:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1825,"mutability":"mutable","name":"k","nameLocation":"42804:1:1","nodeType":"VariableDeclaration","scope":1885,"src":"42796:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1824,"name":"uint256","nodeType":"ElementaryTypeName","src":"42796:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1827,"mutability":"mutable","name":"kpriv","nameLocation":"42816:5:1","nodeType":"VariableDeclaration","scope":1885,"src":"42808:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1826,"name":"uint256","nodeType":"ElementaryTypeName","src":"42808:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"42778:44:1"},"returnParameters":{"id":1833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1830,"mutability":"mutable","name":"r","nameLocation":"42851:1:1","nodeType":"VariableDeclaration","scope":1885,"src":"42843:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1829,"name":"uint256","nodeType":"ElementaryTypeName","src":"42843:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1832,"mutability":"mutable","name":"s","nameLocation":"42862:1:1","nodeType":"VariableDeclaration","scope":1885,"src":"42854:9:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1831,"name":"uint256","nodeType":"ElementaryTypeName","src":"42854:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"42842:22:1"},"scope":1886,"src":"42759:422:1","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":1887,"src":"1212:41972:1","usedErrors":[],"usedEvents":[]}],"src":"1186:42005:1"},"id":1},"FreshCryptoLib/utils/Base64Url.sol":{"ast":{"absolutePath":"FreshCryptoLib/utils/Base64Url.sol","exportedSymbols":{"Base64Url":[1932]},"id":1933,"license":"Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":1888,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"39:23:2"},{"abstract":false,"baseContracts":[],"canonicalName":"Base64Url","contractDependencies":[],"contractKind":"library","documentation":{"id":1889,"nodeType":"StructuredDocumentation","src":"64:111:2","text":" @dev Encode (without '=' padding) \n @author evmbrahmin, adapted from hiromin's Base64URL libraries"},"fullyImplemented":true,"id":1932,"linearizedBaseContracts":[1932],"name":"Base64Url","nameLocation":"184:9:2","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":1890,"nodeType":"StructuredDocumentation","src":"200:48:2","text":" @dev Base64Url Encoding Table"},"id":1893,"mutability":"constant","name":"ENCODING_TABLE","nameLocation":"278:14:2","nodeType":"VariableDeclaration","scope":1932,"src":"253:116:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1891,"name":"string","nodeType":"ElementaryTypeName","src":"253:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f","id":1892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"303:66:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_5f7e6d3cba140c1411e96b7033571a229a3135b5c436a9698b398a19a1c64b50","typeString":"literal_string \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\""},"value":"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"},"visibility":"internal"},{"body":{"id":1930,"nodeType":"Block","src":"449:1841:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1900,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1895,"src":"463:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"468:6:2","memberName":"length","nodeType":"MemberAccess","src":"463:11:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"478:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"463:16:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1906,"nodeType":"IfStatement","src":"459:31:2","trueBody":{"expression":{"hexValue":"","id":1904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"488:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},"functionReturnParameters":1899,"id":1905,"nodeType":"Return","src":"481:9:2"}},{"assignments":[1908],"declarations":[{"constant":false,"id":1908,"mutability":"mutable","name":"table","nameLocation":"553:5:2","nodeType":"VariableDeclaration","scope":1930,"src":"539:19:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1907,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":1910,"initialValue":{"id":1909,"name":"ENCODING_TABLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1893,"src":"561:14:2","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"539:36:2"},{"assignments":[1912],"declarations":[{"constant":false,"id":1912,"mutability":"mutable","name":"result","nameLocation":"600:6:2","nodeType":"VariableDeclaration","scope":1930,"src":"586:20:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1911,"name":"string","nodeType":"ElementaryTypeName","src":"586:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":1926,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":1915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"620:1:2","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1916,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1895,"src":"626:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"631:6:2","memberName":"length","nodeType":"MemberAccess","src":"626:11:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":1918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"640:1:2","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"626:15:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1920,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"625:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":1921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"645:1:2","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"625:21:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1923,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"624:23:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"620:27:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1914,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"609:10:2","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"},"typeName":{"id":1913,"name":"string","nodeType":"ElementaryTypeName","src":"613:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"id":1925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"609:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"586:62:2"},{"AST":{"nodeType":"YulBlock","src":"710:1548:2","statements":[{"nodeType":"YulVariableDeclaration","src":"724:29:2","value":{"arguments":[{"name":"table","nodeType":"YulIdentifier","src":"744:5:2"},{"kind":"number","nodeType":"YulLiteral","src":"751:1:2","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"740:3:2"},"nodeType":"YulFunctionCall","src":"740:13:2"},"variables":[{"name":"tablePtr","nodeType":"YulTypedName","src":"728:8:2","type":""}]},{"nodeType":"YulVariableDeclaration","src":"766:32:2","value":{"arguments":[{"name":"result","nodeType":"YulIdentifier","src":"787:6:2"},{"kind":"number","nodeType":"YulLiteral","src":"795:2:2","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"783:3:2"},"nodeType":"YulFunctionCall","src":"783:15:2"},"variables":[{"name":"resultPtr","nodeType":"YulTypedName","src":"770:9:2","type":""}]},{"body":{"nodeType":"YulBlock","src":"958:794:2","statements":[{"nodeType":"YulAssignment","src":"976:26:2","value":{"arguments":[{"name":"dataPtr","nodeType":"YulIdentifier","src":"991:7:2"},{"kind":"number","nodeType":"YulLiteral","src":"1000:1:2","type":"","value":"3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"987:3:2"},"nodeType":"YulFunctionCall","src":"987:15:2"},"variableNames":[{"name":"dataPtr","nodeType":"YulIdentifier","src":"976:7:2"}]},{"nodeType":"YulVariableDeclaration","src":"1019:27:2","value":{"arguments":[{"name":"dataPtr","nodeType":"YulIdentifier","src":"1038:7:2"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1032:5:2"},"nodeType":"YulFunctionCall","src":"1032:14:2"},"variables":[{"name":"input","nodeType":"YulTypedName","src":"1023:5:2","type":""}]},{"expression":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1093:9:2"},{"arguments":[{"arguments":[{"name":"tablePtr","nodeType":"YulIdentifier","src":"1134:8:2"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1152:2:2","type":"","value":"18"},{"name":"input","nodeType":"YulIdentifier","src":"1156:5:2"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1148:3:2"},"nodeType":"YulFunctionCall","src":"1148:14:2"},{"kind":"number","nodeType":"YulLiteral","src":"1164:4:2","type":"","value":"0x3F"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1144:3:2"},"nodeType":"YulFunctionCall","src":"1144:25:2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1130:3:2"},"nodeType":"YulFunctionCall","src":"1130:40:2"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1124:5:2"},"nodeType":"YulFunctionCall","src":"1124:47:2"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"1064:7:2"},"nodeType":"YulFunctionCall","src":"1064:125:2"},"nodeType":"YulExpressionStatement","src":"1064:125:2"},{"nodeType":"YulAssignment","src":"1206:30:2","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1223:9:2"},{"kind":"number","nodeType":"YulLiteral","src":"1234:1:2","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1219:3:2"},"nodeType":"YulFunctionCall","src":"1219:17:2"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1206:9:2"}]},{"expression":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1283:9:2"},{"arguments":[{"arguments":[{"name":"tablePtr","nodeType":"YulIdentifier","src":"1324:8:2"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1342:2:2","type":"","value":"12"},{"name":"input","nodeType":"YulIdentifier","src":"1346:5:2"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1338:3:2"},"nodeType":"YulFunctionCall","src":"1338:14:2"},{"kind":"number","nodeType":"YulLiteral","src":"1354:4:2","type":"","value":"0x3F"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1334:3:2"},"nodeType":"YulFunctionCall","src":"1334:25:2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1320:3:2"},"nodeType":"YulFunctionCall","src":"1320:40:2"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1314:5:2"},"nodeType":"YulFunctionCall","src":"1314:47:2"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"1254:7:2"},"nodeType":"YulFunctionCall","src":"1254:125:2"},"nodeType":"YulExpressionStatement","src":"1254:125:2"},{"nodeType":"YulAssignment","src":"1396:30:2","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1413:9:2"},{"kind":"number","nodeType":"YulLiteral","src":"1424:1:2","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1409:3:2"},"nodeType":"YulFunctionCall","src":"1409:17:2"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1396:9:2"}]},{"expression":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1473:9:2"},{"arguments":[{"arguments":[{"name":"tablePtr","nodeType":"YulIdentifier","src":"1514:8:2"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1532:1:2","type":"","value":"6"},{"name":"input","nodeType":"YulIdentifier","src":"1535:5:2"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1528:3:2"},"nodeType":"YulFunctionCall","src":"1528:13:2"},{"kind":"number","nodeType":"YulLiteral","src":"1543:4:2","type":"","value":"0x3F"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1524:3:2"},"nodeType":"YulFunctionCall","src":"1524:24:2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1510:3:2"},"nodeType":"YulFunctionCall","src":"1510:39:2"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1504:5:2"},"nodeType":"YulFunctionCall","src":"1504:46:2"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"1444:7:2"},"nodeType":"YulFunctionCall","src":"1444:124:2"},"nodeType":"YulExpressionStatement","src":"1444:124:2"},{"nodeType":"YulAssignment","src":"1585:30:2","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1602:9:2"},{"kind":"number","nodeType":"YulLiteral","src":"1613:1:2","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1598:3:2"},"nodeType":"YulFunctionCall","src":"1598:17:2"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1585:9:2"}]},{"expression":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1641:9:2"},{"arguments":[{"arguments":[{"name":"tablePtr","nodeType":"YulIdentifier","src":"1662:8:2"},{"arguments":[{"name":"input","nodeType":"YulIdentifier","src":"1676:5:2"},{"kind":"number","nodeType":"YulLiteral","src":"1683:4:2","type":"","value":"0x3F"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1672:3:2"},"nodeType":"YulFunctionCall","src":"1672:16:2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1658:3:2"},"nodeType":"YulFunctionCall","src":"1658:31:2"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1652:5:2"},"nodeType":"YulFunctionCall","src":"1652:38:2"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"1633:7:2"},"nodeType":"YulFunctionCall","src":"1633:58:2"},"nodeType":"YulExpressionStatement","src":"1633:58:2"},{"nodeType":"YulAssignment","src":"1708:30:2","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1725:9:2"},{"kind":"number","nodeType":"YulLiteral","src":"1736:1:2","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1721:3:2"},"nodeType":"YulFunctionCall","src":"1721:17:2"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1708:9:2"}]}]},"condition":{"arguments":[{"name":"dataPtr","nodeType":"YulIdentifier","src":"924:7:2"},{"name":"endPtr","nodeType":"YulIdentifier","src":"933:6:2"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"921:2:2"},"nodeType":"YulFunctionCall","src":"921:19:2"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"941:16:2","statements":[]},"pre":{"nodeType":"YulBlock","src":"816:104:2","statements":[{"nodeType":"YulVariableDeclaration","src":"834:19:2","value":{"name":"data","nodeType":"YulIdentifier","src":"849:4:2"},"variables":[{"name":"dataPtr","nodeType":"YulTypedName","src":"838:7:2","type":""}]},{"nodeType":"YulVariableDeclaration","src":"870:36:2","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"888:4:2"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"900:4:2"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"894:5:2"},"nodeType":"YulFunctionCall","src":"894:11:2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"884:3:2"},"nodeType":"YulFunctionCall","src":"884:22:2"},"variables":[{"name":"endPtr","nodeType":"YulTypedName","src":"874:6:2","type":""}]}]},"src":"812:940:2"},{"cases":[{"body":{"nodeType":"YulBlock","src":"1863:114:2","statements":[{"nodeType":"YulAssignment","src":"1933:30:2","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1950:9:2"},{"kind":"number","nodeType":"YulLiteral","src":"1961:1:2","type":"","value":"2"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1946:3:2"},"nodeType":"YulFunctionCall","src":"1946:17:2"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"1933:9:2"}]}]},"nodeType":"YulCase","src":"1856:121:2","value":{"kind":"number","nodeType":"YulLiteral","src":"1861:1:2","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"1997:119:2","statements":[{"nodeType":"YulAssignment","src":"2072:30:2","value":{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"2089:9:2"},{"kind":"number","nodeType":"YulLiteral","src":"2100:1:2","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2085:3:2"},"nodeType":"YulFunctionCall","src":"2085:17:2"},"variableNames":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"2072:9:2"}]}]},"nodeType":"YulCase","src":"1990:126:2","value":{"kind":"number","nodeType":"YulLiteral","src":"1995:1:2","type":"","value":"2"}}],"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1834:4:2"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1828:5:2"},"nodeType":"YulFunctionCall","src":"1828:11:2"},{"kind":"number","nodeType":"YulLiteral","src":"1841:1:2","type":"","value":"3"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"1824:3:2"},"nodeType":"YulFunctionCall","src":"1824:19:2"},"nodeType":"YulSwitch","src":"1817:299:2"},{"expression":{"arguments":[{"name":"result","nodeType":"YulIdentifier","src":"2208:6:2"},{"arguments":[{"name":"resultPtr","nodeType":"YulIdentifier","src":"2220:9:2"},{"arguments":[{"name":"result","nodeType":"YulIdentifier","src":"2235:6:2"},{"kind":"number","nodeType":"YulLiteral","src":"2243:2:2","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2231:3:2"},"nodeType":"YulFunctionCall","src":"2231:15:2"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2216:3:2"},"nodeType":"YulFunctionCall","src":"2216:31:2"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2201:6:2"},"nodeType":"YulFunctionCall","src":"2201:47:2"},"nodeType":"YulExpressionStatement","src":"2201:47:2"}]},"evmVersion":"paris","externalReferences":[{"declaration":1895,"isOffset":false,"isSlot":false,"src":"1834:4:2","valueSize":1},{"declaration":1895,"isOffset":false,"isSlot":false,"src":"849:4:2","valueSize":1},{"declaration":1895,"isOffset":false,"isSlot":false,"src":"888:4:2","valueSize":1},{"declaration":1895,"isOffset":false,"isSlot":false,"src":"900:4:2","valueSize":1},{"declaration":1912,"isOffset":false,"isSlot":false,"src":"2208:6:2","valueSize":1},{"declaration":1912,"isOffset":false,"isSlot":false,"src":"2235:6:2","valueSize":1},{"declaration":1912,"isOffset":false,"isSlot":false,"src":"787:6:2","valueSize":1},{"declaration":1908,"isOffset":false,"isSlot":false,"src":"744:5:2","valueSize":1}],"id":1927,"nodeType":"InlineAssembly","src":"701:1557:2"},{"expression":{"id":1928,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1912,"src":"2275:6:2","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":1899,"id":1929,"nodeType":"Return","src":"2268:13:2"}]},"id":1931,"implemented":true,"kind":"function","modifiers":[],"name":"encode","nameLocation":"385:6:2","nodeType":"FunctionDefinition","parameters":{"id":1896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1895,"mutability":"mutable","name":"data","nameLocation":"405:4:2","nodeType":"VariableDeclaration","scope":1931,"src":"392:17:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1894,"name":"bytes","nodeType":"ElementaryTypeName","src":"392:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"391:19:2"},"returnParameters":{"id":1899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1898,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1931,"src":"434:13:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1897,"name":"string","nodeType":"ElementaryTypeName","src":"434:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"433:15:2"},"scope":1932,"src":"376:1914:2","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":1933,"src":"176:2116:2","usedErrors":[],"usedEvents":[]}],"src":"39:2254:2"},"id":2},"contracts/FCL/WrapperFCLWebAuthn.sol":{"ast":{"absolutePath":"contracts/FCL/WrapperFCLWebAuthn.sol","exportedSymbols":{"FCL_WebAuthn":[247],"WrapperFCLWebAuthn":[1973]},"id":1974,"nodeType":"SourceUnit","nodes":[{"id":1934,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"0:23:3"},{"absolutePath":"FreshCryptoLib/FCL_Webauthn.sol","file":"FreshCryptoLib/FCL_Webauthn.sol","id":1936,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1974,"sourceUnit":248,"src":"25:61:3","symbolAliases":[{"foreign":{"id":1935,"name":"FCL_WebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"33:12:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"WrapperFCLWebAuthn","contractDependencies":[],"contractKind":"library","documentation":{"id":1937,"nodeType":"StructuredDocumentation","src":"88:471:3","text":"@title WrapperFCLWebAuthn\n @notice A library used to verify ECDSA signatures over secp256r1 through\n EIP-1271 of Webauthn payloads.\n @dev This lib is only a wrapper around the FCL_WebAuthn library.\n It is meant to be used with 1271 signatures.\n The wrapping is necessary because the FCL_WebAuthn has only internal\n functions and use calldata. This makes it impossible to use it with\n isValidSignature that use memory."},"fullyImplemented":true,"id":1973,"linearizedBaseContracts":[1973],"name":"WrapperFCLWebAuthn","nameLocation":"567:18:3","nodeType":"ContractDefinition","nodes":[{"body":{"id":1971,"nodeType":"Block","src":"909:254:3","statements":[{"expression":{"arguments":[{"id":1962,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1939,"src":"967:17:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1963,"name":"authenticatorDataFlagMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1941,"src":"998:25:3","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"id":1964,"name":"clientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1943,"src":"1037:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1965,"name":"clientChallenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1945,"src":"1061:15:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1966,"name":"clientChallengeDataOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1947,"src":"1090:25:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1967,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1951,"src":"1129:2:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}},{"id":1968,"name":"Q","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"1145:1:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"},{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2] calldata"}],"expression":{"id":1960,"name":"FCL_WebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"926:12:3","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FCL_WebAuthn_$247_$","typeString":"type(library FCL_WebAuthn)"}},"id":1961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"939:14:3","memberName":"checkSignature","nodeType":"MemberAccess","referencedDeclaration":156,"src":"926:27:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_calldata_ptr_$_t_bytes1_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$_t_array$_t_uint256_$2_calldata_ptr_$_t_array$_t_uint256_$2_calldata_ptr_$returns$_t_bool_$","typeString":"function (bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata,uint256[2] calldata) view returns (bool)"}},"id":1969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"926:230:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1959,"id":1970,"nodeType":"Return","src":"919:237:3"}]},"functionSelector":"0d5efec9","id":1972,"implemented":true,"kind":"function","modifiers":[],"name":"checkSignature","nameLocation":"601:14:3","nodeType":"FunctionDefinition","parameters":{"id":1956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1939,"mutability":"mutable","name":"authenticatorData","nameLocation":"640:17:3","nodeType":"VariableDeclaration","scope":1972,"src":"625:32:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1938,"name":"bytes","nodeType":"ElementaryTypeName","src":"625:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1941,"mutability":"mutable","name":"authenticatorDataFlagMask","nameLocation":"674:25:3","nodeType":"VariableDeclaration","scope":1972,"src":"667:32:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":1940,"name":"bytes1","nodeType":"ElementaryTypeName","src":"667:6:3","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":1943,"mutability":"mutable","name":"clientData","nameLocation":"724:10:3","nodeType":"VariableDeclaration","scope":1972,"src":"709:25:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1942,"name":"bytes","nodeType":"ElementaryTypeName","src":"709:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1945,"mutability":"mutable","name":"clientChallenge","nameLocation":"752:15:3","nodeType":"VariableDeclaration","scope":1972,"src":"744:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1944,"name":"bytes32","nodeType":"ElementaryTypeName","src":"744:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1947,"mutability":"mutable","name":"clientChallengeDataOffset","nameLocation":"785:25:3","nodeType":"VariableDeclaration","scope":1972,"src":"777:33:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1946,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1951,"mutability":"mutable","name":"rs","nameLocation":"840:2:3","nodeType":"VariableDeclaration","scope":1972,"src":"820:22:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":1948,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1950,"length":{"hexValue":"32","id":1949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"828:1:3","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"820:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":1955,"mutability":"mutable","name":"Q","nameLocation":"872:1:3","nodeType":"VariableDeclaration","scope":1972,"src":"852:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_calldata_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":1952,"name":"uint256","nodeType":"ElementaryTypeName","src":"852:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1954,"length":{"hexValue":"32","id":1953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"860:1:3","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"852:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"src":"615:264:3"},"returnParameters":{"id":1959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1958,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1972,"src":"903:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1957,"name":"bool","nodeType":"ElementaryTypeName","src":"903:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"902:6:3"},"scope":1973,"src":"592:571:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1974,"src":"559:606:3","usedErrors":[7,9],"usedEvents":[]}],"src":"0:1165:3"},"id":3},"contracts/P256Signer.sol":{"ast":{"absolutePath":"contracts/P256Signer.sol","exportedSymbols":{"P256Signer":[2140],"WrapperFCLWebAuthn":[1973]},"id":2141,"nodeType":"SourceUnit","nodes":[{"id":1975,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"0:23:4"},{"absolutePath":"contracts/FCL/WrapperFCLWebAuthn.sol","file":"./FCL/WrapperFCLWebAuthn.sol","id":1977,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2141,"sourceUnit":1974,"src":"25:64:4","symbolAliases":[{"foreign":{"id":1976,"name":"WrapperFCLWebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1973,"src":"33:18:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"P256Signer","contractDependencies":[],"contractKind":"contract","documentation":{"id":1978,"nodeType":"StructuredDocumentation","src":"91:242:4","text":"@title P256Signer\n @notice A contract used to verify ECDSA signatures over secp256r1 through\n EIP-1271 of Webauthn payloads.\n @dev This contract is the implementation. It is meant to be used through\n proxy clone."},"fullyImplemented":true,"id":2140,"linearizedBaseContracts":[2140],"name":"P256Signer","nameLocation":"342:10:4","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":1979,"nodeType":"StructuredDocumentation","src":"359:36:4","text":"@notice The EIP-1271 magic value"},"id":1982,"mutability":"constant","name":"EIP1271_MAGICVALUE","nameLocation":"425:18:4","nodeType":"VariableDeclaration","scope":2140,"src":"400:56:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1980,"name":"bytes4","nodeType":"ElementaryTypeName","src":"400:6:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"hexValue":"30783136323662613765","id":1981,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"446:10:4","typeDescriptions":{"typeIdentifier":"t_rational_371636862_by_1","typeString":"int_const 371636862"},"value":"0x1626ba7e"},"visibility":"internal"},{"constant":true,"documentation":{"id":1983,"nodeType":"StructuredDocumentation","src":"463:40:4","text":"@notice The old EIP-1271 magic value"},"id":1986,"mutability":"constant","name":"OLD_EIP1271_MAGICVALUE","nameLocation":"533:22:4","nodeType":"VariableDeclaration","scope":2140,"src":"508:60:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1984,"name":"bytes4","nodeType":"ElementaryTypeName","src":"508:6:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"hexValue":"30783230633133623062","id":1985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"558:10:4","typeDescriptions":{"typeIdentifier":"t_rational_549534475_by_1","typeString":"int_const 549534475"},"value":"0x20c13b0b"},"visibility":"internal"},{"constant":false,"documentation":{"id":1987,"nodeType":"StructuredDocumentation","src":"575:53:4","text":"@notice Whether the contract has been initialized"},"functionSelector":"158ef93e","id":1989,"mutability":"mutable","name":"initialized","nameLocation":"645:11:4","nodeType":"VariableDeclaration","scope":2140,"src":"633:23:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1988,"name":"bool","nodeType":"ElementaryTypeName","src":"633:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"documentation":{"id":1990,"nodeType":"StructuredDocumentation","src":"663:56:4","text":"@notice The x coordinate of the secp256r1 public key"},"functionSelector":"0c55699c","id":1992,"mutability":"mutable","name":"x","nameLocation":"739:1:4","nodeType":"VariableDeclaration","scope":2140,"src":"724:16:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1991,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":1993,"nodeType":"StructuredDocumentation","src":"747:56:4","text":"@notice The y coordinate of the secp256r1 public key"},"functionSelector":"a56dfe4a","id":1995,"mutability":"mutable","name":"y","nameLocation":"823:1:4","nodeType":"VariableDeclaration","scope":2140,"src":"808:16:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1994,"name":"uint256","nodeType":"ElementaryTypeName","src":"808:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"documentation":{"id":1996,"nodeType":"StructuredDocumentation","src":"831:55:4","text":"@notice Error message when the signature is invalid"},"errorSelector":"8baa579f","id":1998,"name":"InvalidSignature","nameLocation":"897:16:4","nodeType":"ErrorDefinition","parameters":{"id":1997,"nodeType":"ParameterList","parameters":[],"src":"913:2:4"},"src":"891:25:4"},{"documentation":{"id":1999,"nodeType":"StructuredDocumentation","src":"922:50:4","text":"@notice Error message when the hash is invalid"},"errorSelector":"0af806e0","id":2001,"name":"InvalidHash","nameLocation":"983:11:4","nodeType":"ErrorDefinition","parameters":{"id":2000,"nodeType":"ParameterList","parameters":[],"src":"994:2:4"},"src":"977:20:4"},{"documentation":{"id":2002,"nodeType":"StructuredDocumentation","src":"1003:66:4","text":"@notice Error message when the contract is already initialized"},"errorSelector":"0dc149f0","id":2004,"name":"AlreadyInitialized","nameLocation":"1080:18:4","nodeType":"ErrorDefinition","parameters":{"id":2003,"nodeType":"ParameterList","parameters":[],"src":"1098:2:4"},"src":"1074:27:4"},{"body":{"id":2011,"nodeType":"Block","src":"1121:35:4","statements":[{"expression":{"id":2009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2007,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1989,"src":"1131:11:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1145:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1131:18:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2010,"nodeType":"ExpressionStatement","src":"1131:18:4"}]},"id":2012,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2005,"nodeType":"ParameterList","parameters":[],"src":"1118:2:4"},"returnParameters":{"id":2006,"nodeType":"ParameterList","parameters":[],"src":"1121:0:4"},"scope":2140,"src":"1107:49:4","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2032,"nodeType":"Block","src":"1470:92:4","statements":[{"expression":{"arguments":[{"arguments":[{"id":2025,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2015,"src":"1501:5:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":2023,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1490:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1494:6:4","memberName":"encode","nodeType":"MemberAccess","src":"1490:10:4","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1490:17:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2027,"name":"_signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2017,"src":"1509:10:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2022,"name":"_validate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2113,"src":"1480:9:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory,bytes memory) view"}},"id":2028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1480:40:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2029,"nodeType":"ExpressionStatement","src":"1480:40:4"},{"expression":{"id":2030,"name":"EIP1271_MAGICVALUE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1982,"src":"1537:18:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":2021,"id":2031,"nodeType":"Return","src":"1530:25:4"}]},"documentation":{"id":2013,"nodeType":"StructuredDocumentation","src":"1162:208:4","text":"@notice Verifies that the signer is the owner of the secp256r1 public key.\n @param _hash The hash of the data signed\n @param _signature The signature\n @return The EIP-1271 magic value"},"functionSelector":"1626ba7e","id":2033,"implemented":true,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"1384:16:4","nodeType":"FunctionDefinition","parameters":{"id":2018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2015,"mutability":"mutable","name":"_hash","nameLocation":"1409:5:4","nodeType":"VariableDeclaration","scope":2033,"src":"1401:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2014,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1401:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2017,"mutability":"mutable","name":"_signature","nameLocation":"1429:10:4","nodeType":"VariableDeclaration","scope":2033,"src":"1416:23:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2016,"name":"bytes","nodeType":"ElementaryTypeName","src":"1416:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1400:40:4"},"returnParameters":{"id":2021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2020,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2033,"src":"1462:6:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2019,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1462:6:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1461:8:4"},"scope":2140,"src":"1375:187:4","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2050,"nodeType":"Block","src":"1997:84:4","statements":[{"expression":{"arguments":[{"id":2044,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2036,"src":"2017:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2045,"name":"_signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2038,"src":"2024:10:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2043,"name":"_validate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2113,"src":"2007:9:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory,bytes memory) view"}},"id":2046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2007:28:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2047,"nodeType":"ExpressionStatement","src":"2007:28:4"},{"expression":{"id":2048,"name":"OLD_EIP1271_MAGICVALUE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1986,"src":"2052:22:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":2042,"id":2049,"nodeType":"Return","src":"2045:29:4"}]},"documentation":{"id":2034,"nodeType":"StructuredDocumentation","src":"1568:324:4","text":"@notice Verifies that the signer is the owner of the secp256r1 public key.\n @dev This is the old version of the function of EIP-1271 using bytes\n memory instead of bytes32\n @param _hash The hash of the data signed\n @param _signature The signature\n @return The EIP-1271 magic value"},"functionSelector":"20c13b0b","id":2051,"implemented":true,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"1906:16:4","nodeType":"FunctionDefinition","parameters":{"id":2039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2036,"mutability":"mutable","name":"_hash","nameLocation":"1936:5:4","nodeType":"VariableDeclaration","scope":2051,"src":"1923:18:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2035,"name":"bytes","nodeType":"ElementaryTypeName","src":"1923:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2038,"mutability":"mutable","name":"_signature","nameLocation":"1956:10:4","nodeType":"VariableDeclaration","scope":2051,"src":"1943:23:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2037,"name":"bytes","nodeType":"ElementaryTypeName","src":"1943:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1922:45:4"},"returnParameters":{"id":2042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2041,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2051,"src":"1989:6:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2040,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1989:6:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1988:8:4"},"scope":2140,"src":"1897:184:4","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2112,"nodeType":"Block","src":"2279:414:4","statements":[{"assignments":[2060],"declarations":[{"constant":false,"id":2060,"mutability":"mutable","name":"_hash","nameLocation":"2297:5:4","nodeType":"VariableDeclaration","scope":2112,"src":"2289:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2059,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2289:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2064,"initialValue":{"arguments":[{"id":2062,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2054,"src":"2315:4:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2061,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2305:9:4","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2305:15:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2289:31:4"},{"assignments":[2066,2068,2070,2074],"declarations":[{"constant":false,"id":2066,"mutability":"mutable","name":"authenticatorData","nameLocation":"2344:17:4","nodeType":"VariableDeclaration","scope":2112,"src":"2331:30:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2065,"name":"bytes","nodeType":"ElementaryTypeName","src":"2331:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2068,"mutability":"mutable","name":"clientData","nameLocation":"2376:10:4","nodeType":"VariableDeclaration","scope":2112,"src":"2363:23:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2067,"name":"bytes","nodeType":"ElementaryTypeName","src":"2363:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2070,"mutability":"mutable","name":"challengeOffset","nameLocation":"2396:15:4","nodeType":"VariableDeclaration","scope":2112,"src":"2388:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2069,"name":"uint256","nodeType":"ElementaryTypeName","src":"2388:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2074,"mutability":"mutable","name":"rs","nameLocation":"2431:2:4","nodeType":"VariableDeclaration","scope":2112,"src":"2413:20:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":2071,"name":"uint256","nodeType":"ElementaryTypeName","src":"2413:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2073,"length":{"hexValue":"32","id":2072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2421:1:4","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"2413:10:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"id":2090,"initialValue":{"arguments":[{"id":2077,"name":"_signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2056,"src":"2460:10:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2473:5:4","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":2078,"name":"bytes","nodeType":"ElementaryTypeName","src":"2473:5:4","typeDescriptions":{}}},{"id":2081,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2480:5:4","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":2080,"name":"bytes","nodeType":"ElementaryTypeName","src":"2480:5:4","typeDescriptions":{}}},{"id":2083,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2487:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2082,"name":"uint256","nodeType":"ElementaryTypeName","src":"2487:7:4","typeDescriptions":{}}},{"baseExpression":{"id":2085,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2496:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2084,"name":"uint256","nodeType":"ElementaryTypeName","src":"2496:7:4","typeDescriptions":{}}},"id":2087,"indexExpression":{"hexValue":"32","id":2086,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2504:1:4","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"2496:10:4","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$2_memory_ptr_$","typeString":"type(uint256[2] memory)"}}],"id":2088,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2472:35:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$2_memory_ptr_$_$","typeString":"tuple(type(bytes storage pointer),type(bytes storage pointer),type(uint256),type(uint256[2] memory))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$2_memory_ptr_$_$","typeString":"tuple(type(bytes storage pointer),type(bytes storage pointer),type(uint256),type(uint256[2] memory))"}],"expression":{"id":2075,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2449:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2076,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2453:6:4","memberName":"decode","nodeType":"MemberAccess","src":"2449:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2449:59:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$2_memory_ptr_$","typeString":"tuple(bytes memory,bytes memory,uint256,uint256[2] memory)"}},"nodeType":"VariableDeclarationStatement","src":"2330:178:4"},{"assignments":[2092],"declarations":[{"constant":false,"id":2092,"mutability":"mutable","name":"valid","nameLocation":"2524:5:4","nodeType":"VariableDeclaration","scope":2112,"src":"2519:10:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2091,"name":"bool","nodeType":"ElementaryTypeName","src":"2519:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":2105,"initialValue":{"arguments":[{"id":2095,"name":"authenticatorData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2066,"src":"2566:17:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30783031","id":2096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2585:4:4","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"},{"id":2097,"name":"clientData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2068,"src":"2591:10:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2098,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2060,"src":"2603:5:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2099,"name":"challengeOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2070,"src":"2610:15:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2100,"name":"rs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2074,"src":"2627:2:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},{"components":[{"id":2101,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1992,"src":"2632:1:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2102,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1995,"src":"2635:1:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2103,"isConstant":false,"isInlineArray":true,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2631:6:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"},{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}],"expression":{"id":2093,"name":"WrapperFCLWebAuthn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1973,"src":"2532:18:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WrapperFCLWebAuthn_$1973_$","typeString":"type(library WrapperFCLWebAuthn)"}},"id":2094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2551:14:4","memberName":"checkSignature","nodeType":"MemberAccess","referencedDeclaration":1972,"src":"2532:33:4","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_bytes_memory_ptr_$_t_bytes1_$_t_bytes_memory_ptr_$_t_bytes32_$_t_uint256_$_t_array$_t_uint256_$2_memory_ptr_$_t_array$_t_uint256_$2_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes memory,bytes1,bytes memory,bytes32,uint256,uint256[2] memory,uint256[2] memory) view returns (bool)"}},"id":2104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2532:106:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"2519:119:4"},{"condition":{"id":2107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2653:6:4","subExpression":{"id":2106,"name":"valid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2092,"src":"2654:5:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2111,"nodeType":"IfStatement","src":"2649:37:4","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2108,"name":"InvalidSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1998,"src":"2668:16:4","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":2109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2668:18:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2110,"nodeType":"RevertStatement","src":"2661:25:4"}}]},"documentation":{"id":2052,"nodeType":"StructuredDocumentation","src":"2087:111:4","text":"@notice Validates the signature\n @param data The data signed\n @param _signature The signature"},"id":2113,"implemented":true,"kind":"function","modifiers":[],"name":"_validate","nameLocation":"2212:9:4","nodeType":"FunctionDefinition","parameters":{"id":2057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2054,"mutability":"mutable","name":"data","nameLocation":"2235:4:4","nodeType":"VariableDeclaration","scope":2113,"src":"2222:17:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2053,"name":"bytes","nodeType":"ElementaryTypeName","src":"2222:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2056,"mutability":"mutable","name":"_signature","nameLocation":"2254:10:4","nodeType":"VariableDeclaration","scope":2113,"src":"2241:23:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2055,"name":"bytes","nodeType":"ElementaryTypeName","src":"2241:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2221:44:4"},"returnParameters":{"id":2058,"nodeType":"ParameterList","parameters":[],"src":"2279:0:4"},"scope":2140,"src":"2203:490:4","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":2138,"nodeType":"Block","src":"3012:121:4","statements":[{"condition":{"id":2121,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1989,"src":"3026:11:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2125,"nodeType":"IfStatement","src":"3022:44:4","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2122,"name":"AlreadyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2004,"src":"3046:18:4","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":2123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3046:20:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2124,"nodeType":"RevertStatement","src":"3039:27:4"}},{"expression":{"id":2128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2126,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1989,"src":"3076:11:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2127,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3090:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3076:18:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2129,"nodeType":"ExpressionStatement","src":"3076:18:4"},{"expression":{"id":2132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2130,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1992,"src":"3104:1:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2131,"name":"x_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2116,"src":"3108:2:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3104:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2133,"nodeType":"ExpressionStatement","src":"3104:6:4"},{"expression":{"id":2136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2134,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1995,"src":"3120:1:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2135,"name":"y_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2118,"src":"3124:2:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3120:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2137,"nodeType":"ExpressionStatement","src":"3120:6:4"}]},"documentation":{"id":2114,"nodeType":"StructuredDocumentation","src":"2699:255:4","text":"@dev This function is only callable once and needs to be called immediately\n after deployment by the factory in the same transaction.\n @param x_ The x coordinate of the public key\n @param y_ The y coordinate of the public key"},"functionSelector":"e4a30116","id":2139,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"2968:10:4","nodeType":"FunctionDefinition","parameters":{"id":2119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2116,"mutability":"mutable","name":"x_","nameLocation":"2987:2:4","nodeType":"VariableDeclaration","scope":2139,"src":"2979:10:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2115,"name":"uint256","nodeType":"ElementaryTypeName","src":"2979:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2118,"mutability":"mutable","name":"y_","nameLocation":"2999:2:4","nodeType":"VariableDeclaration","scope":2139,"src":"2991:10:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2117,"name":"uint256","nodeType":"ElementaryTypeName","src":"2991:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2978:24:4"},"returnParameters":{"id":2120,"nodeType":"ParameterList","parameters":[],"src":"3012:0:4"},"scope":2140,"src":"2959:174:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2141,"src":"333:2802:4","usedErrors":[1998,2001,2004],"usedEvents":[]}],"src":"0:3136:4"},"id":4},"contracts/P256SignerFactory.sol":{"ast":{"absolutePath":"contracts/P256SignerFactory.sol","exportedSymbols":{"LibClone":[2432],"P256Signer":[2140],"P256SignerFactory":[2214]},"id":2215,"nodeType":"SourceUnit","nodes":[{"id":2142,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"0:23:5"},{"absolutePath":"contracts/P256Signer.sol","file":"./P256Signer.sol","id":2144,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2215,"sourceUnit":2141,"src":"25:44:5","symbolAliases":[{"foreign":{"id":2143,"name":"P256Signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2140,"src":"33:10:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"solady/src/utils/LibClone.sol","file":"solady/src/utils/LibClone.sol","id":2145,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2215,"sourceUnit":2433,"src":"70:39:5","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"P256SignerFactory","contractDependencies":[],"contractKind":"contract","documentation":{"id":2146,"nodeType":"StructuredDocumentation","src":"111:94:5","text":"@title P256SignerFactory\n @notice Factory contract for creating proxies for P256Signer"},"fullyImplemented":true,"id":2214,"linearizedBaseContracts":[2214],"name":"P256SignerFactory","nameLocation":"214:17:5","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":2147,"nodeType":"StructuredDocumentation","src":"238:65:5","text":"@notice The implementation address of the P256Signer contract"},"functionSelector":"5c60da1b","id":2149,"mutability":"immutable","name":"implementation","nameLocation":"333:14:5","nodeType":"VariableDeclaration","scope":2214,"src":"308:39:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2148,"name":"address","nodeType":"ElementaryTypeName","src":"308:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":2158,"nodeType":"Block","src":"391:49:5","statements":[{"expression":{"id":2156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2154,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2149,"src":"401:14:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2155,"name":"implementation_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2151,"src":"418:15:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"401:32:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2157,"nodeType":"ExpressionStatement","src":"401:32:5"}]},"id":2159,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2151,"mutability":"mutable","name":"implementation_","nameLocation":"374:15:5","nodeType":"VariableDeclaration","scope":2159,"src":"366:23:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2150,"name":"address","nodeType":"ElementaryTypeName","src":"366:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"365:25:5"},"returnParameters":{"id":2153,"nodeType":"ParameterList","parameters":[],"src":"391:0:5"},"scope":2214,"src":"354:86:5","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"anonymous":false,"documentation":{"id":2160,"nodeType":"StructuredDocumentation","src":"446:67:5","text":"@notice Emitted when a new P256Signer proxy contract is created"},"eventSelector":"33b61205835e3063eb8935cac4b29d7fc333ad80d6cb11893ba4758adf8cdde1","id":2168,"name":"NewSignerCreated","nameLocation":"524:16:5","nodeType":"EventDefinition","parameters":{"id":2167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2162,"indexed":true,"mutability":"mutable","name":"x","nameLocation":"557:1:5","nodeType":"VariableDeclaration","scope":2168,"src":"541:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2161,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2164,"indexed":true,"mutability":"mutable","name":"y","nameLocation":"576:1:5","nodeType":"VariableDeclaration","scope":2168,"src":"560:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2163,"name":"uint256","nodeType":"ElementaryTypeName","src":"560:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2166,"indexed":false,"mutability":"mutable","name":"signer","nameLocation":"587:6:5","nodeType":"VariableDeclaration","scope":2168,"src":"579:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2165,"name":"address","nodeType":"ElementaryTypeName","src":"579:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"540:54:5"},"src":"518:77:5"},{"body":{"id":2212,"nodeType":"Block","src":"826:254:5","statements":[{"assignments":[2179],"declarations":[{"constant":false,"id":2179,"mutability":"mutable","name":"salt","nameLocation":"844:4:5","nodeType":"VariableDeclaration","scope":2212,"src":"836:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2178,"name":"bytes32","nodeType":"ElementaryTypeName","src":"836:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2187,"initialValue":{"arguments":[{"arguments":[{"id":2183,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2171,"src":"878:1:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2184,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2173,"src":"881:1:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2181,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"861:3:5","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2182,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"865:12:5","memberName":"encodePacked","nodeType":"MemberAccess","src":"861:16:5","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"861:22:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2180,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"851:9:5","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"851:33:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"836:48:5"},{"assignments":[2189],"declarations":[{"constant":false,"id":2189,"mutability":"mutable","name":"signer","nameLocation":"902:6:5","nodeType":"VariableDeclaration","scope":2212,"src":"894:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2188,"name":"address","nodeType":"ElementaryTypeName","src":"894:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2195,"initialValue":{"arguments":[{"id":2192,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2149,"src":"939:14:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2193,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2179,"src":"955:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":2190,"name":"LibClone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2432,"src":"911:8:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibClone_$2432_$","typeString":"type(library LibClone)"}},"id":2191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"920:18:5","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":2245,"src":"911:27:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":2194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"911:49:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"894:66:5"},{"expression":{"arguments":[{"id":2200,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2171,"src":"1000:1:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2201,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2173,"src":"1003:1:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2197,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"981:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2196,"name":"P256Signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2140,"src":"970:10:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_P256Signer_$2140_$","typeString":"type(contract P256Signer)"}},"id":2198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"970:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_P256Signer_$2140","typeString":"contract P256Signer"}},"id":2199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"989:10:5","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":2139,"src":"970:29:5","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) external"}},"id":2202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"970:35:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2203,"nodeType":"ExpressionStatement","src":"970:35:5"},{"eventCall":{"arguments":[{"id":2205,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2171,"src":"1037:1:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2206,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2173,"src":"1040:1:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2207,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"1043:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2204,"name":"NewSignerCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2168,"src":"1020:16:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,uint256,address)"}},"id":2208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1020:30:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2209,"nodeType":"EmitStatement","src":"1015:35:5"},{"expression":{"id":2210,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"1067:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2177,"id":2211,"nodeType":"Return","src":"1060:13:5"}]},"documentation":{"id":2169,"nodeType":"StructuredDocumentation","src":"601:155:5","text":"@notice Creates a new P256Signer proxy contract\n @param x The x coordinate of the public key\n @param y The y coordinate of the public key"},"functionSelector":"9f7b4579","id":2213,"implemented":true,"kind":"function","modifiers":[],"name":"create","nameLocation":"770:6:5","nodeType":"FunctionDefinition","parameters":{"id":2174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2171,"mutability":"mutable","name":"x","nameLocation":"785:1:5","nodeType":"VariableDeclaration","scope":2213,"src":"777:9:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2170,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2173,"mutability":"mutable","name":"y","nameLocation":"796:1:5","nodeType":"VariableDeclaration","scope":2213,"src":"788:9:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2172,"name":"uint256","nodeType":"ElementaryTypeName","src":"788:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"776:22:5"},"returnParameters":{"id":2177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2176,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2213,"src":"817:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2175,"name":"address","nodeType":"ElementaryTypeName","src":"817:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"816:9:5"},"scope":2214,"src":"761:319:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2215,"src":"205:877:5","usedErrors":[],"usedEvents":[2168]}],"src":"0:1083:5"},"id":5},"solady/src/utils/LibClone.sol":{"ast":{"absolutePath":"solady/src/utils/LibClone.sol","exportedSymbols":{"LibClone":[2432]},"id":2433,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2216,"literals":["solidity","^","0.8",".4"],"nodeType":"PragmaDirective","src":"32:23:6"},{"abstract":false,"baseContracts":[],"canonicalName":"LibClone","contractDependencies":[],"contractKind":"library","documentation":{"id":2217,"nodeType":"StructuredDocumentation","src":"57:1443:6","text":"@notice Minimal proxy library.\n @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)\n @author Minimal proxy by 0age (https://github.com/0age)\n @author Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie\n (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)\n @dev Minimal proxy:\n Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime,\n it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern,\n which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.\n @dev Minimal proxy (PUSH0 variant):\n This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai.\n It is optimized first for minimal runtime gas, then for minimal bytecode.\n The PUSH0 clone functions are intentionally postfixed with a jarring \"_PUSH0\" as\n many EVM chains may not support the PUSH0 opcode in the early months after Shanghai.\n Please use with caution.\n @dev Clones with immutable args (CWIA):\n The implementation of CWIA here implements a `receive()` method that emits the\n `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata,\n enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards\n composability. The minimal proxy implementation does not offer this feature."},"fullyImplemented":true,"id":2432,"linearizedBaseContracts":[2432],"name":"LibClone","nameLocation":"1508:8:6","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2218,"nodeType":"StructuredDocumentation","src":"1806:36:6","text":"@dev Unable to deploy the clone."},"errorSelector":"30116425","id":2220,"name":"DeploymentFailed","nameLocation":"1853:16:6","nodeType":"ErrorDefinition","parameters":{"id":2219,"nodeType":"ParameterList","parameters":[],"src":"1869:2:6"},"src":"1847:25:6"},{"documentation":{"id":2221,"nodeType":"StructuredDocumentation","src":"1878:72:6","text":"@dev The salt must start with either the zero address or the caller."},"errorSelector":"2f634836","id":2223,"name":"SaltDoesNotStartWithCaller","nameLocation":"1961:26:6","nodeType":"ErrorDefinition","parameters":{"id":2222,"nodeType":"ParameterList","parameters":[],"src":"1987:2:6"},"src":"1955:35:6"},{"body":{"id":2232,"nodeType":"Block","src":"2404:5640:6","statements":[{"AST":{"nodeType":"YulBlock","src":"2466:5572:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7434:4:6","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"7440:28:6","type":"","value":"0x5af43d3d93803e602a57fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7427:6:6"},"nodeType":"YulFunctionCall","src":"7427:42:6"},"nodeType":"YulExpressionStatement","src":"7427:42:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7489:4:6","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"7495:14:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7482:6:6"},"nodeType":"YulFunctionCall","src":"7482:28:6"},"nodeType":"YulExpressionStatement","src":"7482:28:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7530:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"7536:42:6","type":"","value":"0x602c3d8160093d39f33d3d3d3d363d3d37363d73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7523:6:6"},"nodeType":"YulFunctionCall","src":"7523:56:6"},"nodeType":"YulExpressionStatement","src":"7523:56:6"},{"nodeType":"YulAssignment","src":"7592:33:6","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7611:1:6","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7614:4:6","type":"","value":"0x0c"},{"kind":"number","nodeType":"YulLiteral","src":"7620:4:6","type":"","value":"0x35"}],"functionName":{"name":"create","nodeType":"YulIdentifier","src":"7604:6:6"},"nodeType":"YulFunctionCall","src":"7604:21:6"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"7592:8:6"}]},{"body":{"nodeType":"YulBlock","src":"7704:210:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7801:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"7807:10:6","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7794:6:6"},"nodeType":"YulFunctionCall","src":"7794:24:6"},"nodeType":"YulExpressionStatement","src":"7794:24:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7889:4:6","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"7895:4:6","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7882:6:6"},"nodeType":"YulFunctionCall","src":"7882:18:6"},"nodeType":"YulExpressionStatement","src":"7882:18:6"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"7694:8:6"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7687:6:6"},"nodeType":"YulFunctionCall","src":"7687:16:6"},"nodeType":"YulIf","src":"7684:230:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8020:4:6","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"8026:1:6","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8013:6:6"},"nodeType":"YulFunctionCall","src":"8013:15:6"},"nodeType":"YulExpressionStatement","src":"8013:15:6"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":2226,"isOffset":false,"isSlot":false,"src":"7495:14:6","valueSize":1},{"declaration":2229,"isOffset":false,"isSlot":false,"src":"7592:8:6","valueSize":1},{"declaration":2229,"isOffset":false,"isSlot":false,"src":"7694:8:6","valueSize":1}],"id":2231,"nodeType":"InlineAssembly","src":"2457:5581:6"}]},"documentation":{"id":2224,"nodeType":"StructuredDocumentation","src":"2279:45:6","text":"@dev Deploys a clone of `implementation`."},"id":2233,"implemented":true,"kind":"function","modifiers":[],"name":"clone","nameLocation":"2338:5:6","nodeType":"FunctionDefinition","parameters":{"id":2227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2226,"mutability":"mutable","name":"implementation","nameLocation":"2352:14:6","nodeType":"VariableDeclaration","scope":2233,"src":"2344:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2225,"name":"address","nodeType":"ElementaryTypeName","src":"2344:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2343:24:6"},"returnParameters":{"id":2230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2229,"mutability":"mutable","name":"instance","nameLocation":"2394:8:6","nodeType":"VariableDeclaration","scope":2233,"src":"2386:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2228,"name":"address","nodeType":"ElementaryTypeName","src":"2386:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2385:18:6"},"scope":2432,"src":"2329:5715:6","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2244,"nodeType":"Block","src":"8248:700:6","statements":[{"AST":{"nodeType":"YulBlock","src":"8310:632:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8331:4:6","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"8337:28:6","type":"","value":"0x5af43d3d93803e602a57fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8324:6:6"},"nodeType":"YulFunctionCall","src":"8324:42:6"},"nodeType":"YulExpressionStatement","src":"8324:42:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8386:4:6","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"8392:14:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8379:6:6"},"nodeType":"YulFunctionCall","src":"8379:28:6"},"nodeType":"YulExpressionStatement","src":"8379:28:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8427:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"8433:42:6","type":"","value":"0x602c3d8160093d39f33d3d3d3d363d3d37363d73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8420:6:6"},"nodeType":"YulFunctionCall","src":"8420:56:6"},"nodeType":"YulExpressionStatement","src":"8420:56:6"},{"nodeType":"YulAssignment","src":"8489:40:6","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8509:1:6","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8512:4:6","type":"","value":"0x0c"},{"kind":"number","nodeType":"YulLiteral","src":"8518:4:6","type":"","value":"0x35"},{"name":"salt","nodeType":"YulIdentifier","src":"8524:4:6"}],"functionName":{"name":"create2","nodeType":"YulIdentifier","src":"8501:7:6"},"nodeType":"YulFunctionCall","src":"8501:28:6"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"8489:8:6"}]},{"body":{"nodeType":"YulBlock","src":"8608:210:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8705:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"8711:10:6","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8698:6:6"},"nodeType":"YulFunctionCall","src":"8698:24:6"},"nodeType":"YulExpressionStatement","src":"8698:24:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8793:4:6","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"8799:4:6","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8786:6:6"},"nodeType":"YulFunctionCall","src":"8786:18:6"},"nodeType":"YulExpressionStatement","src":"8786:18:6"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"8598:8:6"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8591:6:6"},"nodeType":"YulFunctionCall","src":"8591:16:6"},"nodeType":"YulIf","src":"8588:230:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8924:4:6","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"8930:1:6","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8917:6:6"},"nodeType":"YulFunctionCall","src":"8917:15:6"},"nodeType":"YulExpressionStatement","src":"8917:15:6"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":2236,"isOffset":false,"isSlot":false,"src":"8392:14:6","valueSize":1},{"declaration":2241,"isOffset":false,"isSlot":false,"src":"8489:8:6","valueSize":1},{"declaration":2241,"isOffset":false,"isSlot":false,"src":"8598:8:6","valueSize":1},{"declaration":2238,"isOffset":false,"isSlot":false,"src":"8524:4:6","valueSize":1}],"id":2243,"nodeType":"InlineAssembly","src":"8301:641:6"}]},"documentation":{"id":2234,"nodeType":"StructuredDocumentation","src":"8050:71:6","text":"@dev Deploys a deterministic clone of `implementation` with `salt`."},"id":2245,"implemented":true,"kind":"function","modifiers":[],"name":"cloneDeterministic","nameLocation":"8135:18:6","nodeType":"FunctionDefinition","parameters":{"id":2239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2236,"mutability":"mutable","name":"implementation","nameLocation":"8162:14:6","nodeType":"VariableDeclaration","scope":2245,"src":"8154:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2235,"name":"address","nodeType":"ElementaryTypeName","src":"8154:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2238,"mutability":"mutable","name":"salt","nameLocation":"8186:4:6","nodeType":"VariableDeclaration","scope":2245,"src":"8178:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2237,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8178:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8153:38:6"},"returnParameters":{"id":2242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2241,"mutability":"mutable","name":"instance","nameLocation":"8234:8:6","nodeType":"VariableDeclaration","scope":2245,"src":"8226:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2240,"name":"address","nodeType":"ElementaryTypeName","src":"8226:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8225:18:6"},"scope":2432,"src":"8126:822:6","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2254,"nodeType":"Block","src":"9182:400:6","statements":[{"AST":{"nodeType":"YulBlock","src":"9244:332:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9265:4:6","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"9271:28:6","type":"","value":"0x5af43d3d93803e602a57fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9258:6:6"},"nodeType":"YulFunctionCall","src":"9258:42:6"},"nodeType":"YulExpressionStatement","src":"9258:42:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9320:4:6","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"9326:14:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9313:6:6"},"nodeType":"YulFunctionCall","src":"9313:28:6"},"nodeType":"YulExpressionStatement","src":"9313:28:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9361:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"9367:42:6","type":"","value":"0x602c3d8160093d39f33d3d3d3d363d3d37363d73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9354:6:6"},"nodeType":"YulFunctionCall","src":"9354:56:6"},"nodeType":"YulExpressionStatement","src":"9354:56:6"},{"nodeType":"YulAssignment","src":"9423:29:6","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9441:4:6","type":"","value":"0x0c"},{"kind":"number","nodeType":"YulLiteral","src":"9447:4:6","type":"","value":"0x35"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"9431:9:6"},"nodeType":"YulFunctionCall","src":"9431:21:6"},"variableNames":[{"name":"hash","nodeType":"YulIdentifier","src":"9423:4:6"}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9558:4:6","type":"","value":"0x21"},{"kind":"number","nodeType":"YulLiteral","src":"9564:1:6","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9551:6:6"},"nodeType":"YulFunctionCall","src":"9551:15:6"},"nodeType":"YulExpressionStatement","src":"9551:15:6"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":2251,"isOffset":false,"isSlot":false,"src":"9423:4:6","valueSize":1},{"declaration":2248,"isOffset":false,"isSlot":false,"src":"9326:14:6","valueSize":1}],"id":2253,"nodeType":"InlineAssembly","src":"9235:341:6"}]},"documentation":{"id":2246,"nodeType":"StructuredDocumentation","src":"8954:140:6","text":"@dev Returns the initialization code hash of the clone of `implementation`.\n Used for mining vanity addresses with create2crunch."},"id":2255,"implemented":true,"kind":"function","modifiers":[],"name":"initCodeHash","nameLocation":"9108:12:6","nodeType":"FunctionDefinition","parameters":{"id":2249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2248,"mutability":"mutable","name":"implementation","nameLocation":"9129:14:6","nodeType":"VariableDeclaration","scope":2255,"src":"9121:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2247,"name":"address","nodeType":"ElementaryTypeName","src":"9121:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9120:24:6"},"returnParameters":{"id":2252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2251,"mutability":"mutable","name":"hash","nameLocation":"9176:4:6","nodeType":"VariableDeclaration","scope":2255,"src":"9168:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2250,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9168:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9167:14:6"},"scope":2432,"src":"9099:483:6","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2281,"nodeType":"Block","src":"9960:131:6","statements":[{"assignments":[2268],"declarations":[{"constant":false,"id":2268,"mutability":"mutable","name":"hash","nameLocation":"9978:4:6","nodeType":"VariableDeclaration","scope":2281,"src":"9970:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2267,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9970:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2272,"initialValue":{"arguments":[{"id":2270,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2258,"src":"9998:14:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2269,"name":"initCodeHash","nodeType":"Identifier","overloadedDeclarations":[2255,2379],"referencedDeclaration":2255,"src":"9985:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_bytes32_$","typeString":"function (address) pure returns (bytes32)"}},"id":2271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9985:28:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9970:43:6"},{"expression":{"id":2279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2273,"name":"predicted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2265,"src":"10023:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2275,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2268,"src":"10063:4:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2276,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"10069:4:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2277,"name":"deployer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2262,"src":"10075:8:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2274,"name":"predictDeterministicAddress","nodeType":"Identifier","overloadedDeclarations":[2282,2409,2423],"referencedDeclaration":2423,"src":"10035:27:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (bytes32,bytes32,address) pure returns (address)"}},"id":2278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10035:49:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10023:61:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2280,"nodeType":"ExpressionStatement","src":"10023:61:6"}]},"documentation":{"id":2256,"nodeType":"StructuredDocumentation","src":"9588:204:6","text":"@dev Returns the address of the deterministic clone of `implementation`,\n with `salt` by `deployer`.\n Note: The returned result has dirty upper 96 bits. Please clean if used in assembly."},"id":2282,"implemented":true,"kind":"function","modifiers":[],"name":"predictDeterministicAddress","nameLocation":"9806:27:6","nodeType":"FunctionDefinition","parameters":{"id":2263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2258,"mutability":"mutable","name":"implementation","nameLocation":"9842:14:6","nodeType":"VariableDeclaration","scope":2282,"src":"9834:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2257,"name":"address","nodeType":"ElementaryTypeName","src":"9834:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2260,"mutability":"mutable","name":"salt","nameLocation":"9866:4:6","nodeType":"VariableDeclaration","scope":2282,"src":"9858:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2259,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9858:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2262,"mutability":"mutable","name":"deployer","nameLocation":"9880:8:6","nodeType":"VariableDeclaration","scope":2282,"src":"9872:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2261,"name":"address","nodeType":"ElementaryTypeName","src":"9872:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9833:56:6"},"returnParameters":{"id":2266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2265,"mutability":"mutable","name":"predicted","nameLocation":"9945:9:6","nodeType":"VariableDeclaration","scope":2282,"src":"9937:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2264,"name":"address","nodeType":"ElementaryTypeName","src":"9937:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9936:19:6"},"scope":2432,"src":"9797:294:6","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2291,"nodeType":"Block","src":"10517:5754:6","statements":[{"AST":{"nodeType":"YulBlock","src":"10579:5686:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15638:4:6","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"15644:34:6","type":"","value":"0x5af43d5f5f3e6029573d5ffd5b3d5ff3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15631:6:6"},"nodeType":"YulFunctionCall","src":"15631:48:6"},"nodeType":"YulExpressionStatement","src":"15631:48:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15705:4:6","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"15711:14:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15698:6:6"},"nodeType":"YulFunctionCall","src":"15698:28:6"},"nodeType":"YulExpressionStatement","src":"15698:28:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15752:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"15758:38:6","type":"","value":"0x602d5f8160095f39f35f5f365f5f37365f73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15745:6:6"},"nodeType":"YulFunctionCall","src":"15745:52:6"},"nodeType":"YulExpressionStatement","src":"15745:52:6"},{"nodeType":"YulAssignment","src":"15819:33:6","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15838:1:6","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15841:4:6","type":"","value":"0x0e"},{"kind":"number","nodeType":"YulLiteral","src":"15847:4:6","type":"","value":"0x36"}],"functionName":{"name":"create","nodeType":"YulIdentifier","src":"15831:6:6"},"nodeType":"YulFunctionCall","src":"15831:21:6"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"15819:8:6"}]},{"body":{"nodeType":"YulBlock","src":"15931:210:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16028:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"16034:10:6","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16021:6:6"},"nodeType":"YulFunctionCall","src":"16021:24:6"},"nodeType":"YulExpressionStatement","src":"16021:24:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16116:4:6","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"16122:4:6","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16109:6:6"},"nodeType":"YulFunctionCall","src":"16109:18:6"},"nodeType":"YulExpressionStatement","src":"16109:18:6"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"15921:8:6"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"15914:6:6"},"nodeType":"YulFunctionCall","src":"15914:16:6"},"nodeType":"YulIf","src":"15911:230:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16247:4:6","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"16253:1:6","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16240:6:6"},"nodeType":"YulFunctionCall","src":"16240:15:6"},"nodeType":"YulExpressionStatement","src":"16240:15:6"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":2285,"isOffset":false,"isSlot":false,"src":"15711:14:6","valueSize":1},{"declaration":2288,"isOffset":false,"isSlot":false,"src":"15819:8:6","valueSize":1},{"declaration":2288,"isOffset":false,"isSlot":false,"src":"15921:8:6","valueSize":1}],"id":2290,"nodeType":"InlineAssembly","src":"10570:5695:6"}]},"documentation":{"id":2283,"nodeType":"StructuredDocumentation","src":"10380:51:6","text":"@dev Deploys a PUSH0 clone of `implementation`."},"id":2292,"implemented":true,"kind":"function","modifiers":[],"name":"clone_PUSH0","nameLocation":"10445:11:6","nodeType":"FunctionDefinition","parameters":{"id":2286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2285,"mutability":"mutable","name":"implementation","nameLocation":"10465:14:6","nodeType":"VariableDeclaration","scope":2292,"src":"10457:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2284,"name":"address","nodeType":"ElementaryTypeName","src":"10457:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10456:24:6"},"returnParameters":{"id":2289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2288,"mutability":"mutable","name":"instance","nameLocation":"10507:8:6","nodeType":"VariableDeclaration","scope":2292,"src":"10499:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2287,"name":"address","nodeType":"ElementaryTypeName","src":"10499:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10498:18:6"},"scope":2432,"src":"10436:5835:6","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2303,"nodeType":"Block","src":"16487:723:6","statements":[{"AST":{"nodeType":"YulBlock","src":"16549:655:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16570:4:6","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"16576:34:6","type":"","value":"0x5af43d5f5f3e6029573d5ffd5b3d5ff3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16563:6:6"},"nodeType":"YulFunctionCall","src":"16563:48:6"},"nodeType":"YulExpressionStatement","src":"16563:48:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16637:4:6","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"16643:14:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16630:6:6"},"nodeType":"YulFunctionCall","src":"16630:28:6"},"nodeType":"YulExpressionStatement","src":"16630:28:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16684:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"16690:38:6","type":"","value":"0x602d5f8160095f39f35f5f365f5f37365f73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16677:6:6"},"nodeType":"YulFunctionCall","src":"16677:52:6"},"nodeType":"YulExpressionStatement","src":"16677:52:6"},{"nodeType":"YulAssignment","src":"16751:40:6","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16771:1:6","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16774:4:6","type":"","value":"0x0e"},{"kind":"number","nodeType":"YulLiteral","src":"16780:4:6","type":"","value":"0x36"},{"name":"salt","nodeType":"YulIdentifier","src":"16786:4:6"}],"functionName":{"name":"create2","nodeType":"YulIdentifier","src":"16763:7:6"},"nodeType":"YulFunctionCall","src":"16763:28:6"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"16751:8:6"}]},{"body":{"nodeType":"YulBlock","src":"16870:210:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16967:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"16973:10:6","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16960:6:6"},"nodeType":"YulFunctionCall","src":"16960:24:6"},"nodeType":"YulExpressionStatement","src":"16960:24:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17055:4:6","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"17061:4:6","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17048:6:6"},"nodeType":"YulFunctionCall","src":"17048:18:6"},"nodeType":"YulExpressionStatement","src":"17048:18:6"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"16860:8:6"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16853:6:6"},"nodeType":"YulFunctionCall","src":"16853:16:6"},"nodeType":"YulIf","src":"16850:230:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17186:4:6","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"17192:1:6","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17179:6:6"},"nodeType":"YulFunctionCall","src":"17179:15:6"},"nodeType":"YulExpressionStatement","src":"17179:15:6"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":2295,"isOffset":false,"isSlot":false,"src":"16643:14:6","valueSize":1},{"declaration":2300,"isOffset":false,"isSlot":false,"src":"16751:8:6","valueSize":1},{"declaration":2300,"isOffset":false,"isSlot":false,"src":"16860:8:6","valueSize":1},{"declaration":2297,"isOffset":false,"isSlot":false,"src":"16786:4:6","valueSize":1}],"id":2302,"nodeType":"InlineAssembly","src":"16540:664:6"}]},"documentation":{"id":2293,"nodeType":"StructuredDocumentation","src":"16277:77:6","text":"@dev Deploys a deterministic PUSH0 clone of `implementation` with `salt`."},"id":2304,"implemented":true,"kind":"function","modifiers":[],"name":"cloneDeterministic_PUSH0","nameLocation":"16368:24:6","nodeType":"FunctionDefinition","parameters":{"id":2298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2295,"mutability":"mutable","name":"implementation","nameLocation":"16401:14:6","nodeType":"VariableDeclaration","scope":2304,"src":"16393:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2294,"name":"address","nodeType":"ElementaryTypeName","src":"16393:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2297,"mutability":"mutable","name":"salt","nameLocation":"16425:4:6","nodeType":"VariableDeclaration","scope":2304,"src":"16417:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2296,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16417:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16392:38:6"},"returnParameters":{"id":2301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2300,"mutability":"mutable","name":"instance","nameLocation":"16473:8:6","nodeType":"VariableDeclaration","scope":2304,"src":"16465:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2299,"name":"address","nodeType":"ElementaryTypeName","src":"16465:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16464:18:6"},"scope":2432,"src":"16359:851:6","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2313,"nodeType":"Block","src":"17456:423:6","statements":[{"AST":{"nodeType":"YulBlock","src":"17518:355:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17539:4:6","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"17545:34:6","type":"","value":"0x5af43d5f5f3e6029573d5ffd5b3d5ff3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17532:6:6"},"nodeType":"YulFunctionCall","src":"17532:48:6"},"nodeType":"YulExpressionStatement","src":"17532:48:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17606:4:6","type":"","value":"0x14"},{"name":"implementation","nodeType":"YulIdentifier","src":"17612:14:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17599:6:6"},"nodeType":"YulFunctionCall","src":"17599:28:6"},"nodeType":"YulExpressionStatement","src":"17599:28:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17653:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"17659:38:6","type":"","value":"0x602d5f8160095f39f35f5f365f5f37365f73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17646:6:6"},"nodeType":"YulFunctionCall","src":"17646:52:6"},"nodeType":"YulExpressionStatement","src":"17646:52:6"},{"nodeType":"YulAssignment","src":"17720:29:6","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17738:4:6","type":"","value":"0x0e"},{"kind":"number","nodeType":"YulLiteral","src":"17744:4:6","type":"","value":"0x36"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"17728:9:6"},"nodeType":"YulFunctionCall","src":"17728:21:6"},"variableNames":[{"name":"hash","nodeType":"YulIdentifier","src":"17720:4:6"}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17855:4:6","type":"","value":"0x24"},{"kind":"number","nodeType":"YulLiteral","src":"17861:1:6","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17848:6:6"},"nodeType":"YulFunctionCall","src":"17848:15:6"},"nodeType":"YulExpressionStatement","src":"17848:15:6"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":2310,"isOffset":false,"isSlot":false,"src":"17720:4:6","valueSize":1},{"declaration":2307,"isOffset":false,"isSlot":false,"src":"17612:14:6","valueSize":1}],"id":2312,"nodeType":"InlineAssembly","src":"17509:364:6"}]},"documentation":{"id":2305,"nodeType":"StructuredDocumentation","src":"17216:146:6","text":"@dev Returns the initialization code hash of the PUSH0 clone of `implementation`.\n Used for mining vanity addresses with create2crunch."},"id":2314,"implemented":true,"kind":"function","modifiers":[],"name":"initCodeHash_PUSH0","nameLocation":"17376:18:6","nodeType":"FunctionDefinition","parameters":{"id":2308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2307,"mutability":"mutable","name":"implementation","nameLocation":"17403:14:6","nodeType":"VariableDeclaration","scope":2314,"src":"17395:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2306,"name":"address","nodeType":"ElementaryTypeName","src":"17395:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17394:24:6"},"returnParameters":{"id":2311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2310,"mutability":"mutable","name":"hash","nameLocation":"17450:4:6","nodeType":"VariableDeclaration","scope":2314,"src":"17442:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2309,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17442:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17441:14:6"},"scope":2432,"src":"17367:512:6","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2340,"nodeType":"Block","src":"18271:137:6","statements":[{"assignments":[2327],"declarations":[{"constant":false,"id":2327,"mutability":"mutable","name":"hash","nameLocation":"18289:4:6","nodeType":"VariableDeclaration","scope":2340,"src":"18281:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2326,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18281:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2331,"initialValue":{"arguments":[{"id":2329,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2317,"src":"18315:14:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2328,"name":"initCodeHash_PUSH0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2314,"src":"18296:18:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_bytes32_$","typeString":"function (address) pure returns (bytes32)"}},"id":2330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18296:34:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"18281:49:6"},{"expression":{"id":2338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2332,"name":"predicted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2324,"src":"18340:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2334,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2327,"src":"18380:4:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2335,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"18386:4:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2336,"name":"deployer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2321,"src":"18392:8:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2333,"name":"predictDeterministicAddress","nodeType":"Identifier","overloadedDeclarations":[2282,2409,2423],"referencedDeclaration":2423,"src":"18352:27:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (bytes32,bytes32,address) pure returns (address)"}},"id":2337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18352:49:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18340:61:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2339,"nodeType":"ExpressionStatement","src":"18340:61:6"}]},"documentation":{"id":2315,"nodeType":"StructuredDocumentation","src":"17885:210:6","text":"@dev Returns the address of the deterministic PUSH0 clone of `implementation`,\n with `salt` by `deployer`.\n Note: The returned result has dirty upper 96 bits. Please clean if used in assembly."},"id":2341,"implemented":true,"kind":"function","modifiers":[],"name":"predictDeterministicAddress_PUSH0","nameLocation":"18109:33:6","nodeType":"FunctionDefinition","parameters":{"id":2322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2317,"mutability":"mutable","name":"implementation","nameLocation":"18160:14:6","nodeType":"VariableDeclaration","scope":2341,"src":"18152:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2316,"name":"address","nodeType":"ElementaryTypeName","src":"18152:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2319,"mutability":"mutable","name":"salt","nameLocation":"18192:4:6","nodeType":"VariableDeclaration","scope":2341,"src":"18184:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2318,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18184:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2321,"mutability":"mutable","name":"deployer","nameLocation":"18214:8:6","nodeType":"VariableDeclaration","scope":2341,"src":"18206:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2320,"name":"address","nodeType":"ElementaryTypeName","src":"18206:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18142:86:6"},"returnParameters":{"id":2325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2324,"mutability":"mutable","name":"predicted","nameLocation":"18260:9:6","nodeType":"VariableDeclaration","scope":2341,"src":"18252:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2323,"name":"address","nodeType":"ElementaryTypeName","src":"18252:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18251:19:6"},"scope":2432,"src":"18100:308:6","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2352,"nodeType":"Block","src":"19102:11230:6","statements":[{"AST":{"nodeType":"YulBlock","src":"19121:11205:6","statements":[{"nodeType":"YulVariableDeclaration","src":"19223:38:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"19249:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"19255:4:6","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19245:3:6"},"nodeType":"YulFunctionCall","src":"19245:15:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19239:5:6"},"nodeType":"YulFunctionCall","src":"19239:22:6"},"variables":[{"name":"mBefore3","nodeType":"YulTypedName","src":"19227:8:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19274:38:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"19300:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"19306:4:6","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19296:3:6"},"nodeType":"YulFunctionCall","src":"19296:15:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19290:5:6"},"nodeType":"YulFunctionCall","src":"19290:22:6"},"variables":[{"name":"mBefore2","nodeType":"YulTypedName","src":"19278:8:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19325:38:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"19351:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"19357:4:6","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19347:3:6"},"nodeType":"YulFunctionCall","src":"19347:15:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19341:5:6"},"nodeType":"YulFunctionCall","src":"19341:22:6"},"variables":[{"name":"mBefore1","nodeType":"YulTypedName","src":"19329:8:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19376:29:6","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"19400:4:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19394:5:6"},"nodeType":"YulFunctionCall","src":"19394:11:6"},"variables":[{"name":"dataLength","nodeType":"YulTypedName","src":"19380:10:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19418:47:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"19441:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"19447:4:6","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19437:3:6"},"nodeType":"YulFunctionCall","src":"19437:15:6"},{"name":"dataLength","nodeType":"YulIdentifier","src":"19454:10:6"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19433:3:6"},"nodeType":"YulFunctionCall","src":"19433:32:6"},"variables":[{"name":"dataEnd","nodeType":"YulTypedName","src":"19422:7:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19478:29:6","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19499:7:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19493:5:6"},"nodeType":"YulFunctionCall","src":"19493:14:6"},"variables":[{"name":"mAfter1","nodeType":"YulTypedName","src":"19482:7:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19602:37:6","value":{"arguments":[{"name":"dataLength","nodeType":"YulIdentifier","src":"19625:10:6"},{"kind":"number","nodeType":"YulLiteral","src":"19637:1:6","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19621:3:6"},"nodeType":"YulFunctionCall","src":"19621:18:6"},"variables":[{"name":"extraLength","nodeType":"YulTypedName","src":"19606:11:6","type":""}]},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"28669:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"28675:28:6","type":"","value":"0x5af43d3d93803e606057fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28662:6:6"},"nodeType":"YulFunctionCall","src":"28662:42:6"},"nodeType":"YulExpressionStatement","src":"28662:42:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"28784:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"28790:4:6","type":"","value":"0x0d"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28780:3:6"},"nodeType":"YulFunctionCall","src":"28780:15:6"},{"name":"implementation","nodeType":"YulIdentifier","src":"28797:14:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28773:6:6"},"nodeType":"YulFunctionCall","src":"28773:39:6"},"nodeType":"YulExpressionStatement","src":"28773:39:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"28900:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"28906:4:6","type":"","value":"0x21"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28896:3:6"},"nodeType":"YulFunctionCall","src":"28896:15:6"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28936:4:6","type":"","value":"0x48"},{"name":"extraLength","nodeType":"YulIdentifier","src":"28942:11:6"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28932:3:6"},"nodeType":"YulFunctionCall","src":"28932:22:6"},{"kind":"number","nodeType":"YulLiteral","src":"28956:52:6","type":"","value":"0x593da1005b363d3d373d3d3d3d610000806062363936013d73"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"28929:2:6"},"nodeType":"YulFunctionCall","src":"28929:80:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28872:6:6"},"nodeType":"YulFunctionCall","src":"28872:151:6"},"nodeType":"YulExpressionStatement","src":"28872:151:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"29114:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"29120:4:6","type":"","value":"0x3a"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29110:3:6"},"nodeType":"YulFunctionCall","src":"29110:15:6"},{"kind":"number","nodeType":"YulLiteral","src":"29127:66:6","type":"","value":"0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29086:6:6"},"nodeType":"YulFunctionCall","src":"29086:121:6"},"nodeType":"YulExpressionStatement","src":"29086:121:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"29431:4:6"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29441:4:6","type":"","value":"0x59"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"29450:11:6"},{"kind":"number","nodeType":"YulLiteral","src":"29463:6:6","type":"","value":"0xff9e"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"29447:2:6"},"nodeType":"YulFunctionCall","src":"29447:23:6"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29437:3:6"},"nodeType":"YulFunctionCall","src":"29437:34:6"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29427:3:6"},"nodeType":"YulFunctionCall","src":"29427:45:6"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29497:4:6","type":"","value":"0x78"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"29507:11:6"},{"kind":"number","nodeType":"YulLiteral","src":"29520:4:6","type":"","value":"0x62"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29503:3:6"},"nodeType":"YulFunctionCall","src":"29503:22:6"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29493:3:6"},"nodeType":"YulFunctionCall","src":"29493:33:6"},{"kind":"number","nodeType":"YulLiteral","src":"29528:40:6","type":"","value":"0xfd6100003d81600a3d39f336602c57343d527f"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"29490:2:6"},"nodeType":"YulFunctionCall","src":"29490:79:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29220:6:6"},"nodeType":"YulFunctionCall","src":"29220:363:6"},"nodeType":"YulExpressionStatement","src":"29220:363:6"},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"29603:7:6"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29616:4:6","type":"","value":"0xf0"},{"name":"extraLength","nodeType":"YulIdentifier","src":"29622:11:6"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29612:3:6"},"nodeType":"YulFunctionCall","src":"29612:22:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29596:6:6"},"nodeType":"YulFunctionCall","src":"29596:39:6"},"nodeType":"YulExpressionStatement","src":"29596:39:6"},{"nodeType":"YulAssignment","src":"29685:62:6","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29704:1:6","type":"","value":"0"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"29711:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"29717:4:6","type":"","value":"0x4c"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29707:3:6"},"nodeType":"YulFunctionCall","src":"29707:15:6"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"29728:11:6"},{"kind":"number","nodeType":"YulLiteral","src":"29741:4:6","type":"","value":"0x6c"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29724:3:6"},"nodeType":"YulFunctionCall","src":"29724:22:6"}],"functionName":{"name":"create","nodeType":"YulIdentifier","src":"29697:6:6"},"nodeType":"YulFunctionCall","src":"29697:50:6"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"29685:8:6"}]},{"body":{"nodeType":"YulBlock","src":"29827:210:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29924:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"29930:10:6","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29917:6:6"},"nodeType":"YulFunctionCall","src":"29917:24:6"},"nodeType":"YulExpressionStatement","src":"29917:24:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30012:4:6","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"30018:4:6","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"30005:6:6"},"nodeType":"YulFunctionCall","src":"30005:18:6"},"nodeType":"YulExpressionStatement","src":"30005:18:6"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"29817:8:6"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29810:6:6"},"nodeType":"YulFunctionCall","src":"29810:16:6"},"nodeType":"YulIf","src":"29807:230:6"},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"30124:7:6"},{"name":"mAfter1","nodeType":"YulIdentifier","src":"30133:7:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30117:6:6"},"nodeType":"YulFunctionCall","src":"30117:24:6"},"nodeType":"YulExpressionStatement","src":"30117:24:6"},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"30161:4:6"},{"name":"dataLength","nodeType":"YulIdentifier","src":"30167:10:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30154:6:6"},"nodeType":"YulFunctionCall","src":"30154:24:6"},"nodeType":"YulExpressionStatement","src":"30154:24:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"30202:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"30208:4:6","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30198:3:6"},"nodeType":"YulFunctionCall","src":"30198:15:6"},{"name":"mBefore1","nodeType":"YulIdentifier","src":"30215:8:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30191:6:6"},"nodeType":"YulFunctionCall","src":"30191:33:6"},"nodeType":"YulExpressionStatement","src":"30191:33:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"30248:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"30254:4:6","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30244:3:6"},"nodeType":"YulFunctionCall","src":"30244:15:6"},{"name":"mBefore2","nodeType":"YulIdentifier","src":"30261:8:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30237:6:6"},"nodeType":"YulFunctionCall","src":"30237:33:6"},"nodeType":"YulExpressionStatement","src":"30237:33:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"30294:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"30300:4:6","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30290:3:6"},"nodeType":"YulFunctionCall","src":"30290:15:6"},{"name":"mBefore3","nodeType":"YulIdentifier","src":"30307:8:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30283:6:6"},"nodeType":"YulFunctionCall","src":"30283:33:6"},"nodeType":"YulExpressionStatement","src":"30283:33:6"}]},"evmVersion":"paris","externalReferences":[{"declaration":2346,"isOffset":false,"isSlot":false,"src":"19249:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"19300:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"19351:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"19400:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"19441:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"28669:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"28784:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"28900:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"29114:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"29431:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"29711:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"30161:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"30202:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"30248:4:6","valueSize":1},{"declaration":2346,"isOffset":false,"isSlot":false,"src":"30294:4:6","valueSize":1},{"declaration":2344,"isOffset":false,"isSlot":false,"src":"28797:14:6","valueSize":1},{"declaration":2349,"isOffset":false,"isSlot":false,"src":"29685:8:6","valueSize":1},{"declaration":2349,"isOffset":false,"isSlot":false,"src":"29817:8:6","valueSize":1}],"id":2351,"nodeType":"InlineAssembly","src":"19112:11214:6"}]},"documentation":{"id":2342,"nodeType":"StructuredDocumentation","src":"18697:306:6","text":"@dev Deploys a minimal proxy with `implementation`,\n using immutable arguments encoded in `data`.\n Note: This implementation of CWIA differs from the original implementation.\n If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`."},"id":2353,"implemented":true,"kind":"function","modifiers":[],"name":"clone","nameLocation":"19017:5:6","nodeType":"FunctionDefinition","parameters":{"id":2347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2344,"mutability":"mutable","name":"implementation","nameLocation":"19031:14:6","nodeType":"VariableDeclaration","scope":2353,"src":"19023:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2343,"name":"address","nodeType":"ElementaryTypeName","src":"19023:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2346,"mutability":"mutable","name":"data","nameLocation":"19060:4:6","nodeType":"VariableDeclaration","scope":2353,"src":"19047:17:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2345,"name":"bytes","nodeType":"ElementaryTypeName","src":"19047:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19022:43:6"},"returnParameters":{"id":2350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2349,"mutability":"mutable","name":"instance","nameLocation":"19092:8:6","nodeType":"VariableDeclaration","scope":2353,"src":"19084:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2348,"name":"address","nodeType":"ElementaryTypeName","src":"19084:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19083:18:6"},"scope":2432,"src":"19008:11324:6","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2366,"nodeType":"Block","src":"30807:2279:6","statements":[{"AST":{"nodeType":"YulBlock","src":"30826:2254:6","statements":[{"nodeType":"YulVariableDeclaration","src":"30928:38:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"30954:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"30960:4:6","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30950:3:6"},"nodeType":"YulFunctionCall","src":"30950:15:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30944:5:6"},"nodeType":"YulFunctionCall","src":"30944:22:6"},"variables":[{"name":"mBefore3","nodeType":"YulTypedName","src":"30932:8:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"30979:38:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31005:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"31011:4:6","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31001:3:6"},"nodeType":"YulFunctionCall","src":"31001:15:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30995:5:6"},"nodeType":"YulFunctionCall","src":"30995:22:6"},"variables":[{"name":"mBefore2","nodeType":"YulTypedName","src":"30983:8:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31030:38:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31056:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"31062:4:6","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31052:3:6"},"nodeType":"YulFunctionCall","src":"31052:15:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31046:5:6"},"nodeType":"YulFunctionCall","src":"31046:22:6"},"variables":[{"name":"mBefore1","nodeType":"YulTypedName","src":"31034:8:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31081:29:6","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31105:4:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31099:5:6"},"nodeType":"YulFunctionCall","src":"31099:11:6"},"variables":[{"name":"dataLength","nodeType":"YulTypedName","src":"31085:10:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31123:47:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31146:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"31152:4:6","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31142:3:6"},"nodeType":"YulFunctionCall","src":"31142:15:6"},{"name":"dataLength","nodeType":"YulIdentifier","src":"31159:10:6"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31138:3:6"},"nodeType":"YulFunctionCall","src":"31138:32:6"},"variables":[{"name":"dataEnd","nodeType":"YulTypedName","src":"31127:7:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31183:29:6","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"31204:7:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31198:5:6"},"nodeType":"YulFunctionCall","src":"31198:14:6"},"variables":[{"name":"mAfter1","nodeType":"YulTypedName","src":"31187:7:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"31307:37:6","value":{"arguments":[{"name":"dataLength","nodeType":"YulIdentifier","src":"31330:10:6"},{"kind":"number","nodeType":"YulLiteral","src":"31342:1:6","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31326:3:6"},"nodeType":"YulFunctionCall","src":"31326:18:6"},"variables":[{"name":"extraLength","nodeType":"YulTypedName","src":"31311:11:6","type":""}]},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31416:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"31422:28:6","type":"","value":"0x5af43d3d93803e606057fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31409:6:6"},"nodeType":"YulFunctionCall","src":"31409:42:6"},"nodeType":"YulExpressionStatement","src":"31409:42:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31531:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"31537:4:6","type":"","value":"0x0d"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31527:3:6"},"nodeType":"YulFunctionCall","src":"31527:15:6"},{"name":"implementation","nodeType":"YulIdentifier","src":"31544:14:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31520:6:6"},"nodeType":"YulFunctionCall","src":"31520:39:6"},"nodeType":"YulExpressionStatement","src":"31520:39:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31647:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"31653:4:6","type":"","value":"0x21"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31643:3:6"},"nodeType":"YulFunctionCall","src":"31643:15:6"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"31683:4:6","type":"","value":"0x48"},{"name":"extraLength","nodeType":"YulIdentifier","src":"31689:11:6"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"31679:3:6"},"nodeType":"YulFunctionCall","src":"31679:22:6"},{"kind":"number","nodeType":"YulLiteral","src":"31703:52:6","type":"","value":"0x593da1005b363d3d373d3d3d3d610000806062363936013d73"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"31676:2:6"},"nodeType":"YulFunctionCall","src":"31676:80:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31619:6:6"},"nodeType":"YulFunctionCall","src":"31619:151:6"},"nodeType":"YulExpressionStatement","src":"31619:151:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"31861:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"31867:4:6","type":"","value":"0x3a"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31857:3:6"},"nodeType":"YulFunctionCall","src":"31857:15:6"},{"kind":"number","nodeType":"YulLiteral","src":"31874:66:6","type":"","value":"0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31833:6:6"},"nodeType":"YulFunctionCall","src":"31833:121:6"},"nodeType":"YulExpressionStatement","src":"31833:121:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"32178:4:6"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32188:4:6","type":"","value":"0x59"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"32197:11:6"},{"kind":"number","nodeType":"YulLiteral","src":"32210:6:6","type":"","value":"0xff9e"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"32194:2:6"},"nodeType":"YulFunctionCall","src":"32194:23:6"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32184:3:6"},"nodeType":"YulFunctionCall","src":"32184:34:6"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32174:3:6"},"nodeType":"YulFunctionCall","src":"32174:45:6"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32244:4:6","type":"","value":"0x78"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"32254:11:6"},{"kind":"number","nodeType":"YulLiteral","src":"32267:4:6","type":"","value":"0x62"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32250:3:6"},"nodeType":"YulFunctionCall","src":"32250:22:6"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"32240:3:6"},"nodeType":"YulFunctionCall","src":"32240:33:6"},{"kind":"number","nodeType":"YulLiteral","src":"32275:40:6","type":"","value":"0xfd6100003d81600a3d39f336602c57343d527f"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"32237:2:6"},"nodeType":"YulFunctionCall","src":"32237:79:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31967:6:6"},"nodeType":"YulFunctionCall","src":"31967:363:6"},"nodeType":"YulExpressionStatement","src":"31967:363:6"},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"32350:7:6"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32363:4:6","type":"","value":"0xf0"},{"name":"extraLength","nodeType":"YulIdentifier","src":"32369:11:6"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"32359:3:6"},"nodeType":"YulFunctionCall","src":"32359:22:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32343:6:6"},"nodeType":"YulFunctionCall","src":"32343:39:6"},"nodeType":"YulExpressionStatement","src":"32343:39:6"},{"nodeType":"YulAssignment","src":"32432:69:6","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32452:1:6","type":"","value":"0"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"32459:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"32465:4:6","type":"","value":"0x4c"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32455:3:6"},"nodeType":"YulFunctionCall","src":"32455:15:6"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"32476:11:6"},{"kind":"number","nodeType":"YulLiteral","src":"32489:4:6","type":"","value":"0x6c"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32472:3:6"},"nodeType":"YulFunctionCall","src":"32472:22:6"},{"name":"salt","nodeType":"YulIdentifier","src":"32496:4:6"}],"functionName":{"name":"create2","nodeType":"YulIdentifier","src":"32444:7:6"},"nodeType":"YulFunctionCall","src":"32444:57:6"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"32432:8:6"}]},{"body":{"nodeType":"YulBlock","src":"32581:210:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32678:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"32684:10:6","type":"","value":"0x30116425"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32671:6:6"},"nodeType":"YulFunctionCall","src":"32671:24:6"},"nodeType":"YulExpressionStatement","src":"32671:24:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32766:4:6","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"32772:4:6","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"32759:6:6"},"nodeType":"YulFunctionCall","src":"32759:18:6"},"nodeType":"YulExpressionStatement","src":"32759:18:6"}]},"condition":{"arguments":[{"name":"instance","nodeType":"YulIdentifier","src":"32571:8:6"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"32564:6:6"},"nodeType":"YulFunctionCall","src":"32564:16:6"},"nodeType":"YulIf","src":"32561:230:6"},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"32878:7:6"},{"name":"mAfter1","nodeType":"YulIdentifier","src":"32887:7:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32871:6:6"},"nodeType":"YulFunctionCall","src":"32871:24:6"},"nodeType":"YulExpressionStatement","src":"32871:24:6"},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"32915:4:6"},{"name":"dataLength","nodeType":"YulIdentifier","src":"32921:10:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32908:6:6"},"nodeType":"YulFunctionCall","src":"32908:24:6"},"nodeType":"YulExpressionStatement","src":"32908:24:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"32956:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"32962:4:6","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32952:3:6"},"nodeType":"YulFunctionCall","src":"32952:15:6"},{"name":"mBefore1","nodeType":"YulIdentifier","src":"32969:8:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32945:6:6"},"nodeType":"YulFunctionCall","src":"32945:33:6"},"nodeType":"YulExpressionStatement","src":"32945:33:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33002:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"33008:4:6","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32998:3:6"},"nodeType":"YulFunctionCall","src":"32998:15:6"},{"name":"mBefore2","nodeType":"YulIdentifier","src":"33015:8:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32991:6:6"},"nodeType":"YulFunctionCall","src":"32991:33:6"},"nodeType":"YulExpressionStatement","src":"32991:33:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33048:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"33054:4:6","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"33044:3:6"},"nodeType":"YulFunctionCall","src":"33044:15:6"},{"name":"mBefore3","nodeType":"YulIdentifier","src":"33061:8:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33037:6:6"},"nodeType":"YulFunctionCall","src":"33037:33:6"},"nodeType":"YulExpressionStatement","src":"33037:33:6"}]},"evmVersion":"paris","externalReferences":[{"declaration":2358,"isOffset":false,"isSlot":false,"src":"30954:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"31005:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"31056:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"31105:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"31146:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"31416:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"31531:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"31647:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"31861:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"32178:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"32459:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"32915:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"32956:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"33002:4:6","valueSize":1},{"declaration":2358,"isOffset":false,"isSlot":false,"src":"33048:4:6","valueSize":1},{"declaration":2356,"isOffset":false,"isSlot":false,"src":"31544:14:6","valueSize":1},{"declaration":2363,"isOffset":false,"isSlot":false,"src":"32432:8:6","valueSize":1},{"declaration":2363,"isOffset":false,"isSlot":false,"src":"32571:8:6","valueSize":1},{"declaration":2360,"isOffset":false,"isSlot":false,"src":"32496:4:6","valueSize":1}],"id":2365,"nodeType":"InlineAssembly","src":"30817:2263:6"}]},"documentation":{"id":2354,"nodeType":"StructuredDocumentation","src":"30338:323:6","text":"@dev Deploys a deterministic clone of `implementation`,\n using immutable arguments encoded in `data`, with `salt`.\n Note: This implementation of CWIA differs from the original implementation.\n If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`."},"id":2367,"implemented":true,"kind":"function","modifiers":[],"name":"cloneDeterministic","nameLocation":"30675:18:6","nodeType":"FunctionDefinition","parameters":{"id":2361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2356,"mutability":"mutable","name":"implementation","nameLocation":"30702:14:6","nodeType":"VariableDeclaration","scope":2367,"src":"30694:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2355,"name":"address","nodeType":"ElementaryTypeName","src":"30694:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2358,"mutability":"mutable","name":"data","nameLocation":"30731:4:6","nodeType":"VariableDeclaration","scope":2367,"src":"30718:17:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2357,"name":"bytes","nodeType":"ElementaryTypeName","src":"30718:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2360,"mutability":"mutable","name":"salt","nameLocation":"30745:4:6","nodeType":"VariableDeclaration","scope":2367,"src":"30737:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2359,"name":"bytes32","nodeType":"ElementaryTypeName","src":"30737:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"30693:57:6"},"returnParameters":{"id":2364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2363,"mutability":"mutable","name":"instance","nameLocation":"30793:8:6","nodeType":"VariableDeclaration","scope":2367,"src":"30785:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2362,"name":"address","nodeType":"ElementaryTypeName","src":"30785:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30784:18:6"},"scope":2432,"src":"30666:2420:6","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2378,"nodeType":"Block","src":"33419:2041:6","statements":[{"AST":{"nodeType":"YulBlock","src":"33438:2016:6","statements":[{"nodeType":"YulVariableDeclaration","src":"33540:38:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33566:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"33572:4:6","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"33562:3:6"},"nodeType":"YulFunctionCall","src":"33562:15:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33556:5:6"},"nodeType":"YulFunctionCall","src":"33556:22:6"},"variables":[{"name":"mBefore3","nodeType":"YulTypedName","src":"33544:8:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"33591:38:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33617:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"33623:4:6","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"33613:3:6"},"nodeType":"YulFunctionCall","src":"33613:15:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33607:5:6"},"nodeType":"YulFunctionCall","src":"33607:22:6"},"variables":[{"name":"mBefore2","nodeType":"YulTypedName","src":"33595:8:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"33642:38:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33668:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"33674:4:6","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"33664:3:6"},"nodeType":"YulFunctionCall","src":"33664:15:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33658:5:6"},"nodeType":"YulFunctionCall","src":"33658:22:6"},"variables":[{"name":"mBefore1","nodeType":"YulTypedName","src":"33646:8:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"33693:29:6","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33717:4:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33711:5:6"},"nodeType":"YulFunctionCall","src":"33711:11:6"},"variables":[{"name":"dataLength","nodeType":"YulTypedName","src":"33697:10:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"33735:47:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"33758:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"33764:4:6","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33754:3:6"},"nodeType":"YulFunctionCall","src":"33754:15:6"},{"name":"dataLength","nodeType":"YulIdentifier","src":"33771:10:6"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33750:3:6"},"nodeType":"YulFunctionCall","src":"33750:32:6"},"variables":[{"name":"dataEnd","nodeType":"YulTypedName","src":"33739:7:6","type":""}]},{"nodeType":"YulVariableDeclaration","src":"33795:29:6","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"33816:7:6"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33810:5:6"},"nodeType":"YulFunctionCall","src":"33810:14:6"},"variables":[{"name":"mAfter1","nodeType":"YulTypedName","src":"33799:7:6","type":""}]},{"expression":{"arguments":[{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"34027:14:6"},"nodeType":"YulFunctionCall","src":"34027:16:6"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"34045:14:6"},"nodeType":"YulFunctionCall","src":"34045:16:6"},{"arguments":[{"name":"dataLength","nodeType":"YulIdentifier","src":"34066:10:6"},{"kind":"number","nodeType":"YulLiteral","src":"34078:6:6","type":"","value":"0xff9b"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"34063:2:6"},"nodeType":"YulFunctionCall","src":"34063:22:6"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"34012:14:6"},"nodeType":"YulFunctionCall","src":"34012:74:6"},"nodeType":"YulExpressionStatement","src":"34012:74:6"},{"nodeType":"YulVariableDeclaration","src":"34181:37:6","value":{"arguments":[{"name":"dataLength","nodeType":"YulIdentifier","src":"34204:10:6"},{"kind":"number","nodeType":"YulLiteral","src":"34216:1:6","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34200:3:6"},"nodeType":"YulFunctionCall","src":"34200:18:6"},"variables":[{"name":"extraLength","nodeType":"YulTypedName","src":"34185:11:6","type":""}]},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34290:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"34296:28:6","type":"","value":"0x5af43d3d93803e606057fd5bf3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34283:6:6"},"nodeType":"YulFunctionCall","src":"34283:42:6"},"nodeType":"YulExpressionStatement","src":"34283:42:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34405:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"34411:4:6","type":"","value":"0x0d"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"34401:3:6"},"nodeType":"YulFunctionCall","src":"34401:15:6"},{"name":"implementation","nodeType":"YulIdentifier","src":"34418:14:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34394:6:6"},"nodeType":"YulFunctionCall","src":"34394:39:6"},"nodeType":"YulExpressionStatement","src":"34394:39:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34521:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"34527:4:6","type":"","value":"0x21"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"34517:3:6"},"nodeType":"YulFunctionCall","src":"34517:15:6"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34557:4:6","type":"","value":"0x48"},{"name":"extraLength","nodeType":"YulIdentifier","src":"34563:11:6"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"34553:3:6"},"nodeType":"YulFunctionCall","src":"34553:22:6"},{"kind":"number","nodeType":"YulLiteral","src":"34577:52:6","type":"","value":"0x593da1005b363d3d373d3d3d3d610000806062363936013d73"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"34550:2:6"},"nodeType":"YulFunctionCall","src":"34550:80:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34493:6:6"},"nodeType":"YulFunctionCall","src":"34493:151:6"},"nodeType":"YulExpressionStatement","src":"34493:151:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34735:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"34741:4:6","type":"","value":"0x3a"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"34731:3:6"},"nodeType":"YulFunctionCall","src":"34731:15:6"},{"kind":"number","nodeType":"YulLiteral","src":"34748:66:6","type":"","value":"0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34707:6:6"},"nodeType":"YulFunctionCall","src":"34707:121:6"},"nodeType":"YulExpressionStatement","src":"34707:121:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34869:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"34875:4:6","type":"","value":"0x5a"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"34865:3:6"},"nodeType":"YulFunctionCall","src":"34865:15:6"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34905:4:6","type":"","value":"0x78"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"34915:11:6"},{"kind":"number","nodeType":"YulLiteral","src":"34928:4:6","type":"","value":"0x62"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34911:3:6"},"nodeType":"YulFunctionCall","src":"34911:22:6"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"34901:3:6"},"nodeType":"YulFunctionCall","src":"34901:33:6"},{"kind":"number","nodeType":"YulLiteral","src":"34936:38:6","type":"","value":"0x6100003d81600a3d39f336602c57343d527f"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"34898:2:6"},"nodeType":"YulFunctionCall","src":"34898:77:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34841:6:6"},"nodeType":"YulFunctionCall","src":"34841:148:6"},"nodeType":"YulExpressionStatement","src":"34841:148:6"},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"35009:7:6"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35022:4:6","type":"","value":"0xf0"},{"name":"extraLength","nodeType":"YulIdentifier","src":"35028:11:6"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"35018:3:6"},"nodeType":"YulFunctionCall","src":"35018:22:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35002:6:6"},"nodeType":"YulFunctionCall","src":"35002:39:6"},"nodeType":"YulExpressionStatement","src":"35002:39:6"},{"nodeType":"YulAssignment","src":"35107:58:6","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35129:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"35135:4:6","type":"","value":"0x4c"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35125:3:6"},"nodeType":"YulFunctionCall","src":"35125:15:6"},{"arguments":[{"name":"extraLength","nodeType":"YulIdentifier","src":"35146:11:6"},{"kind":"number","nodeType":"YulLiteral","src":"35159:4:6","type":"","value":"0x6c"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35142:3:6"},"nodeType":"YulFunctionCall","src":"35142:22:6"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"35115:9:6"},"nodeType":"YulFunctionCall","src":"35115:50:6"},"variableNames":[{"name":"hash","nodeType":"YulIdentifier","src":"35107:4:6"}]},{"expression":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"35252:7:6"},{"name":"mAfter1","nodeType":"YulIdentifier","src":"35261:7:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35245:6:6"},"nodeType":"YulFunctionCall","src":"35245:24:6"},"nodeType":"YulExpressionStatement","src":"35245:24:6"},{"expression":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35289:4:6"},{"name":"dataLength","nodeType":"YulIdentifier","src":"35295:10:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35282:6:6"},"nodeType":"YulFunctionCall","src":"35282:24:6"},"nodeType":"YulExpressionStatement","src":"35282:24:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35330:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"35336:4:6","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35326:3:6"},"nodeType":"YulFunctionCall","src":"35326:15:6"},{"name":"mBefore1","nodeType":"YulIdentifier","src":"35343:8:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35319:6:6"},"nodeType":"YulFunctionCall","src":"35319:33:6"},"nodeType":"YulExpressionStatement","src":"35319:33:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35376:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"35382:4:6","type":"","value":"0x40"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35372:3:6"},"nodeType":"YulFunctionCall","src":"35372:15:6"},{"name":"mBefore2","nodeType":"YulIdentifier","src":"35389:8:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35365:6:6"},"nodeType":"YulFunctionCall","src":"35365:33:6"},"nodeType":"YulExpressionStatement","src":"35365:33:6"},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35422:4:6"},{"kind":"number","nodeType":"YulLiteral","src":"35428:4:6","type":"","value":"0x60"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35418:3:6"},"nodeType":"YulFunctionCall","src":"35418:15:6"},{"name":"mBefore3","nodeType":"YulIdentifier","src":"35435:8:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35411:6:6"},"nodeType":"YulFunctionCall","src":"35411:33:6"},"nodeType":"YulExpressionStatement","src":"35411:33:6"}]},"evmVersion":"paris","externalReferences":[{"declaration":2372,"isOffset":false,"isSlot":false,"src":"33566:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"33617:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"33668:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"33717:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"33758:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"34290:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"34405:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"34521:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"34735:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"34869:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"35129:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"35289:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"35330:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"35376:4:6","valueSize":1},{"declaration":2372,"isOffset":false,"isSlot":false,"src":"35422:4:6","valueSize":1},{"declaration":2375,"isOffset":false,"isSlot":false,"src":"35107:4:6","valueSize":1},{"declaration":2370,"isOffset":false,"isSlot":false,"src":"34418:14:6","valueSize":1}],"id":2377,"nodeType":"InlineAssembly","src":"33429:2025:6"}]},"documentation":{"id":2368,"nodeType":"StructuredDocumentation","src":"33092:192:6","text":"@dev Returns the initialization code hash of the clone of `implementation`\n using immutable arguments encoded in `data`.\n Used for mining vanity addresses with create2crunch."},"id":2379,"implemented":true,"kind":"function","modifiers":[],"name":"initCodeHash","nameLocation":"33298:12:6","nodeType":"FunctionDefinition","parameters":{"id":2373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2370,"mutability":"mutable","name":"implementation","nameLocation":"33319:14:6","nodeType":"VariableDeclaration","scope":2379,"src":"33311:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2369,"name":"address","nodeType":"ElementaryTypeName","src":"33311:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2372,"mutability":"mutable","name":"data","nameLocation":"33348:4:6","nodeType":"VariableDeclaration","scope":2379,"src":"33335:17:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2371,"name":"bytes","nodeType":"ElementaryTypeName","src":"33335:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"33310:43:6"},"returnParameters":{"id":2376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2375,"mutability":"mutable","name":"hash","nameLocation":"33409:4:6","nodeType":"VariableDeclaration","scope":2379,"src":"33401:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2374,"name":"bytes32","nodeType":"ElementaryTypeName","src":"33401:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"33400:14:6"},"scope":2432,"src":"33289:2171:6","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2408,"nodeType":"Block","src":"35912:137:6","statements":[{"assignments":[2394],"declarations":[{"constant":false,"id":2394,"mutability":"mutable","name":"hash","nameLocation":"35930:4:6","nodeType":"VariableDeclaration","scope":2408,"src":"35922:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2393,"name":"bytes32","nodeType":"ElementaryTypeName","src":"35922:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2399,"initialValue":{"arguments":[{"id":2396,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2382,"src":"35950:14:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2397,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2384,"src":"35966:4:6","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2395,"name":"initCodeHash","nodeType":"Identifier","overloadedDeclarations":[2255,2379],"referencedDeclaration":2379,"src":"35937:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (address,bytes memory) pure returns (bytes32)"}},"id":2398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35937:34:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"35922:49:6"},{"expression":{"id":2406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2400,"name":"predicted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2391,"src":"35981:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2402,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2394,"src":"36021:4:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2403,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2386,"src":"36027:4:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2404,"name":"deployer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2388,"src":"36033:8:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2401,"name":"predictDeterministicAddress","nodeType":"Identifier","overloadedDeclarations":[2282,2409,2423],"referencedDeclaration":2423,"src":"35993:27:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (bytes32,bytes32,address) pure returns (address)"}},"id":2405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35993:49:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"35981:61:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2407,"nodeType":"ExpressionStatement","src":"35981:61:6"}]},"documentation":{"id":2380,"nodeType":"StructuredDocumentation","src":"35466:249:6","text":"@dev Returns the address of the deterministic clone of\n `implementation` using immutable arguments encoded in `data`, with `salt`, by `deployer`.\n Note: The returned result has dirty upper 96 bits. Please clean if used in assembly."},"id":2409,"implemented":true,"kind":"function","modifiers":[],"name":"predictDeterministicAddress","nameLocation":"35729:27:6","nodeType":"FunctionDefinition","parameters":{"id":2389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2382,"mutability":"mutable","name":"implementation","nameLocation":"35774:14:6","nodeType":"VariableDeclaration","scope":2409,"src":"35766:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2381,"name":"address","nodeType":"ElementaryTypeName","src":"35766:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2384,"mutability":"mutable","name":"data","nameLocation":"35811:4:6","nodeType":"VariableDeclaration","scope":2409,"src":"35798:17:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2383,"name":"bytes","nodeType":"ElementaryTypeName","src":"35798:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2386,"mutability":"mutable","name":"salt","nameLocation":"35833:4:6","nodeType":"VariableDeclaration","scope":2409,"src":"35825:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2385,"name":"bytes32","nodeType":"ElementaryTypeName","src":"35825:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2388,"mutability":"mutable","name":"deployer","nameLocation":"35855:8:6","nodeType":"VariableDeclaration","scope":2409,"src":"35847:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2387,"name":"address","nodeType":"ElementaryTypeName","src":"35847:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"35756:113:6"},"returnParameters":{"id":2392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2391,"mutability":"mutable","name":"predicted","nameLocation":"35901:9:6","nodeType":"VariableDeclaration","scope":2409,"src":"35893:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2390,"name":"address","nodeType":"ElementaryTypeName","src":"35893:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"35892:19:6"},"scope":2432,"src":"35720:329:6","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2422,"nodeType":"Block","src":"36720:451:6","statements":[{"AST":{"nodeType":"YulBlock","src":"36782:383:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36856:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"36862:4:6","type":"","value":"0xff"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"36848:7:6"},"nodeType":"YulFunctionCall","src":"36848:19:6"},"nodeType":"YulExpressionStatement","src":"36848:19:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36908:4:6","type":"","value":"0x35"},{"name":"hash","nodeType":"YulIdentifier","src":"36914:4:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36901:6:6"},"nodeType":"YulFunctionCall","src":"36901:18:6"},"nodeType":"YulExpressionStatement","src":"36901:18:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36939:4:6","type":"","value":"0x01"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36949:2:6","type":"","value":"96"},{"name":"deployer","nodeType":"YulIdentifier","src":"36953:8:6"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"36945:3:6"},"nodeType":"YulFunctionCall","src":"36945:17:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36932:6:6"},"nodeType":"YulFunctionCall","src":"36932:31:6"},"nodeType":"YulExpressionStatement","src":"36932:31:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36983:4:6","type":"","value":"0x15"},{"name":"salt","nodeType":"YulIdentifier","src":"36989:4:6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36976:6:6"},"nodeType":"YulFunctionCall","src":"36976:18:6"},"nodeType":"YulExpressionStatement","src":"36976:18:6"},{"nodeType":"YulAssignment","src":"37007:34:6","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37030:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"37036:4:6","type":"","value":"0x55"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"37020:9:6"},"nodeType":"YulFunctionCall","src":"37020:21:6"},"variableNames":[{"name":"predicted","nodeType":"YulIdentifier","src":"37007:9:6"}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37147:4:6","type":"","value":"0x35"},{"kind":"number","nodeType":"YulLiteral","src":"37153:1:6","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37140:6:6"},"nodeType":"YulFunctionCall","src":"37140:15:6"},"nodeType":"YulExpressionStatement","src":"37140:15:6"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":2416,"isOffset":false,"isSlot":false,"src":"36953:8:6","valueSize":1},{"declaration":2412,"isOffset":false,"isSlot":false,"src":"36914:4:6","valueSize":1},{"declaration":2419,"isOffset":false,"isSlot":false,"src":"37007:9:6","valueSize":1},{"declaration":2414,"isOffset":false,"isSlot":false,"src":"36989:4:6","valueSize":1}],"id":2421,"nodeType":"InlineAssembly","src":"36773:392:6"}]},"documentation":{"id":2410,"nodeType":"StructuredDocumentation","src":"36338:224:6","text":"@dev Returns the address when a contract with initialization code hash,\n `hash`, is deployed with `salt`, by `deployer`.\n Note: The returned result has dirty upper 96 bits. Please clean if used in assembly."},"id":2423,"implemented":true,"kind":"function","modifiers":[],"name":"predictDeterministicAddress","nameLocation":"36576:27:6","nodeType":"FunctionDefinition","parameters":{"id":2417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2412,"mutability":"mutable","name":"hash","nameLocation":"36612:4:6","nodeType":"VariableDeclaration","scope":2423,"src":"36604:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2411,"name":"bytes32","nodeType":"ElementaryTypeName","src":"36604:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2414,"mutability":"mutable","name":"salt","nameLocation":"36626:4:6","nodeType":"VariableDeclaration","scope":2423,"src":"36618:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2413,"name":"bytes32","nodeType":"ElementaryTypeName","src":"36618:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2416,"mutability":"mutable","name":"deployer","nameLocation":"36640:8:6","nodeType":"VariableDeclaration","scope":2423,"src":"36632:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2415,"name":"address","nodeType":"ElementaryTypeName","src":"36632:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"36603:46:6"},"returnParameters":{"id":2420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2419,"mutability":"mutable","name":"predicted","nameLocation":"36705:9:6","nodeType":"VariableDeclaration","scope":2423,"src":"36697:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2418,"name":"address","nodeType":"ElementaryTypeName","src":"36697:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"36696:19:6"},"scope":2432,"src":"36567:604:6","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2430,"nodeType":"Block","src":"37326:457:6","statements":[{"AST":{"nodeType":"YulBlock","src":"37388:389:6","statements":[{"body":{"nodeType":"YulBlock","src":"37547:220:6","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37654:4:6","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"37660:10:6","type":"","value":"0x2f634836"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37647:6:6"},"nodeType":"YulFunctionCall","src":"37647:24:6"},"nodeType":"YulExpressionStatement","src":"37647:24:6"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37742:4:6","type":"","value":"0x1c"},{"kind":"number","nodeType":"YulLiteral","src":"37748:4:6","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"37735:6:6"},"nodeType":"YulFunctionCall","src":"37735:18:6"},"nodeType":"YulExpressionStatement","src":"37735:18:6"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37505:2:6","type":"","value":"96"},{"name":"salt","nodeType":"YulIdentifier","src":"37509:4:6"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"37501:3:6"},"nodeType":"YulFunctionCall","src":"37501:13:6"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"37494:6:6"},"nodeType":"YulFunctionCall","src":"37494:21:6"},{"arguments":[{"arguments":[],"functionName":{"name":"caller","nodeType":"YulIdentifier","src":"37520:6:6"},"nodeType":"YulFunctionCall","src":"37520:8:6"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37534:2:6","type":"","value":"96"},{"name":"salt","nodeType":"YulIdentifier","src":"37538:4:6"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"37530:3:6"},"nodeType":"YulFunctionCall","src":"37530:13:6"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"37517:2:6"},"nodeType":"YulFunctionCall","src":"37517:27:6"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"37491:2:6"},"nodeType":"YulFunctionCall","src":"37491:54:6"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"37484:6:6"},"nodeType":"YulFunctionCall","src":"37484:62:6"},"nodeType":"YulIf","src":"37481:286:6"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":2426,"isOffset":false,"isSlot":false,"src":"37509:4:6","valueSize":1},{"declaration":2426,"isOffset":false,"isSlot":false,"src":"37538:4:6","valueSize":1}],"id":2429,"nodeType":"InlineAssembly","src":"37379:398:6"}]},"documentation":{"id":2424,"nodeType":"StructuredDocumentation","src":"37177:85:6","text":"@dev Reverts if `salt` does not start with either the zero address or the caller."},"id":2431,"implemented":true,"kind":"function","modifiers":[],"name":"checkStartsWithCaller","nameLocation":"37276:21:6","nodeType":"FunctionDefinition","parameters":{"id":2427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2426,"mutability":"mutable","name":"salt","nameLocation":"37306:4:6","nodeType":"VariableDeclaration","scope":2431,"src":"37298:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2425,"name":"bytes32","nodeType":"ElementaryTypeName","src":"37298:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"37297:14:6"},"returnParameters":{"id":2428,"nodeType":"ParameterList","parameters":[],"src":"37326:0:6"},"scope":2432,"src":"37267:516:6","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":2433,"src":"1500:36285:6","usedErrors":[2220,2223],"usedEvents":[]}],"src":"32:37754:6"},"id":6}},"contracts":{"FreshCryptoLib/FCL_Webauthn.sol":{"FCL_WebAuthn":{"abi":[{"inputs":[],"name":"InvalidAuthenticatorData","type":"error"},{"inputs":[],"name":"InvalidClientData","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200263862a83cad763fa89c0fbc976522f2fe1f6f58aa8f116f81dd44d79ab837264736f6c63430008140033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL PUSH4 0x862A83CA 0xD7 PUSH4 0xFA89C0FB 0xC9 PUSH23 0x522F2FE1F6F58AA8F116F81DD44D79AB837264736F6C63 NUMBER STOP ADDMOD EQ STOP CALLER ","sourceMap":"1356:4435:0:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1356:4435:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200263862a83cad763fa89c0fbc976522f2fe1f6f58aa8f116f81dd44d79ab837264736f6c63430008140033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL PUSH4 0x862A83CA 0xD7 PUSH4 0xFA89C0FB 0xC9 PUSH23 0x522F2FE1F6F58AA8F116F81DD44D79AB837264736F6C63 NUMBER STOP ADDMOD EQ STOP CALLER ","sourceMap":"1356:4435:0:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"WebAuthn_format(bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata)":"infinite","checkSignature(bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata,uint256[2] calldata)":"infinite","checkSignature_hackmem(bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata,uint256)":"infinite","checkSignature_prec(bytes calldata,bytes1,bytes calldata,bytes32,uint256,uint256[2] calldata,address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidAuthenticatorData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidClientData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"FreshCryptoLib/FCL_Webauthn.sol\":\"FCL_WebAuthn\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/FCL_Webauthn.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: Implementation of the WebAuthn Authentication mechanism\\n///* https://www.w3.org/TR/webauthn-2/#sctn-intro\\n///* Original code extracted from https://github.com/btchip/Webauthn.sol\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport {Base64Url} from \\\"./utils/Base64Url.sol\\\";\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\nlibrary FCL_WebAuthn {\\n error InvalidAuthenticatorData();\\n error InvalidClientData();\\n error InvalidSignature();\\n\\n function WebAuthn_format(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata // rs\\n ) internal pure returns (bytes32 result) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n {\\n if ((authenticatorData[32] & authenticatorDataFlagMask) != authenticatorDataFlagMask) {\\n revert InvalidAuthenticatorData();\\n }\\n // Verify that clientData commits to the expected client challenge\\n // Use the Base64Url encoding which omits padding characters to match WebAuthn Specification\\n string memory challengeEncoded = Base64Url.encode(abi.encodePacked(clientChallenge));\\n bytes memory challengeExtracted = new bytes(\\n bytes(challengeEncoded).length\\n );\\n\\n assembly {\\n calldatacopy(\\n add(challengeExtracted, 32),\\n add(clientData.offset, clientChallengeDataOffset),\\n mload(challengeExtracted)\\n )\\n }\\n\\n bytes32 moreData; //=keccak256(abi.encodePacked(challengeExtracted));\\n assembly {\\n moreData := keccak256(add(challengeExtracted, 32), mload(challengeExtracted))\\n }\\n\\n if (keccak256(abi.encodePacked(bytes(challengeEncoded))) != moreData) {\\n revert InvalidClientData();\\n }\\n } //avoid stack full\\n\\n // Verify the signature over sha256(authenticatorData || sha256(clientData))\\n bytes memory verifyData = new bytes(authenticatorData.length + 32);\\n\\n assembly {\\n calldatacopy(add(verifyData, 32), authenticatorData.offset, authenticatorData.length)\\n }\\n\\n bytes32 more = sha256(clientData);\\n assembly {\\n mstore(add(verifyData, add(authenticatorData.length, 32)), more)\\n }\\n\\n return sha256(verifyData);\\n }\\n\\n function checkSignature (\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256[2] calldata Q\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_verify(message, rs, Q);\\n\\n return result;\\n }\\n\\n function checkSignature_prec(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n address dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_verify(message, rs, dataPointer);\\n\\n return result;\\n }\\n\\n //beware that this implementation will not be compliant with EOF\\n function checkSignature_hackmem(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256 dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_hackmem(message, rs, dataPointer);\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x78658514b1f160f17b8408bddc3615b2bfaf83a50c874cdfba26ce90528214b4\",\"license\":\"MIT\"},\"FreshCryptoLib/FCL_elliptic.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: modified XYZZ system coordinates for EVM elliptic point multiplication\\n///* optimization\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nlibrary FCL_Elliptic_ZZ {\\n // Set parameters for curve sec256r1.\\n\\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\\n //curve prime field modulus\\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n //short weierstrass first coefficient\\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\\n //short weierstrass second coefficient\\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\\n //generating point affine coordinates\\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\\n //curve order (number of points)\\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\\n /* -2 mod n constant, used to speed up inversion*/\\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\\n\\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\\n //P+1 div 4\\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\\n //arbitrary constant to express no quadratic residuosity\\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n\\n /**\\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\\n */\\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2modn)\\n mstore(add(pointer, 0xa0), n)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n /**\\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\\n */\\n\\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2)\\n mstore(add(pointer, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n\\n //Coron projective shuffling, take as input alpha as blinding factor\\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) public pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n \\n uint256 alpha2=mulmod(alpha,alpha,p);\\n \\n x3=mulmod(alpha2, x,p); //alpha^-2.x\\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\\n\\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\\n \\n return (x3, y3, zz3, zzz3);\\n }\\n\\n\\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\\n u2=addmod(u2, p-u1, p);// P = U2-U1\\n x1=mulmod(u2, u2, p);//PP\\n x2=mulmod(x1, u2, p);//PPP\\n \\n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \\n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\\n\\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \\n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\\n\\n return (x3, y3, zz3, zzz3);\\n }\\n\\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\\n/// @param self The integer of which to find the modular inverse\\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\\n\\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\\n assembly (\\\"memory-safe\\\") {\\n // load the free memory pointer value\\n let pointer := mload(0x40)\\n\\n // Define length of base (Bsize)\\n mstore(pointer, 0x20)\\n // Define the exponent size (Esize)\\n mstore(add(pointer, 0x20), 0x20)\\n // Define the modulus size (Msize)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base (B)\\n mstore(add(pointer, 0x60), self)\\n // Define the exponent (E)\\n mstore(add(pointer, 0x80), pp1div4)\\n // We save the point of the last argument, it will be override by the result\\n // of the precompile call in order to avoid paying for the memory expansion properly\\n let _result := add(pointer, 0xa0)\\n // Define the modulus (M)\\n mstore(_result, p)\\n\\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\\n if iszero(\\n staticcall(\\n not(0), // amount of gas to send\\n MODEXP_PRECOMPILE, // target\\n pointer, // argsOffset\\n 0xc0, // argsSize (6 * 32 bytes)\\n _result, // retOffset (we override M to avoid paying for the memory expansion)\\n 0x20 // retSize (32 bytes)\\n )\\n ) { revert(0, 0) }\\n\\n result := mload(_result)\\n// result :=addmod(result,0,p)\\n }\\n if(mulmod(result,result,p)!=self){\\n result=_NOTSQUARE;\\n }\\n \\n return result;\\n}\\n /**\\n * /* @dev Convert from affine rep to XYZZ rep\\n */\\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\\n unchecked {\\n P[2] = 1; //ZZ\\n P[3] = 1; //ZZZ\\n P[0] = x0;\\n P[1] = y0;\\n }\\n }\\n\\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \\n\\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\\n\\n y=SqrtMod(y2);\\n if(y==_NOTSQUARE){\\n return _NOTONCURVE;\\n }\\n if((y&1)!=(parity&1)){\\n y=p-y;\\n }\\n }\\n\\n /**\\n * /* @dev Convert from XYZZ rep to affine rep\\n */\\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\\n y1 = mulmod(y, zzzInv, p); //Y/zzz\\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\\n zzzInv = mulmod(_b, _b, p); //1/zz\\n x1 = mulmod(x, zzzInv, p); //X/zz\\n }\\n\\n /**\\n * /* @dev Sutherland2008 doubling\\n */\\n /* The \\\"dbl-2008-s-1\\\" doubling formulas */\\n\\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n assembly {\\n P0 := mulmod(2, y, p) //U = 2*Y1\\n P2 := mulmod(P0, P0, p) // V=U^2\\n P3 := mulmod(x, P2, p) // S = X1*V\\n P1 := mulmod(P0, P2, p) // W=UV\\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\\n }\\n }\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\\n */\\n\\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n if (y1 == 0) {\\n return (x2, y2, 1, 1);\\n }\\n\\n assembly {\\n y1 := sub(p, y1)\\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\\n P0 := mulmod(x2, x2, p) //PP = P^2\\n P1 := mulmod(P0, x2, p) //PPP = P*PP\\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\\n }\\n //end assembly\\n } //end unchecked\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Return the zero curve in XYZZ coordinates.\\n */\\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\\n return (0, 0, 0, 0);\\n }\\n /**\\n * @dev Check if point is the neutral of the curve\\n */\\n\\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\\n return y0 == 0;\\n }\\n /**\\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\\n */\\n\\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\\n return (0, 0);\\n }\\n\\n /**\\n * @dev Check if the curve is the zero curve in affine rep.\\n */\\n // uint256 x, uint256 y)\\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\\n return (y == 0);\\n }\\n\\n /**\\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\\n */\\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\\n if (0 == x || x == p || 0 == y || y == p) {\\n return false;\\n }\\n unchecked {\\n uint256 LHS = mulmod(y, y, p); // y^2\\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\\n\\n return LHS == RHS;\\n }\\n }\\n\\n /**\\n * @dev Add two elliptic curve points in affine coordinates.\\n */\\n\\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\\n uint256 zz0;\\n uint256 zzz0;\\n\\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\\n\\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\\n\\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\\n }\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns only x for ECDSA use \\n * */\\n function ecZZ_mulmuladd_S_asm(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 Y;\\n uint256 index = 255;\\n uint256 H0;\\n uint256 H1;\\n\\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return 0;\\n\\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n X := H0\\n Y := H1\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := H0\\n T2 := H1\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n let T := mload(0x40)\\n mstore(add(T, 0x60), zz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n //Y:=mulmod(Y,zzz,p)//Y/zzz\\n //zz :=mulmod(zz, mload(T),p) //1/z\\n //zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, mload(T), p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return X;\\n }\\n\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns affine representation of point (normalized) \\n * */\\n function ecZZ_mulmuladd(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X, uint256 Y) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 index = 255;\\n uint256[6] memory T;\\n uint256[2] memory H;\\n \\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\\n\\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n Y := mload(add(H,32))\\n X := mload(H)\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := mload(H)\\n T2 := mload(add(H,32))\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zzz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n Y:=mulmod(Y,mload(T),p)//Y/zzz\\n zz :=mulmod(zz, mload(T),p) //1/z\\n zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, zz, p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return (X,Y);\\n }\\n\\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\\n //contract at given address dataPointer\\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\\n // the external tool to generate tables from public key is in the /sage directory\\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n unchecked {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n extcodecopy(dataPointer, T, mload(T), 64)\\n let index := sub(zz, 1)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for {} gt(index, 191) { index := add(index, 191) } {\\n //inline Double\\n {\\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(TT1, TT1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n let T1 := mulmod(TT1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n }\\n {\\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n let index2 := sub(index, 64)\\n let T3 :=\\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\\n let index3 := sub(index2, 64)\\n let T2 :=\\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\\n index := sub(index3, 64)\\n let T1 :=\\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T1) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n extcodecopy(dataPointer, T, T1, 64)\\n }\\n\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n\\n // inlined EcZZ_AddN\\n if iszero(zz) {\\n X := mload(T)\\n Y := mload(add(T, 32))\\n zz := 1\\n zzz := 1\\n\\n continue\\n }\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n\\n //special case ecAdd(P,P)=EcDbl\\n if iszero(y2) {\\n if iszero(T2) {\\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n let T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n let T4 := mulmod(T2, T2, p)\\n let T1 := mulmod(T4, T2, p) //\\n zz := mulmod(zz, T4, p)\\n //zzz3=V*ZZ1\\n zzz := mulmod(zzz, T1, p) // W=UV/\\n let zz1 := mulmod(X, T4, p)\\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n \\n\\n // improving the extcodecopy trick : append array at end of contract\\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n unchecked {\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n codecopy(T, add(mload(T), dataPointer), 64)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n //index:=add(index,192), restore index, interleaved with loop\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T4) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n codecopy(T, add(T4, dataPointer), 64)\\n\\n // inlined EcZZ_AddN\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n T4 := mulmod(T2, T2, p)\\n T1 := mulmod(T4, T2, p)\\n T2 := mulmod(zz, T4, p) // W=UV\\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\\n let zz1 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\\n zz := T2\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256[2] calldata Q) internal view returns (bool) {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n uint256 Q0 = Q[0];\\n uint256 Q1 = Q[1];\\n if (!ecAff_isOnCurve(Q0, Q1)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, n);\\n uint256 scalar_v = mulmod(r, sInv, n);\\n uint256 x1;\\n\\n x1 = ecZZ_mulmuladd_S_asm(Q0, Q1, scalar_u, scalar_v);\\n\\n assembly {\\n x1 := addmod(x1, sub(n, r), n)\\n }\\n //return true;\\n return x1 == 0;\\n }\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256[2] calldata rs, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) public view returns (address)\\n {\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return address(0);\\n }\\n uint256 y=ec_Decompress(r, v-27);\\n uint256 rinv=FCL_nModInv(r);\\n uint256 u1=mulmod(n-addmod(0,h,n), rinv,n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n //ecdsa signature for test purpose only (who would like to have a private key onchain anyway ?)\\n //K is nonce, kpriv is private key\\n function ecdsa_sign(bytes32 message, uint256 k , uint256 kpriv) public view returns(uint256 r, uint256 s)\\n {\\n r=ecZZ_mulmuladd_S_asm(0,0, k, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n r=addmod(0,r, n); \\n s=mulmod(FCL_nModInv(k), addmod(uint256(message), mulmod(r, kpriv, n),n),n);//s=k^-1.(h+r.kpriv)\\n\\n \\n if(r==0||s==0){\\n revert();\\n }\\n\\n\\n }\\n\\n} //EOF\\n\",\"keccak256\":\"0xd6c3e555eae02916f6b9d65db6509d7ddf0fd76d5399e29dbc1502e0b7d992a6\",\"license\":\"MIT\"},\"FreshCryptoLib/utils/Base64Url.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Encode (without '=' padding) \\n * @author evmbrahmin, adapted from hiromin's Base64URL libraries\\n */\\nlibrary Base64Url {\\n /**\\n * @dev Base64Url Encoding Table\\n */\\n string internal constant ENCODING_TABLE =\\n \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\\\";\\n\\n function encode(bytes memory data) internal pure returns (string memory) {\\n if (data.length == 0) return \\\"\\\";\\n\\n // Load the table into memory\\n string memory table = ENCODING_TABLE;\\n\\n string memory result = new string(4 * ((data.length + 2) / 3));\\n\\n // @solidity memory-safe-assembly\\n assembly {\\n let tablePtr := add(table, 1)\\n let resultPtr := add(result, 32)\\n\\n for {\\n let dataPtr := data\\n let endPtr := add(data, mload(data))\\n } lt(dataPtr, endPtr) {\\n\\n } {\\n dataPtr := add(dataPtr, 3)\\n let input := mload(dataPtr)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(18, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(12, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(6, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))\\n resultPtr := add(resultPtr, 1)\\n }\\n\\n // Remove the padding adjustment logic\\n switch mod(mload(data), 3)\\n case 1 {\\n // Adjust for the last byte of data\\n resultPtr := sub(resultPtr, 2)\\n }\\n case 2 {\\n // Adjust for the last two bytes of data\\n resultPtr := sub(resultPtr, 1)\\n }\\n \\n // Set the correct length of the result string\\n mstore(result, sub(resultPtr, add(result, 32)))\\n }\\n\\n return result; \\n }\\n}\\n\",\"keccak256\":\"0xc9d5fbb0ef9ff0756eb5aabe7a32b2bf0f8f3c533d4451dd5778fe77aee7f0c1\",\"license\":\"Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"FreshCryptoLib/FCL_elliptic.sol":{"FCL_Elliptic_ZZ":{"abi":[{"inputs":[{"internalType":"uint256","name":"alpha","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"zz","type":"uint256"},{"internalType":"uint256","name":"zzz","type":"uint256"}],"name":"ecZZ_Coronize","outputs":[{"internalType":"uint256","name":"x3","type":"uint256"},{"internalType":"uint256","name":"y3","type":"uint256"},{"internalType":"uint256","name":"zz3","type":"uint256"},{"internalType":"uint256","name":"zzz3","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"h","type":"uint256"},{"internalType":"uint256","name":"v","type":"uint256"},{"internalType":"uint256","name":"r","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"name":"ec_recover_r1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"message","type":"bytes32"},{"internalType":"uint256","name":"k","type":"uint256"},{"internalType":"uint256","name":"kpriv","type":"uint256"}],"name":"ecdsa_sign","outputs":[{"internalType":"uint256","name":"r","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"61226761003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c80635f67f323146100505780637f99d9601461008d578063e982f355146100c0575b600080fd5b61006361005e36600461215e565b6100e8565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100a061009b366004612190565b610264565b604080519485526020850193909352918301526060820152608001610084565b6100d36100ce3660046121cb565b61035b565b60408051928352602083019190915201610084565b600082158061011757507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518310155b80610120575081155b8061014b57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b156101585750600061025c565b600061016e84610169601b886121f7565b610406565b9050600061017b8561055b565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551827fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518a6000086101f0907fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516121f7565b09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551838709905060008061022a898786866105df565b604080516020808201949094528082019290925280518083038201815260609092019052805191012096505050505050505b949350505050565b6000808080807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8b0990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89820994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d090993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81880992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80828c09870991505095509550955095915050565b60008061036c600080866000611132565b91507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518260000891507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551807fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255185850987086103e68661055b565b0990508115806103f4575080155b156103fe57600080fd5b935093915050565b6000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80858609850990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7fffffffff00000001000000000000000000000000fffffffffffffffffffffffc870983087f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0890506104c781611bf9565b91507fffffffff00000002000000000000000000000000ffffffffffffffffffffffff8203610519577fffffffff00000003000000000000000000000000ffffffffffffffffffffffff915050610555565b82600116826001161461055357610550827fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6121f7565b91505b505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa6105d857600080fd5b5192915050565b600080808060ff6105ee612122565b6105f6612140565b88158015610602575087155b1561061857600080965096505050505050611129565b6106647f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611cce565b6020830152815288831c600190811689851c90911b600216015b806106a05760018403935060018a851c1660018a861c1660011b01905061067e565b50600189841c16600189851c1660011b01945060018503610702577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f595505b60028503610711578a96508995505b600385036107255760208101519550805196505b60018303925060019450600193505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115611011577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff866002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff88850997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89840998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c870908995060018d881c1660018d891c1660011b01905080610a1057897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03995050505050611006565b60018103610a5f577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610a6e578e93508d92505b60038103610a825784519350602085015192505b88610a9b57509198509650600195508594506110069050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c880908935080610dff5783610dff577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a82099950507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a850999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c870985089a505050505050611006565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818b0999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838f097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089c50505050809a50505050505b600183039250610734565b83606083015260208252602080830152602060408301527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808301527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a083015260208260c0846005600019fa61108957600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8251870995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8251860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff858809965050505050505b94509492505050565b600080808060ff818088158015611147575087155b1561115b576000965050505050505061025c565b6111a77f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611cce565b8092508193505050600189841c16600189851c1660011b015b806111e25760018403935060018a851c1660018a861c1660011b0190506111c0565b50600189841c16600189851c1660011b01955060018603611244577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603611253578a96508993505b60038603611262578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115611b49577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b0190508061154d57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050611b3e565b6001810361159c577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b600281036115ab578e93508d92505b600381036115ba578593508492505b896115d35750919850600197508796509450611b3e9050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8809089350806119375783611937577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b82099a50507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050611b3e565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250611271565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa611bc457600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099c9b505050505050505050505050565b600060405160208152602080820152602060408201528260608201527f3fffffffc0000000400000000000000000000000400000000000000000000000608082015260a081017fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815260208160c0846005600019fa611c7757600080fd5b5191508290507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82830914611cc957507fffffffff00000002000000000000000000000000ffffffffffffffffffffffff5b919050565b600080808086611ce5578585935093505050611129565b84611cf7578787935093505050611129565b611d0688886001808a8a611d2b565b929a5090985092509050611d1c88888484611ff0565b93509350505094509492505050565b60008060008088600003611d4a57508492508391506001905080611fe3565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b6000806000611ffe846120a5565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6105d857600080fd5b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6000806000806080858703121561217457600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156121a857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000606084860312156121e057600080fd5b505081359360208301359350604090920135919050565b81810381811115610555577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220e95d75cac5be2e930b8af42215213dbddb970eb865b0823981765d03ccbc4f6c64736f6c63430008140033","opcodes":"PUSH2 0x2267 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5F67F323 EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0x7F99D960 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0xE982F355 EQ PUSH2 0xC0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x63 PUSH2 0x5E CALLDATASIZE PUSH1 0x4 PUSH2 0x215E JUMP JUMPDEST PUSH2 0xE8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x2190 JUMP JUMPDEST PUSH2 0x264 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x84 JUMP JUMPDEST PUSH2 0xD3 PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0x21CB JUMP JUMPDEST PUSH2 0x35B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x84 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x117 JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP4 LT ISZERO JUMPDEST DUP1 PUSH2 0x120 JUMPI POP DUP2 ISZERO JUMPDEST DUP1 PUSH2 0x14B JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0x158 JUMPI POP PUSH1 0x0 PUSH2 0x25C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16E DUP5 PUSH2 0x169 PUSH1 0x1B DUP9 PUSH2 0x21F7 JUMP JUMPDEST PUSH2 0x406 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x17B DUP6 PUSH2 0x55B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP11 PUSH1 0x0 ADDMOD PUSH2 0x1F0 SWAP1 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH2 0x21F7 JUMP JUMPDEST MULMOD SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP4 DUP8 MULMOD SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x22A DUP10 DUP8 DUP7 DUP7 PUSH2 0x5DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP1 MLOAD DUP1 DUP4 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP7 POP POP POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP12 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP3 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP14 MULMOD MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP9 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 DUP13 MULMOD DUP8 MULMOD SWAP2 POP POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x36C PUSH1 0x0 DUP1 DUP7 PUSH1 0x0 PUSH2 0x1132 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 PUSH1 0x0 ADDMOD SWAP2 POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP1 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP6 DUP6 MULMOD DUP8 ADDMOD PUSH2 0x3E6 DUP7 PUSH2 0x55B JUMP JUMPDEST MULMOD SWAP1 POP DUP2 ISZERO DUP1 PUSH2 0x3F4 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0x3FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 DUP7 MULMOD DUP6 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC DUP8 MULMOD DUP4 ADDMOD PUSH32 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B ADDMOD SWAP1 POP PUSH2 0x4C7 DUP2 PUSH2 0x1BF9 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 SUB PUSH2 0x519 JUMPI PUSH32 0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP POP PUSH2 0x555 JUMP JUMPDEST DUP3 PUSH1 0x1 AND DUP3 PUSH1 0x1 AND EQ PUSH2 0x553 JUMPI PUSH2 0x550 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x21F7 JUMP JUMPDEST SWAP2 POP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH1 0xFF PUSH2 0x5EE PUSH2 0x2122 JUMP JUMPDEST PUSH2 0x5F6 PUSH2 0x2140 JUMP JUMPDEST DUP9 ISZERO DUP1 ISZERO PUSH2 0x602 JUMPI POP DUP8 ISZERO JUMPDEST ISZERO PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 SWAP7 POP SWAP7 POP POP POP POP POP POP PUSH2 0x1129 JUMP JUMPDEST PUSH2 0x664 PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 DUP14 DUP14 PUSH2 0x1CCE JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE DUP2 MSTORE DUP9 DUP4 SHR PUSH1 0x1 SWAP1 DUP2 AND DUP10 DUP6 SHR SWAP1 SWAP2 SHL PUSH1 0x2 AND ADD JUMPDEST DUP1 PUSH2 0x6A0 JUMPI PUSH1 0x1 DUP5 SUB SWAP4 POP PUSH1 0x1 DUP11 DUP6 SHR AND PUSH1 0x1 DUP11 DUP7 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP PUSH2 0x67E JUMP JUMPDEST POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD SWAP5 POP PUSH1 0x1 DUP6 SUB PUSH2 0x702 JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP7 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP6 POP JUMPDEST PUSH1 0x2 DUP6 SUB PUSH2 0x711 JUMPI DUP11 SWAP7 POP DUP10 SWAP6 POP JUMPDEST PUSH1 0x3 DUP6 SUB PUSH2 0x725 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP6 POP DUP1 MLOAD SWAP7 POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH1 0x1 SWAP5 POP PUSH1 0x1 SWAP4 POP JUMPDEST DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF GT ISZERO PUSH2 0x1011 JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 PUSH1 0x2 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP11 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP5 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP15 ADDMOD MULMOD PUSH1 0x3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP6 MULMOD SWAP8 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP5 MULMOD SWAP9 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD ADDMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD DUP3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP8 MULMOD ADDMOD SWAP10 POP PUSH1 0x1 DUP14 DUP9 SHR AND PUSH1 0x1 DUP14 DUP10 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP DUP1 PUSH2 0xA10 JUMPI DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB SWAP10 POP POP POP POP POP PUSH2 0x1006 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0xA5F JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP4 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP3 POP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0xA6E JUMPI DUP15 SWAP4 POP DUP14 SWAP3 POP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0xA82 JUMPI DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP JUMPDEST DUP9 PUSH2 0xA9B JUMPI POP SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 SWAP6 POP DUP6 SWAP5 POP PUSH2 0x1006 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP7 MULMOD ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP9 MULMOD ADDMOD SWAP4 POP DUP1 PUSH2 0xDFF JUMPI DUP4 PUSH2 0xDFF JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP7 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP14 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP14 ADDMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP4 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH1 0x3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP3 MULMOD SWAP10 POP POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP6 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD ADDMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP6 ADDMOD DUP4 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 DUP8 MULMOD DUP6 ADDMOD SWAP11 POP POP POP POP POP POP PUSH2 0x1006 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP4 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP13 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP12 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP15 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP9 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 DUP16 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP7 ADDMOD MULMOD ADDMOD SWAP13 POP POP POP POP DUP1 SWAP11 POP POP POP POP POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH2 0x734 JUMP JUMPDEST DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x20 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP4 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP4 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0xC0 DUP5 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x1089 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD DUP8 MULMOD SWAP6 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP9 MULMOD SWAP7 POP POP POP POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH1 0xFF DUP2 DUP1 DUP9 ISZERO DUP1 ISZERO PUSH2 0x1147 JUMPI POP DUP8 ISZERO JUMPDEST ISZERO PUSH2 0x115B JUMPI PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x25C JUMP JUMPDEST PUSH2 0x11A7 PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 DUP14 DUP14 PUSH2 0x1CCE JUMP JUMPDEST DUP1 SWAP3 POP DUP2 SWAP4 POP POP POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD JUMPDEST DUP1 PUSH2 0x11E2 JUMPI PUSH1 0x1 DUP5 SUB SWAP4 POP PUSH1 0x1 DUP11 DUP6 SHR AND PUSH1 0x1 DUP11 DUP7 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP PUSH2 0x11C0 JUMP JUMPDEST POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD SWAP6 POP PUSH1 0x1 DUP7 SUB PUSH2 0x1244 JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP7 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP4 POP JUMPDEST PUSH1 0x2 DUP7 SUB PUSH2 0x1253 JUMPI DUP11 SWAP7 POP DUP10 SWAP4 POP JUMPDEST PUSH1 0x3 DUP7 SUB PUSH2 0x1262 JUMPI DUP2 SWAP7 POP DUP1 SWAP4 POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH1 0x1 SWAP6 POP PUSH1 0x1 SWAP5 POP JUMPDEST DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF GT ISZERO PUSH2 0x1B49 JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH1 0x2 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP11 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP5 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP15 ADDMOD MULMOD PUSH1 0x3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP6 MULMOD SWAP9 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP5 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD ADDMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD DUP3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP8 MULMOD ADDMOD SWAP8 POP PUSH1 0x1 DUP14 DUP9 SHR AND PUSH1 0x1 DUP14 DUP10 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP DUP1 PUSH2 0x154D JUMPI DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB SWAP8 POP POP POP POP POP PUSH2 0x1B3E JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x159C JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP4 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP3 POP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x15AB JUMPI DUP15 SWAP4 POP DUP14 SWAP3 POP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0x15BA JUMPI DUP6 SWAP4 POP DUP5 SWAP3 POP JUMPDEST DUP10 PUSH2 0x15D3 JUMPI POP SWAP2 SWAP9 POP PUSH1 0x1 SWAP8 POP DUP8 SWAP7 POP SWAP5 POP PUSH2 0x1B3E SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP7 MULMOD ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP9 MULMOD ADDMOD SWAP4 POP DUP1 PUSH2 0x1937 JUMPI DUP4 PUSH2 0x1937 JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP7 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP14 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP14 ADDMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP4 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH1 0x3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP3 MULMOD SWAP11 POP POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP6 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD ADDMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP6 ADDMOD DUP4 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 DUP8 MULMOD DUP6 ADDMOD SWAP9 POP POP POP POP POP POP PUSH2 0x1B3E JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP4 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP14 MULMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP13 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP15 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP9 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 DUP14 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP7 ADDMOD MULMOD ADDMOD SWAP11 POP POP POP POP DUP1 SWAP11 POP POP POP POP POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH2 0x1271 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x1BC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD DUP10 MULMOD SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0x3FFFFFFFC0000000400000000000000000000000400000000000000000000000 PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 ADD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x1C77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST MLOAD SWAP2 POP DUP3 SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP4 MULMOD EQ PUSH2 0x1CC9 JUMPI POP PUSH32 0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP7 PUSH2 0x1CE5 JUMPI DUP6 DUP6 SWAP4 POP SWAP4 POP POP POP PUSH2 0x1129 JUMP JUMPDEST DUP5 PUSH2 0x1CF7 JUMPI DUP8 DUP8 SWAP4 POP SWAP4 POP POP POP PUSH2 0x1129 JUMP JUMPDEST PUSH2 0x1D06 DUP9 DUP9 PUSH1 0x1 DUP1 DUP11 DUP11 PUSH2 0x1D2B JUMP JUMPDEST SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP3 POP SWAP1 POP PUSH2 0x1D1C DUP9 DUP9 DUP5 DUP5 PUSH2 0x1FF0 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 PUSH1 0x0 SUB PUSH2 0x1D4A JUMPI POP DUP5 SWAP3 POP DUP4 SWAP2 POP PUSH1 0x1 SWAP1 POP DUP1 PUSH2 0x1FE3 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 SUB SWAP9 DUP10 DUP2 DUP10 DUP9 MULMOD ADDMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP10 MULMOD ADDMOD SWAP6 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP8 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP6 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP10 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP9 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP12 MULMOD SWAP8 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP11 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 DUP12 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD MULMOD ADDMOD SWAP3 POP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1FFE DUP5 PUSH2 0x20A5 JUMP JUMPDEST SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP8 MULMOD SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP8 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP10 MULMOD SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 CALLDATALOAD SWAP5 PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x21A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP4 CALLDATALOAD SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x21E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 CALLDATALOAD SWAP4 PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x555 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0x5D PUSH22 0xCAC5BE2E930B8AF42215213DBDDB970EB865B0823981 PUSH23 0x5D03CCBC4F6C64736F6C63430008140033000000000000 ","sourceMap":"1212:41972:1:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1212:41972:1;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@FCL_nModInv_298":{"entryPoint":1371,"id":298,"parameterSlots":1,"returnSlots":1},"@FCL_pModInv_308":{"entryPoint":8357,"id":308,"parameterSlots":1,"returnSlots":1},"@SqrtMod_589":{"entryPoint":7161,"id":589,"parameterSlots":1,"returnSlots":1},"@ecAff_IsZero_890":{"entryPoint":null,"id":890,"parameterSlots":2,"returnSlots":1},"@ecAff_add_1024":{"entryPoint":7374,"id":1024,"parameterSlots":4,"returnSlots":2},"@ecZZ_AddN_823":{"entryPoint":7467,"id":823,"parameterSlots":6,"returnSlots":4},"@ecZZ_Coronize_384":{"entryPoint":612,"id":384,"parameterSlots":5,"returnSlots":4},"@ecZZ_SetAff_750":{"entryPoint":8176,"id":750,"parameterSlots":4,"returnSlots":2},"@ecZZ_mulmuladd_1157":{"entryPoint":1503,"id":1157,"parameterSlots":4,"returnSlots":2},"@ecZZ_mulmuladd_S_asm_1083":{"entryPoint":4402,"id":1083,"parameterSlots":4,"returnSlots":1},"@ec_Decompress_695":{"entryPoint":1030,"id":695,"parameterSlots":2,"returnSlots":1},"@ec_recover_r1_1821":{"entryPoint":232,"id":1821,"parameterSlots":4,"returnSlots":1},"@ecdsa_sign_1885":{"entryPoint":859,"id":1885,"parameterSlots":3,"returnSlots":2},"abi_decode_tuple_t_bytes32t_uint256t_uint256":{"entryPoint":8651,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256":{"entryPoint":8542,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256":{"entryPoint":8592,"id":null,"parameterSlots":2,"returnSlots":5},"abi_encode_tuple_packed_t_uint256_t_uint256__to_t_uint256_t_uint256__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":8695,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x12":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3002:7","statements":[{"nodeType":"YulBlock","src":"6:3:7","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:264:7","statements":[{"body":{"nodeType":"YulBlock","src":"182:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"191:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"194:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"184:6:7"},"nodeType":"YulFunctionCall","src":"184:12:7"},"nodeType":"YulExpressionStatement","src":"184:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"156:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"152:3:7"},"nodeType":"YulFunctionCall","src":"152:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"177:3:7","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"148:3:7"},"nodeType":"YulFunctionCall","src":"148:33:7"},"nodeType":"YulIf","src":"145:53:7"},{"nodeType":"YulAssignment","src":"207:33:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"230:9:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"217:12:7"},"nodeType":"YulFunctionCall","src":"217:23:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"207:6:7"}]},{"nodeType":"YulAssignment","src":"249:42:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"276:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"287:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"272:3:7"},"nodeType":"YulFunctionCall","src":"272:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"259:12:7"},"nodeType":"YulFunctionCall","src":"259:32:7"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"249:6:7"}]},{"nodeType":"YulAssignment","src":"300:42:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"327:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"338:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:7"},"nodeType":"YulFunctionCall","src":"323:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"310:12:7"},"nodeType":"YulFunctionCall","src":"310:32:7"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"300:6:7"}]},{"nodeType":"YulAssignment","src":"351:42:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"378:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"389:2:7","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"374:3:7"},"nodeType":"YulFunctionCall","src":"374:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"361:12:7"},"nodeType":"YulFunctionCall","src":"361:32:7"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"351:6:7"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"77:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"88:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"100:6:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"108:6:7","type":""},{"name":"value2","nodeType":"YulTypedName","src":"116:6:7","type":""},{"name":"value3","nodeType":"YulTypedName","src":"124:6:7","type":""}],"src":"14:385:7"},{"body":{"nodeType":"YulBlock","src":"513:125:7","statements":[{"nodeType":"YulAssignment","src":"523:26:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"535:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"546:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"531:3:7"},"nodeType":"YulFunctionCall","src":"531:18:7"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"523:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"565:9:7"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"580:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"588:42:7","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"576:3:7"},"nodeType":"YulFunctionCall","src":"576:55:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"558:6:7"},"nodeType":"YulFunctionCall","src":"558:74:7"},"nodeType":"YulExpressionStatement","src":"558:74:7"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"482:9:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"493:6:7","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"504:4:7","type":""}],"src":"404:234:7"},{"body":{"nodeType":"YulBlock","src":"781:316:7","statements":[{"body":{"nodeType":"YulBlock","src":"828:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"837:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"840:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"830:6:7"},"nodeType":"YulFunctionCall","src":"830:12:7"},"nodeType":"YulExpressionStatement","src":"830:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"802:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"811:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"798:3:7"},"nodeType":"YulFunctionCall","src":"798:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"823:3:7","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"794:3:7"},"nodeType":"YulFunctionCall","src":"794:33:7"},"nodeType":"YulIf","src":"791:53:7"},{"nodeType":"YulAssignment","src":"853:33:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"876:9:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"863:12:7"},"nodeType":"YulFunctionCall","src":"863:23:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"853:6:7"}]},{"nodeType":"YulAssignment","src":"895:42:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"922:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"933:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"918:3:7"},"nodeType":"YulFunctionCall","src":"918:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"905:12:7"},"nodeType":"YulFunctionCall","src":"905:32:7"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"895:6:7"}]},{"nodeType":"YulAssignment","src":"946:42:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"973:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"984:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"969:3:7"},"nodeType":"YulFunctionCall","src":"969:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"956:12:7"},"nodeType":"YulFunctionCall","src":"956:32:7"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"946:6:7"}]},{"nodeType":"YulAssignment","src":"997:42:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1024:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1035:2:7","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1020:3:7"},"nodeType":"YulFunctionCall","src":"1020:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1007:12:7"},"nodeType":"YulFunctionCall","src":"1007:32:7"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"997:6:7"}]},{"nodeType":"YulAssignment","src":"1048:43:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1075:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1086:3:7","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1071:3:7"},"nodeType":"YulFunctionCall","src":"1071:19:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1058:12:7"},"nodeType":"YulFunctionCall","src":"1058:33:7"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1048:6:7"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"715:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"726:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"738:6:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"746:6:7","type":""},{"name":"value2","nodeType":"YulTypedName","src":"754:6:7","type":""},{"name":"value3","nodeType":"YulTypedName","src":"762:6:7","type":""},{"name":"value4","nodeType":"YulTypedName","src":"770:6:7","type":""}],"src":"643:454:7"},{"body":{"nodeType":"YulBlock","src":"1295:206:7","statements":[{"nodeType":"YulAssignment","src":"1305:27:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1317:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1328:3:7","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1313:3:7"},"nodeType":"YulFunctionCall","src":"1313:19:7"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1305:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1348:9:7"},{"name":"value0","nodeType":"YulIdentifier","src":"1359:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1341:6:7"},"nodeType":"YulFunctionCall","src":"1341:25:7"},"nodeType":"YulExpressionStatement","src":"1341:25:7"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1386:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1397:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1382:3:7"},"nodeType":"YulFunctionCall","src":"1382:18:7"},{"name":"value1","nodeType":"YulIdentifier","src":"1402:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1375:6:7"},"nodeType":"YulFunctionCall","src":"1375:34:7"},"nodeType":"YulExpressionStatement","src":"1375:34:7"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1429:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1440:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1425:3:7"},"nodeType":"YulFunctionCall","src":"1425:18:7"},{"name":"value2","nodeType":"YulIdentifier","src":"1445:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1418:6:7"},"nodeType":"YulFunctionCall","src":"1418:34:7"},"nodeType":"YulExpressionStatement","src":"1418:34:7"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1472:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1483:2:7","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1468:3:7"},"nodeType":"YulFunctionCall","src":"1468:18:7"},{"name":"value3","nodeType":"YulIdentifier","src":"1488:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1461:6:7"},"nodeType":"YulFunctionCall","src":"1461:34:7"},"nodeType":"YulExpressionStatement","src":"1461:34:7"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1240:9:7","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1251:6:7","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1259:6:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1267:6:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1275:6:7","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1286:4:7","type":""}],"src":"1102:399:7"},{"body":{"nodeType":"YulBlock","src":"1610:212:7","statements":[{"body":{"nodeType":"YulBlock","src":"1656:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1665:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1668:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1658:6:7"},"nodeType":"YulFunctionCall","src":"1658:12:7"},"nodeType":"YulExpressionStatement","src":"1658:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1631:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"1640:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1627:3:7"},"nodeType":"YulFunctionCall","src":"1627:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"1652:2:7","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1623:3:7"},"nodeType":"YulFunctionCall","src":"1623:32:7"},"nodeType":"YulIf","src":"1620:52:7"},{"nodeType":"YulAssignment","src":"1681:33:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1704:9:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1691:12:7"},"nodeType":"YulFunctionCall","src":"1691:23:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1681:6:7"}]},{"nodeType":"YulAssignment","src":"1723:42:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1750:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1761:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1746:3:7"},"nodeType":"YulFunctionCall","src":"1746:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1733:12:7"},"nodeType":"YulFunctionCall","src":"1733:32:7"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1723:6:7"}]},{"nodeType":"YulAssignment","src":"1774:42:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1801:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1812:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1797:3:7"},"nodeType":"YulFunctionCall","src":"1797:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1784:12:7"},"nodeType":"YulFunctionCall","src":"1784:32:7"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1774:6:7"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1560:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1571:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1583:6:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1591:6:7","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1599:6:7","type":""}],"src":"1506:316:7"},{"body":{"nodeType":"YulBlock","src":"1964:119:7","statements":[{"nodeType":"YulAssignment","src":"1974:26:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1986:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1997:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1982:3:7"},"nodeType":"YulFunctionCall","src":"1982:18:7"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1974:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2016:9:7"},{"name":"value0","nodeType":"YulIdentifier","src":"2027:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2009:6:7"},"nodeType":"YulFunctionCall","src":"2009:25:7"},"nodeType":"YulExpressionStatement","src":"2009:25:7"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2054:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"2065:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2050:3:7"},"nodeType":"YulFunctionCall","src":"2050:18:7"},{"name":"value1","nodeType":"YulIdentifier","src":"2070:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2043:6:7"},"nodeType":"YulFunctionCall","src":"2043:34:7"},"nodeType":"YulExpressionStatement","src":"2043:34:7"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1925:9:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1936:6:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1944:6:7","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1955:4:7","type":""}],"src":"1827:256:7"},{"body":{"nodeType":"YulBlock","src":"2137:233:7","statements":[{"nodeType":"YulAssignment","src":"2147:17:7","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2159:1:7"},{"name":"y","nodeType":"YulIdentifier","src":"2162:1:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2155:3:7"},"nodeType":"YulFunctionCall","src":"2155:9:7"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"2147:4:7"}]},{"body":{"nodeType":"YulBlock","src":"2196:168:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2217:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2220:77:7","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2210:6:7"},"nodeType":"YulFunctionCall","src":"2210:88:7"},"nodeType":"YulExpressionStatement","src":"2210:88:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2318:1:7","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2321:4:7","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2311:6:7"},"nodeType":"YulFunctionCall","src":"2311:15:7"},"nodeType":"YulExpressionStatement","src":"2311:15:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2346:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2349:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2339:6:7"},"nodeType":"YulFunctionCall","src":"2339:15:7"},"nodeType":"YulExpressionStatement","src":"2339:15:7"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"2179:4:7"},{"name":"x","nodeType":"YulIdentifier","src":"2185:1:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2176:2:7"},"nodeType":"YulFunctionCall","src":"2176:11:7"},"nodeType":"YulIf","src":"2173:191:7"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2119:1:7","type":""},{"name":"y","nodeType":"YulTypedName","src":"2122:1:7","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"2128:4:7","type":""}],"src":"2088:282:7"},{"body":{"nodeType":"YulBlock","src":"2407:152:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2424:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2427:77:7","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2417:6:7"},"nodeType":"YulFunctionCall","src":"2417:88:7"},"nodeType":"YulExpressionStatement","src":"2417:88:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2521:1:7","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2524:4:7","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2514:6:7"},"nodeType":"YulFunctionCall","src":"2514:15:7"},"nodeType":"YulExpressionStatement","src":"2514:15:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2545:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2548:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2538:6:7"},"nodeType":"YulFunctionCall","src":"2538:15:7"},"nodeType":"YulExpressionStatement","src":"2538:15:7"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"2375:184:7"},{"body":{"nodeType":"YulBlock","src":"2711:100:7","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2728:3:7"},{"name":"value0","nodeType":"YulIdentifier","src":"2733:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2721:6:7"},"nodeType":"YulFunctionCall","src":"2721:19:7"},"nodeType":"YulExpressionStatement","src":"2721:19:7"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2760:3:7"},{"kind":"number","nodeType":"YulLiteral","src":"2765:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2756:3:7"},"nodeType":"YulFunctionCall","src":"2756:12:7"},{"name":"value1","nodeType":"YulIdentifier","src":"2770:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2749:6:7"},"nodeType":"YulFunctionCall","src":"2749:28:7"},"nodeType":"YulExpressionStatement","src":"2749:28:7"},{"nodeType":"YulAssignment","src":"2786:19:7","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2797:3:7"},{"kind":"number","nodeType":"YulLiteral","src":"2802:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2793:3:7"},"nodeType":"YulFunctionCall","src":"2793:12:7"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2786:3:7"}]}]},"name":"abi_encode_tuple_packed_t_uint256_t_uint256__to_t_uint256_t_uint256__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"2679:3:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2684:6:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2692:6:7","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2703:3:7","type":""}],"src":"2564:247:7"},{"body":{"nodeType":"YulBlock","src":"2848:152:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2865:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2868:77:7","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2858:6:7"},"nodeType":"YulFunctionCall","src":"2858:88:7"},"nodeType":"YulExpressionStatement","src":"2858:88:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2962:1:7","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2965:4:7","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2955:6:7"},"nodeType":"YulFunctionCall","src":"2955:15:7"},"nodeType":"YulExpressionStatement","src":"2955:15:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2986:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2989:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2979:6:7"},"nodeType":"YulFunctionCall","src":"2979:15:7"},"nodeType":"YulExpressionStatement","src":"2979:15:7"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"2816:184:7"}]},"contents":"{\n { }\n function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n value3 := calldataload(add(headStart, 96))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n value3 := calldataload(add(headStart, 96))\n value4 := calldataload(add(headStart, 128))\n }\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_decode_tuple_t_bytes32t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x)\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n }\n function panic_error_0x12()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n function abi_encode_tuple_packed_t_uint256_t_uint256__to_t_uint256_t_uint256__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n mstore(pos, value0)\n mstore(add(pos, 32), value1)\n end := add(pos, 64)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n}","id":7,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c80635f67f323146100505780637f99d9601461008d578063e982f355146100c0575b600080fd5b61006361005e36600461215e565b6100e8565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100a061009b366004612190565b610264565b604080519485526020850193909352918301526060820152608001610084565b6100d36100ce3660046121cb565b61035b565b60408051928352602083019190915201610084565b600082158061011757507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518310155b80610120575081155b8061014b57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b156101585750600061025c565b600061016e84610169601b886121f7565b610406565b9050600061017b8561055b565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551827fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518a6000086101f0907fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516121f7565b09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551838709905060008061022a898786866105df565b604080516020808201949094528082019290925280518083038201815260609092019052805191012096505050505050505b949350505050565b6000808080807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8b0990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89820994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d090993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81880992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80828c09870991505095509550955095915050565b60008061036c600080866000611132565b91507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518260000891507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551807fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255185850987086103e68661055b565b0990508115806103f4575080155b156103fe57600080fd5b935093915050565b6000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80858609850990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7fffffffff00000001000000000000000000000000fffffffffffffffffffffffc870983087f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0890506104c781611bf9565b91507fffffffff00000002000000000000000000000000ffffffffffffffffffffffff8203610519577fffffffff00000003000000000000000000000000ffffffffffffffffffffffff915050610555565b82600116826001161461055357610550827fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6121f7565b91505b505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa6105d857600080fd5b5192915050565b600080808060ff6105ee612122565b6105f6612140565b88158015610602575087155b1561061857600080965096505050505050611129565b6106647f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611cce565b6020830152815288831c600190811689851c90911b600216015b806106a05760018403935060018a851c1660018a861c1660011b01905061067e565b50600189841c16600189851c1660011b01945060018503610702577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f595505b60028503610711578a96508995505b600385036107255760208101519550805196505b60018303925060019450600193505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115611011577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff866002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff88850997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89840998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c870908995060018d881c1660018d891c1660011b01905080610a1057897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03995050505050611006565b60018103610a5f577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610a6e578e93508d92505b60038103610a825784519350602085015192505b88610a9b57509198509650600195508594506110069050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c880908935080610dff5783610dff577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a82099950507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a850999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c870985089a505050505050611006565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818b0999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838f097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089c50505050809a50505050505b600183039250610734565b83606083015260208252602080830152602060408301527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808301527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a083015260208260c0846005600019fa61108957600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8251870995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8251860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff858809965050505050505b94509492505050565b600080808060ff818088158015611147575087155b1561115b576000965050505050505061025c565b6111a77f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611cce565b8092508193505050600189841c16600189851c1660011b015b806111e25760018403935060018a851c1660018a861c1660011b0190506111c0565b50600189841c16600189851c1660011b01955060018603611244577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603611253578a96508993505b60038603611262578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115611b49577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b0190508061154d57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050611b3e565b6001810361159c577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b600281036115ab578e93508d92505b600381036115ba578593508492505b896115d35750919850600197508796509450611b3e9050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8809089350806119375783611937577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b82099a50507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050611b3e565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250611271565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa611bc457600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099c9b505050505050505050505050565b600060405160208152602080820152602060408201528260608201527f3fffffffc0000000400000000000000000000000400000000000000000000000608082015260a081017fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815260208160c0846005600019fa611c7757600080fd5b5191508290507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82830914611cc957507fffffffff00000002000000000000000000000000ffffffffffffffffffffffff5b919050565b600080808086611ce5578585935093505050611129565b84611cf7578787935093505050611129565b611d0688886001808a8a611d2b565b929a5090985092509050611d1c88888484611ff0565b93509350505094509492505050565b60008060008088600003611d4a57508492508391506001905080611fe3565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b6000806000611ffe846120a5565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6105d857600080fd5b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6000806000806080858703121561217457600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156121a857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000606084860312156121e057600080fd5b505081359360208301359350604090920135919050565b81810381811115610555577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220e95d75cac5be2e930b8af42215213dbddb970eb865b0823981765d03ccbc4f6c64736f6c63430008140033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5F67F323 EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0x7F99D960 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0xE982F355 EQ PUSH2 0xC0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x63 PUSH2 0x5E CALLDATASIZE PUSH1 0x4 PUSH2 0x215E JUMP JUMPDEST PUSH2 0xE8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x2190 JUMP JUMPDEST PUSH2 0x264 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x84 JUMP JUMPDEST PUSH2 0xD3 PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0x21CB JUMP JUMPDEST PUSH2 0x35B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x84 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x117 JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP4 LT ISZERO JUMPDEST DUP1 PUSH2 0x120 JUMPI POP DUP2 ISZERO JUMPDEST DUP1 PUSH2 0x14B JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0x158 JUMPI POP PUSH1 0x0 PUSH2 0x25C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16E DUP5 PUSH2 0x169 PUSH1 0x1B DUP9 PUSH2 0x21F7 JUMP JUMPDEST PUSH2 0x406 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x17B DUP6 PUSH2 0x55B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP11 PUSH1 0x0 ADDMOD PUSH2 0x1F0 SWAP1 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH2 0x21F7 JUMP JUMPDEST MULMOD SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP4 DUP8 MULMOD SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x22A DUP10 DUP8 DUP7 DUP7 PUSH2 0x5DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP1 MLOAD DUP1 DUP4 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP7 POP POP POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP12 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP3 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP14 MULMOD MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP9 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 DUP13 MULMOD DUP8 MULMOD SWAP2 POP POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x36C PUSH1 0x0 DUP1 DUP7 PUSH1 0x0 PUSH2 0x1132 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 PUSH1 0x0 ADDMOD SWAP2 POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP1 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP6 DUP6 MULMOD DUP8 ADDMOD PUSH2 0x3E6 DUP7 PUSH2 0x55B JUMP JUMPDEST MULMOD SWAP1 POP DUP2 ISZERO DUP1 PUSH2 0x3F4 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0x3FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 DUP7 MULMOD DUP6 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC DUP8 MULMOD DUP4 ADDMOD PUSH32 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B ADDMOD SWAP1 POP PUSH2 0x4C7 DUP2 PUSH2 0x1BF9 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 SUB PUSH2 0x519 JUMPI PUSH32 0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP POP PUSH2 0x555 JUMP JUMPDEST DUP3 PUSH1 0x1 AND DUP3 PUSH1 0x1 AND EQ PUSH2 0x553 JUMPI PUSH2 0x550 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x21F7 JUMP JUMPDEST SWAP2 POP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH1 0xFF PUSH2 0x5EE PUSH2 0x2122 JUMP JUMPDEST PUSH2 0x5F6 PUSH2 0x2140 JUMP JUMPDEST DUP9 ISZERO DUP1 ISZERO PUSH2 0x602 JUMPI POP DUP8 ISZERO JUMPDEST ISZERO PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 SWAP7 POP SWAP7 POP POP POP POP POP POP PUSH2 0x1129 JUMP JUMPDEST PUSH2 0x664 PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 DUP14 DUP14 PUSH2 0x1CCE JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE DUP2 MSTORE DUP9 DUP4 SHR PUSH1 0x1 SWAP1 DUP2 AND DUP10 DUP6 SHR SWAP1 SWAP2 SHL PUSH1 0x2 AND ADD JUMPDEST DUP1 PUSH2 0x6A0 JUMPI PUSH1 0x1 DUP5 SUB SWAP4 POP PUSH1 0x1 DUP11 DUP6 SHR AND PUSH1 0x1 DUP11 DUP7 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP PUSH2 0x67E JUMP JUMPDEST POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD SWAP5 POP PUSH1 0x1 DUP6 SUB PUSH2 0x702 JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP7 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP6 POP JUMPDEST PUSH1 0x2 DUP6 SUB PUSH2 0x711 JUMPI DUP11 SWAP7 POP DUP10 SWAP6 POP JUMPDEST PUSH1 0x3 DUP6 SUB PUSH2 0x725 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP6 POP DUP1 MLOAD SWAP7 POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH1 0x1 SWAP5 POP PUSH1 0x1 SWAP4 POP JUMPDEST DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF GT ISZERO PUSH2 0x1011 JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 PUSH1 0x2 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP11 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP5 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP15 ADDMOD MULMOD PUSH1 0x3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP6 MULMOD SWAP8 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP5 MULMOD SWAP9 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD ADDMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD DUP3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP8 MULMOD ADDMOD SWAP10 POP PUSH1 0x1 DUP14 DUP9 SHR AND PUSH1 0x1 DUP14 DUP10 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP DUP1 PUSH2 0xA10 JUMPI DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB SWAP10 POP POP POP POP POP PUSH2 0x1006 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0xA5F JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP4 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP3 POP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0xA6E JUMPI DUP15 SWAP4 POP DUP14 SWAP3 POP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0xA82 JUMPI DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP JUMPDEST DUP9 PUSH2 0xA9B JUMPI POP SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 SWAP6 POP DUP6 SWAP5 POP PUSH2 0x1006 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP7 MULMOD ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP9 MULMOD ADDMOD SWAP4 POP DUP1 PUSH2 0xDFF JUMPI DUP4 PUSH2 0xDFF JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP7 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP14 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP14 ADDMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP4 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH1 0x3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP3 MULMOD SWAP10 POP POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP6 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD ADDMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP6 ADDMOD DUP4 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 DUP8 MULMOD DUP6 ADDMOD SWAP11 POP POP POP POP POP POP PUSH2 0x1006 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP4 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP13 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP12 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP15 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP9 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 DUP16 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP7 ADDMOD MULMOD ADDMOD SWAP13 POP POP POP POP DUP1 SWAP11 POP POP POP POP POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH2 0x734 JUMP JUMPDEST DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x20 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP4 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP4 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0xC0 DUP5 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x1089 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD DUP8 MULMOD SWAP6 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP9 MULMOD SWAP7 POP POP POP POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH1 0xFF DUP2 DUP1 DUP9 ISZERO DUP1 ISZERO PUSH2 0x1147 JUMPI POP DUP8 ISZERO JUMPDEST ISZERO PUSH2 0x115B JUMPI PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x25C JUMP JUMPDEST PUSH2 0x11A7 PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 DUP14 DUP14 PUSH2 0x1CCE JUMP JUMPDEST DUP1 SWAP3 POP DUP2 SWAP4 POP POP POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD JUMPDEST DUP1 PUSH2 0x11E2 JUMPI PUSH1 0x1 DUP5 SUB SWAP4 POP PUSH1 0x1 DUP11 DUP6 SHR AND PUSH1 0x1 DUP11 DUP7 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP PUSH2 0x11C0 JUMP JUMPDEST POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD SWAP6 POP PUSH1 0x1 DUP7 SUB PUSH2 0x1244 JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP7 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP4 POP JUMPDEST PUSH1 0x2 DUP7 SUB PUSH2 0x1253 JUMPI DUP11 SWAP7 POP DUP10 SWAP4 POP JUMPDEST PUSH1 0x3 DUP7 SUB PUSH2 0x1262 JUMPI DUP2 SWAP7 POP DUP1 SWAP4 POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH1 0x1 SWAP6 POP PUSH1 0x1 SWAP5 POP JUMPDEST DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF GT ISZERO PUSH2 0x1B49 JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH1 0x2 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP11 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP5 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP15 ADDMOD MULMOD PUSH1 0x3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP6 MULMOD SWAP9 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP5 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD ADDMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD DUP3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP8 MULMOD ADDMOD SWAP8 POP PUSH1 0x1 DUP14 DUP9 SHR AND PUSH1 0x1 DUP14 DUP10 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP DUP1 PUSH2 0x154D JUMPI DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB SWAP8 POP POP POP POP POP PUSH2 0x1B3E JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x159C JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP4 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP3 POP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x15AB JUMPI DUP15 SWAP4 POP DUP14 SWAP3 POP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0x15BA JUMPI DUP6 SWAP4 POP DUP5 SWAP3 POP JUMPDEST DUP10 PUSH2 0x15D3 JUMPI POP SWAP2 SWAP9 POP PUSH1 0x1 SWAP8 POP DUP8 SWAP7 POP SWAP5 POP PUSH2 0x1B3E SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP7 MULMOD ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP9 MULMOD ADDMOD SWAP4 POP DUP1 PUSH2 0x1937 JUMPI DUP4 PUSH2 0x1937 JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP7 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP14 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP14 ADDMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP4 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH1 0x3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP3 MULMOD SWAP11 POP POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP6 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD ADDMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP6 ADDMOD DUP4 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 DUP8 MULMOD DUP6 ADDMOD SWAP9 POP POP POP POP POP POP PUSH2 0x1B3E JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP4 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP14 MULMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP13 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP15 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP9 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 DUP14 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP7 ADDMOD MULMOD ADDMOD SWAP11 POP POP POP POP DUP1 SWAP11 POP POP POP POP POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH2 0x1271 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x1BC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD DUP10 MULMOD SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0x3FFFFFFFC0000000400000000000000000000000400000000000000000000000 PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 ADD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x1C77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST MLOAD SWAP2 POP DUP3 SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP4 MULMOD EQ PUSH2 0x1CC9 JUMPI POP PUSH32 0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP7 PUSH2 0x1CE5 JUMPI DUP6 DUP6 SWAP4 POP SWAP4 POP POP POP PUSH2 0x1129 JUMP JUMPDEST DUP5 PUSH2 0x1CF7 JUMPI DUP8 DUP8 SWAP4 POP SWAP4 POP POP POP PUSH2 0x1129 JUMP JUMPDEST PUSH2 0x1D06 DUP9 DUP9 PUSH1 0x1 DUP1 DUP11 DUP11 PUSH2 0x1D2B JUMP JUMPDEST SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP3 POP SWAP1 POP PUSH2 0x1D1C DUP9 DUP9 DUP5 DUP5 PUSH2 0x1FF0 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 PUSH1 0x0 SUB PUSH2 0x1D4A JUMPI POP DUP5 SWAP3 POP DUP4 SWAP2 POP PUSH1 0x1 SWAP1 POP DUP1 PUSH2 0x1FE3 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 SUB SWAP9 DUP10 DUP2 DUP10 DUP9 MULMOD ADDMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP10 MULMOD ADDMOD SWAP6 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP8 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP6 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP10 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP9 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP12 MULMOD SWAP8 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP11 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 DUP12 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD MULMOD ADDMOD SWAP3 POP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1FFE DUP5 PUSH2 0x20A5 JUMP JUMPDEST SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP8 MULMOD SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP8 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP10 MULMOD SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 CALLDATALOAD SWAP5 PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x21A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP4 CALLDATALOAD SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x21E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 CALLDATALOAD SWAP4 PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x555 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0x5D PUSH22 0xCAC5BE2E930B8AF42215213DBDDB970EB865B0823981 PUSH23 0x5D03CCBC4F6C64736F6C63430008140033000000000000 ","sourceMap":"1212:41972:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42062:552;;;;;;:::i;:::-;;:::i;:::-;;;588:42:7;576:55;;;558:74;;546:2;531:18;42062:552:1;;;;;;;;4800:480;;;;;;:::i;:::-;;:::i;:::-;;;;1341:25:7;;;1397:2;1382:18;;1375:34;;;;1425:18;;;1418:34;1483:2;1468:18;;1461:34;1328:3;1313:19;4800:480:1;1102:399:7;42759:422:1;;;;;;:::i;:::-;;:::i;:::-;;;;2009:25:7;;;2065:2;2050:18;;2043:34;;;;1982:18;42759:422:1;1827:256:7;42062:552:1;42150:7;42178:6;;;:16;;;2154:66;42188:1;:6;;42178:16;:26;;;-1:-1:-1;42198:6:1;;42178:26;:36;;;;2154:66;42208:1;:6;;42178:36;42174:84;;;-1:-1:-1;42245:1:1;42230:17;;42174:84;42267:9;42277:22;42291:1;42294:4;42296:2;42294:1;:4;:::i;:::-;42277:13;:22::i;:::-;42267:32;;42309:12;42322:14;42334:1;42322:11;:14::i;:::-;42309:27;-1:-1:-1;42346:10:1;2154:66;42381:4;2154:66;42375:1;42373;42366:13;42364:15;;2154:66;42364:15;:::i;:::-;42357:31;42346:42;-1:-1:-1;42406:10:1;2154:66;42427:4;42424:1;42417:17;42406:28;;42452:10;42472;42500:27;42515:1;42517;42520:2;42524;42500:14;:27::i;:::-;42579:24;;;;;;;2721:19:7;;;;2756:12;;;2749:28;;;;42579:24:1;;;;;;;;;2793:12:7;;;;42579:24:1;;42569:35;;;;;;-1:-1:-1;;;;;;;42062:552:1;;;;;;;:::o;4800:480::-;4908:10;;;;;1523:66;5008:5;5002;4995:21;4980:36;-1:-1:-1;1523:66:1;5052:1;5044:6;5037:19;5034:22;-1:-1:-1;1523:66:1;5114:1;1523:66;5103:6;5096:5;5089:23;5082:36;5079:39;-1:-1:-1;1523:66:1;5143:6;5140:2;5133:19;5129:23;-1:-1:-1;1523:66:1;;5204:6;5197:5;5190:23;5186:3;5179:37;5174:42;;5248:26;4800:480;;;;;;;;;;:::o;42759:422::-;42843:9;42854;42881:31;42902:1;42904;42907;42910;42881:20;:31::i;:::-;42879:33;-1:-1:-1;2154:66:1;42995:1;42993;42986:14;42984:16;-1:-1:-1;2154:66:1;;;43071:5;43068:1;43061:19;43051:7;43036:47;43020:14;43032:1;43020:11;:14::i;:::-;43013:73;43011:75;-1:-1:-1;43129:4:1;;;:10;;-1:-1:-1;43135:4:1;;43129:10;43126:47;;;43154:8;;;43126:47;42759:422;;;;;;:::o;8428:353::-;8500:9;;1523:66;;8551:1;8549;8542:13;8540:1;8533:25;8522:36;-1:-1:-1;1523:66:1;;;1658;8601:1;8594:13;8591:2;8584:26;1794:66;8575:38;8572:41;;8635:11;8643:2;8635:7;:11::i;:::-;8633:13;;2870:66;8659:1;:13;8656:59;;2971:66;8686:18;;;;;8656:59;8735:6;8742:1;8735:8;8728:1;8730;8728:3;8727:17;8724:51;;8761:3;8763:1;1523:66;8761:3;:::i;:::-;8759:5;;8724:51;8510:271;8428:353;;;;;:::o;3146:734::-;3201:14;3271:4;3265:11;3382:4;3373:7;3366:21;3427:4;3420;3411:7;3407:18;3400:32;3472:4;3465;3456:7;3452:18;3445:32;3576:1;3569:4;3560:7;3556:18;3549:29;3618:11;3611:4;3602:7;3598:18;3591:39;3670:1;3663:4;3654:7;3650:18;3643:29;3804:4;3795:7;3789:4;3780:7;3774:4;3770:1;3766:6;3755:54;3745:82;;3823:1;3820;3813:12;3745:82;3850:14;;3146:734;-1:-1:-1;;3146:734:1:o;20436:6519::-;20612:9;;;;20701:3;20714:19;;:::i;:::-;20743;;:::i;:::-;20802:13;;:30;;;;-1:-1:-1;20819:13:1;;20802:30;20798:48;;;20842:1;20844;20834:12;;;;;;;;;;;20798:48;20876:25;1930:66;2024;20894:2;20898;20876:9;:25::i;:::-;20862:4;20868;;20861:40;;;21059:20;;;20870:1;21055:28;;;21028:20;;;21017:36;;;;;21013:71;20997:263;21090:2;20997:263;;21139:1;21132:5;21128:13;21119:22;;21236:1;21225:8;21218:5;21214:20;21210:28;21205:1;21194:8;21187:5;21183:20;21179:28;21176:1;21172:36;21168:71;21162:77;;20997:263;;;21001:85;21351:1;21340:8;21333:5;21329:20;21325:28;21320:1;21309:8;21302:5;21298:20;21294:28;21291:1;21287:36;21283:71;21277:77;;21382:1;21378:2;21375:9;21372:88;;21412:2;21407:7;;21440:2;21435:7;;21372:88;21487:1;21483:2;21480:9;21477:88;;21517:2;21512:7;;21545:2;21540:7;;21477:88;21592:1;21588:2;21585:9;21582:108;;21634:2;21632:1;21628:9;21622:16;21617:21;;21670:1;21664:8;21659:13;;21582:108;21728:1;21721:5;21717:13;21708:22;;21753:1;21747:7;;21778:1;21771:8;;21797:4133;21816:5;21807:7;21804:18;21797:4133;;;21935:1;21932;21929;21922:15;22002:1;21998:2;21994;21987:17;22058:1;22054:2;22051:1;22044:16;22114:1;22110:2;22106;22099:17;22093:23;;22220:1;22216;22212;22208:2;22205:1;22198:16;22194:1;22189:2;22186:1;22182:10;22179:1;22172:24;22165:53;22162:1;22155:67;22290:1;22285:3;22281:2;22274:18;22267:25;;22348:1;22344:2;22340;22333:17;22327:23;;22447:1;22443;22439:2;22430:7;22423:22;22419:1;22415:2;22411;22404:17;22397:52;22392:57;;22525:1;22521;22516:2;22513:1;22509:10;22506:1;22499:24;22495:2;22488:39;22482:45;;22601:1;22597:2;22593:1;22590;22586:2;22579:16;22572:31;22567:36;;22830:1;22819:8;22812:5;22808:20;22804:28;22799:1;22788:8;22781:5;22777:20;22773:28;22770:1;22766:36;22762:71;22756:77;;22869:2;22859:148;;22915:1;22912;22908:9;22903:14;;22973:8;;;;;;22859:148;23055:1;23051:2;23048:9;23045:114;;23094:2;23088:8;;23131:2;23125:8;;23045:114;23194:1;23190:2;23187:9;23184:114;;23233:2;23227:8;;23270:2;23264:8;;23184:114;23333:1;23329:2;23326:9;23323:134;;23378:1;23372:8;23366:14;;23427:2;23425:1;23421:9;23415:16;23409:22;;23323:134;23492:2;23482:223;;-1:-1:-1;23531:2:1;;-1:-1:-1;23567:2:1;-1:-1:-1;23604:1:1;;-1:-1:-1;23604:1:1;;-1:-1:-1;23671:8:1;;-1:-1:-1;23671:8:1;23482:223;23888:1;23885;23881;23876:3;23872:2;23865:18;23858:32;23962:1;23958;23955;23951:9;23947:1;23943:2;23939;23932:17;23925:39;23919:45;;24189:2;24179:1131;;24233:2;24223:1061;;24296:1;24293;24284:7;24277:21;24271:27;;24371:1;24367:2;24363;24356:17;24350:23;;24435:1;24431:2;24428:1;24421:16;24415:22;;24504:1;24500:2;24496;24489:17;24483:23;;24567:1;24563:2;24560:1;24553:16;24547:22;;24642:1;24637:2;24634:1;24630:10;24627:1;24620:24;24706:1;24701:3;24697:2;24690:18;24684:24;;24776:1;24772:2;24769:1;24762:16;24756:22;;24840:1;24835:3;24830;24823:19;24816:26;;;24910:1;24906:2;24902;24895:17;24889:23;;25021:1;25017;25013:2;25004:7;24997:22;24993:1;24989:2;24985;24978:17;24971:52;24966:57;;25111:1;25107;25103;25100;25096:9;25092:2;25085:24;25081:2;25074:39;25068:45;;25191:1;25187;25184;25180:2;25173:16;25169:2;25162:31;25157:36;;25246:8;;;;;;;24223:1061;25357:1;25353:2;25349;25342:17;25336:23;;25415:1;25411:2;25407;25400:17;25531:1;25527:2;25523;25516:17;25510:23;;25582:1;25577:3;25572;25565:19;25558:26;;25646:1;25642:2;25639:1;25632:16;25754:1;25750;25745:3;25736:7;25729:23;25725:1;25719:3;25716:1;25712:11;25708:1;25704:2;25700;25693:17;25686:41;25679:77;25673:83;;25855:1;25851;25846:3;25843:1;25836:17;25832:1;25828:2;25824:1;25819:2;25816:1;25812:10;25807:3;25800:26;25793:41;25786:71;25781:76;;;;;25888:2;25883:7;;22689:3223;;;;21797:4133;21845:1;21838:5;21834:13;21825:22;;21797:4133;;;25979:3;25972:4;25969:1;25965:12;25958:25;26245:4;26242:1;26235:15;26288:4;26281;26278:1;26274:12;26267:26;26331:4;26324;26321:1;26317:12;26310:26;26485:7;26478:4;26475:1;26471:12;26464:29;26531:1;26524:4;26521:1;26517:12;26510:23;26661:4;26658:1;26652:4;26649:1;26643:4;26639:1;26635:6;26624:42;26614:70;;26680:1;26677;26670:12;26614:70;26723:1;26720;26714:8;26712:1;26705:20;26702:23;;26774:1;26771;26765:8;26761:2;26754:22;26749:27;;26817:1;26814:2;26811;26804:15;26799:20;;26862:1;26858:2;26855:1;26848:16;26843:21;;26936:12;;;;;20436:6519;;;;;;;;:::o;13739:6506::-;13921:9;;;;14018:3;13921:9;;14100:13;;:30;;;;-1:-1:-1;14117:13:1;;14100:30;14096:44;;;14139:1;14132:8;;;;;;;;;;14096:44;14166:25;1930:66;2024;14184:2;14188;14166:9;:25::i;:::-;14155:36;;;;;;;;14371:1;14360:8;14353:5;14349:20;14345:28;14340:1;14329:8;14322:5;14318:20;14314:28;14311:1;14307:36;14303:71;14287:263;14380:2;14287:263;;14429:1;14422:5;14418:13;14409:22;;14526:1;14515:8;14508:5;14504:20;14500:28;14495:1;14484:8;14477:5;14473:20;14469:28;14466:1;14462:36;14458:71;14452:77;;14287:263;;;14291:85;14641:1;14630:8;14623:5;14619:20;14615:28;14610:1;14599:8;14592:5;14588:20;14584:28;14581:1;14577:36;14573:71;14567:77;;14672:1;14668:2;14665:9;14662:88;;14702:2;14697:7;;14730:2;14725:7;;14662:88;14777:1;14773:2;14770:9;14767:88;;14807:2;14802:7;;14835:2;14830:7;;14767:88;14882:1;14878:2;14875:9;14872:88;;14912:2;14907:7;;14940:2;14935:7;;14872:88;14998:1;14991:5;14987:13;14978:22;;15023:1;15017:7;;15048:1;15041:8;;15067:4114;15086:5;15077:7;15074:18;15067:4114;;;15205:1;15202;15199;15192:15;15272:1;15268:2;15264;15257:17;15328:1;15324:2;15321:1;15314:16;15384:1;15380:2;15376;15369:17;15363:23;;15490:1;15486;15482;15478:2;15475:1;15468:16;15464:1;15459:2;15456:1;15452:10;15449:1;15442:24;15435:53;15432:1;15425:67;15560:1;15555:3;15551:2;15544:18;15537:25;;15618:1;15614:2;15610;15603:17;15597:23;;15717:1;15713;15709:2;15700:7;15693:22;15689:1;15685:2;15681;15674:17;15667:52;15662:57;;15795:1;15791;15786:2;15783:1;15779:10;15776:1;15769:24;15765:2;15758:39;15752:45;;15871:1;15867:2;15863:1;15860;15856:2;15849:16;15842:31;15837:36;;16100:1;16089:8;16082:5;16078:20;16074:28;16069:1;16058:8;16051:5;16047:20;16043:28;16040:1;16036:36;16032:71;16026:77;;16139:2;16129:148;;16185:1;16182;16178:9;16173:14;;16243:8;;;;;;16129:148;16325:1;16321:2;16318:9;16315:114;;16364:2;16358:8;;16401:2;16395:8;;16315:114;16464:1;16460:2;16457:9;16454:114;;16503:2;16497:8;;16540:2;16534:8;;16454:114;16603:1;16599:2;16596:9;16593:114;;16642:2;16636:8;;16679:2;16673:8;;16593:114;16742:2;16732:223;;-1:-1:-1;16781:2:1;;-1:-1:-1;16854:1:1;;-1:-1:-1;16854:1:1;;-1:-1:-1;16817:2:1;-1:-1:-1;16921:8:1;;-1:-1:-1;16921:8:1;16732:223;17138:1;17135;17131;17126:3;17122:2;17115:18;17108:32;17212:1;17208;17205;17201:9;17197:1;17193:2;17189;17182:17;17175:39;17169:45;;17439:2;17429:1132;;17483:2;17473:1062;;17546:1;17543;17534:7;17527:21;17521:27;;17621:1;17617:2;17613;17606:17;17600:23;;17685:1;17681:2;17678:1;17671:16;17665:22;;17754:1;17750:2;17746;17739:17;17733:23;;17817:1;17813:2;17810:1;17803:16;17797:22;;17893:1;17888:2;17885:1;17881:10;17878:1;17871:24;17957:1;17952:3;17948:2;17941:18;17935:24;;18027:1;18023:2;18020:1;18013:16;18007:22;;18091:1;18086:3;18081;18074:19;18067:26;;;18161:1;18157:2;18153;18146:17;18140:23;;18272:1;18268;18264:2;18255:7;18248:22;18244:1;18240:2;18236;18229:17;18222:52;18217:57;;18362:1;18358;18354;18351;18347:9;18343:2;18336:24;18332:2;18325:39;18319:45;;18442:1;18438;18435;18431:2;18424:16;18420:2;18413:31;18408:36;;18497:8;;;;;;;17473:1062;18608:1;18604:2;18600;18593:17;18587:23;;18666:1;18662:2;18658;18651:17;18782:1;18778:2;18774;18767:17;18761:23;;18833:1;18828:3;18823;18816:19;18809:26;;18897:1;18893:2;18890:1;18883:16;19005:1;19001;18996:3;18987:7;18980:23;18976:1;18970:3;18967:1;18963:11;18959:1;18955:2;18951;18944:17;18937:41;18930:77;18924:83;;19106:1;19102;19097:3;19094:1;19087:17;19083:1;19079:2;19075:1;19070:2;19067:1;19063:10;19058:3;19051:26;19044:41;19037:71;19032:76;;;;;19139:2;19134:7;;15959:3204;;;;15067:4114;15115:1;15108:5;15104:13;15095:22;;15067:4114;;;19224:4;19218:11;19267:2;19260:4;19257:1;19253:12;19246:24;19532:4;19529:1;19522:15;19575:4;19568;19565:1;19561:12;19554:26;19618:4;19611;19608:1;19604:12;19597:26;19772:7;19765:4;19762:1;19758:12;19751:29;19818:1;19811:4;19808:1;19804:12;19797:23;19948:4;19945:1;19939:4;19936:1;19930:4;19926:1;19922:6;19911:42;19901:70;;19967:1;19964;19957:12;19901:70;20156:1;20152;20146:8;20143:1;20136:22;20131:27;13739:6506;-1:-1:-1;;;;;;;;;;;;13739:6506:1:o;6622:1501::-;6676:14;6796:4;6790:11;6868:4;6859:7;6852:21;6953:4;6946;6937:7;6933:18;6926:32;7037:4;7030;7021:7;7017:18;7010:32;7115:4;7108;7099:7;7095:18;7088:32;7191:7;7184:4;7175:7;7171:18;7164:35;7414:4;7405:7;7401:18;7478:1;7469:7;7462:18;7903:4;7808:7;7759:4;7720:7;7675:17;7630:1;7626:6;7598:345;7575:395;;7966:1;7963;7956:12;7575:395;7984:14;;-1:-1:-1;8065:4:1;;-1:-1:-1;1523:66:1;8054:6;8047;8040:23;:29;8037:63;;-1:-1:-1;2870:66:1;8037:63;6622:1501;;;:::o;13194:373::-;13284:7;;;;12525:6;13356:41;;13390:2;13394;13382:15;;;;;;;;13356:41;12525:6;13407:41;;13441:2;13445;13433:15;;;;;;;;13407:41;13481:31;13491:2;13495;13499:1;13502;13505:2;13509;13481:9;:31::i;:::-;13459:53;;-1:-1:-1;13459:53:1;;-1:-1:-1;13459:53:1;-1:-1:-1;13459:53:1;-1:-1:-1;13530:30:1;13459:53;;;;13530:11;:30::i;:::-;13523:37;;;;;;13194:373;;;;;;;:::o;10549:1073::-;10690:10;10702;10714;10726;10780:2;10786:1;10780:7;10776:67;;-1:-1:-1;10815:2:1;;-1:-1:-1;10819:2:1;;-1:-1:-1;10823:1:1;;-1:-1:-1;10823:1:1;10807:21;;10776:67;10894:1;10890:10;;;;;10894:1;10941:4;10937:2;10930:19;10923:34;10917:40;;11019:1;11014:2;11011:1;11007:10;11003:1;10998:3;10994:2;10987:18;10980:41;10974:47;;11059:1;11055:2;11051;11044:17;11038:23;;11110:1;11106:2;11102;11095:17;11089:23;;11164:1;11160:2;11155:3;11148:18;11142:24;;11223:1;11219:2;11213:4;11206:19;11200:25;;11284:1;11280:2;11276;11269:17;11262:24;;11395:1;11391;11386:3;11377:7;11370:23;11366:1;11361:2;11358:1;11354:10;11350:1;11346:2;11342;11335:17;11328:40;11321:76;11315:82;;11503:1;11499;11495:2;11491;11484:17;11480:1;11476:2;11472:1;11467:2;11464:1;11460:10;11455:3;11448:26;11441:41;11434:71;11428:77;;10549:1073;;;;;;;;;;;;:::o;8944:351::-;9035:10;9047;9069:14;9086:16;9098:3;9086:11;:16::i;:::-;9069:33;-1:-1:-1;1523:66:1;9135:6;9132:1;9125:20;9120:25;-1:-1:-1;9163:10:1;1523:66;9187:6;9183:2;9176:21;9163:34;-1:-1:-1;1523:66:1;9233:2;9229;9222:17;9213:26;-1:-1:-1;1523:66:1;9271:6;9268:1;9261:20;9256:25;;9059:236;;8944:351;;;;;;;:::o;3992:730::-;4047:14;4117:4;4111:11;4228:4;4219:7;4212:21;4273:4;4266;4257:7;4253:18;4246:32;4318:4;4311;4302:7;4298:18;4291:32;4422:1;4415:4;4406:7;4402:18;4395:29;4464:7;4457:4;4448:7;4444:18;4437:35;4512:1;4505:4;4496:7;4492:18;4485:29;4646:4;4637:7;4631:4;4622:7;4616:4;4612:1;4608:6;4597:54;4587:82;;4665:1;4662;4655:12;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:385:7:-;100:6;108;116;124;177:3;165:9;156:7;152:23;148:33;145:53;;;194:1;191;184:12;145:53;-1:-1:-1;;217:23:7;;;287:2;272:18;;259:32;;-1:-1:-1;338:2:7;323:18;;310:32;;389:2;374:18;361:32;;-1:-1:-1;14:385:7;-1:-1:-1;14:385:7:o;643:454::-;738:6;746;754;762;770;823:3;811:9;802:7;798:23;794:33;791:53;;;840:1;837;830:12;791:53;-1:-1:-1;;863:23:7;;;933:2;918:18;;905:32;;-1:-1:-1;984:2:7;969:18;;956:32;;1035:2;1020:18;;1007:32;;-1:-1:-1;1086:3:7;1071:19;1058:33;;-1:-1:-1;643:454:7;-1:-1:-1;643:454:7:o;1506:316::-;1583:6;1591;1599;1652:2;1640:9;1631:7;1627:23;1623:32;1620:52;;;1668:1;1665;1658:12;1620:52;-1:-1:-1;;1691:23:7;;;1761:2;1746:18;;1733:32;;-1:-1:-1;1812:2:7;1797:18;;;1784:32;;1506:316;-1:-1:-1;1506:316:7:o;2088:282::-;2155:9;;;2176:11;;;2173:191;;;2220:77;2217:1;2210:88;2321:4;2318:1;2311:15;2349:4;2346:1;2339:15"},"gasEstimates":{"creation":{"codeDepositCost":"1761400","executionCost":"1886","totalCost":"1763286"},"external":{"ecZZ_Coronize(uint256,uint256,uint256,uint256,uint256)":"579","ec_recover_r1(uint256,uint256,uint256,uint256)":"infinite","ecdsa_sign(bytes32,uint256,uint256)":"infinite"},"internal":{"FCL_nModInv(uint256)":"infinite","FCL_pModInv(uint256)":"infinite","SqrtMod(uint256)":"infinite","ecAff_IsZero(uint256,uint256)":"infinite","ecAff_SetZZ(uint256,uint256)":"infinite","ecAff_SetZero()":"infinite","ecAff_add(uint256,uint256,uint256,uint256)":"infinite","ecAff_isOnCurve(uint256,uint256)":"infinite","ecZZ_Add(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)":"infinite","ecZZ_AddN(uint256,uint256,uint256,uint256,uint256,uint256)":"412","ecZZ_Dbl(uint256,uint256,uint256,uint256)":"infinite","ecZZ_IsZero(uint256,uint256,uint256,uint256)":"infinite","ecZZ_SetAff(uint256,uint256,uint256,uint256)":"infinite","ecZZ_SetZero()":"infinite","ecZZ_mulmuladd(uint256,uint256,uint256,uint256)":"infinite","ecZZ_mulmuladd_S8_extcode(uint256,uint256,address)":"infinite","ecZZ_mulmuladd_S8_hackmem(uint256,uint256,uint256)":"infinite","ecZZ_mulmuladd_S_asm(uint256,uint256,uint256,uint256)":"infinite","ec_Decompress(uint256,uint256)":"infinite","ecdsa_precomputed_hackmem(bytes32,uint256[2] calldata,uint256)":"infinite","ecdsa_precomputed_verify(bytes32,uint256[2] calldata,address)":"infinite","ecdsa_verify(bytes32,uint256[2] calldata,uint256[2] calldata)":"infinite"}},"methodIdentifiers":{"ecZZ_Coronize(uint256,uint256,uint256,uint256,uint256)":"7f99d960","ec_recover_r1(uint256,uint256,uint256,uint256)":"5f67f323","ecdsa_sign(bytes32,uint256,uint256)":"e982f355"}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"zz\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"zzz\",\"type\":\"uint256\"}],\"name\":\"ecZZ_Coronize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"x3\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y3\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"zz3\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"zzz3\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"h\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"v\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"}],\"name\":\"ec_recover_r1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"message\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"k\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"kpriv\",\"type\":\"uint256\"}],\"name\":\"ecdsa_sign\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"FreshCryptoLib/FCL_elliptic.sol\":\"FCL_Elliptic_ZZ\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/FCL_elliptic.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: modified XYZZ system coordinates for EVM elliptic point multiplication\\n///* optimization\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nlibrary FCL_Elliptic_ZZ {\\n // Set parameters for curve sec256r1.\\n\\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\\n //curve prime field modulus\\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n //short weierstrass first coefficient\\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\\n //short weierstrass second coefficient\\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\\n //generating point affine coordinates\\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\\n //curve order (number of points)\\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\\n /* -2 mod n constant, used to speed up inversion*/\\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\\n\\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\\n //P+1 div 4\\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\\n //arbitrary constant to express no quadratic residuosity\\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n\\n /**\\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\\n */\\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2modn)\\n mstore(add(pointer, 0xa0), n)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n /**\\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\\n */\\n\\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2)\\n mstore(add(pointer, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n\\n //Coron projective shuffling, take as input alpha as blinding factor\\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) public pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n \\n uint256 alpha2=mulmod(alpha,alpha,p);\\n \\n x3=mulmod(alpha2, x,p); //alpha^-2.x\\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\\n\\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\\n \\n return (x3, y3, zz3, zzz3);\\n }\\n\\n\\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\\n u2=addmod(u2, p-u1, p);// P = U2-U1\\n x1=mulmod(u2, u2, p);//PP\\n x2=mulmod(x1, u2, p);//PPP\\n \\n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \\n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\\n\\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \\n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\\n\\n return (x3, y3, zz3, zzz3);\\n }\\n\\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\\n/// @param self The integer of which to find the modular inverse\\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\\n\\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\\n assembly (\\\"memory-safe\\\") {\\n // load the free memory pointer value\\n let pointer := mload(0x40)\\n\\n // Define length of base (Bsize)\\n mstore(pointer, 0x20)\\n // Define the exponent size (Esize)\\n mstore(add(pointer, 0x20), 0x20)\\n // Define the modulus size (Msize)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base (B)\\n mstore(add(pointer, 0x60), self)\\n // Define the exponent (E)\\n mstore(add(pointer, 0x80), pp1div4)\\n // We save the point of the last argument, it will be override by the result\\n // of the precompile call in order to avoid paying for the memory expansion properly\\n let _result := add(pointer, 0xa0)\\n // Define the modulus (M)\\n mstore(_result, p)\\n\\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\\n if iszero(\\n staticcall(\\n not(0), // amount of gas to send\\n MODEXP_PRECOMPILE, // target\\n pointer, // argsOffset\\n 0xc0, // argsSize (6 * 32 bytes)\\n _result, // retOffset (we override M to avoid paying for the memory expansion)\\n 0x20 // retSize (32 bytes)\\n )\\n ) { revert(0, 0) }\\n\\n result := mload(_result)\\n// result :=addmod(result,0,p)\\n }\\n if(mulmod(result,result,p)!=self){\\n result=_NOTSQUARE;\\n }\\n \\n return result;\\n}\\n /**\\n * /* @dev Convert from affine rep to XYZZ rep\\n */\\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\\n unchecked {\\n P[2] = 1; //ZZ\\n P[3] = 1; //ZZZ\\n P[0] = x0;\\n P[1] = y0;\\n }\\n }\\n\\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \\n\\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\\n\\n y=SqrtMod(y2);\\n if(y==_NOTSQUARE){\\n return _NOTONCURVE;\\n }\\n if((y&1)!=(parity&1)){\\n y=p-y;\\n }\\n }\\n\\n /**\\n * /* @dev Convert from XYZZ rep to affine rep\\n */\\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\\n y1 = mulmod(y, zzzInv, p); //Y/zzz\\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\\n zzzInv = mulmod(_b, _b, p); //1/zz\\n x1 = mulmod(x, zzzInv, p); //X/zz\\n }\\n\\n /**\\n * /* @dev Sutherland2008 doubling\\n */\\n /* The \\\"dbl-2008-s-1\\\" doubling formulas */\\n\\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n assembly {\\n P0 := mulmod(2, y, p) //U = 2*Y1\\n P2 := mulmod(P0, P0, p) // V=U^2\\n P3 := mulmod(x, P2, p) // S = X1*V\\n P1 := mulmod(P0, P2, p) // W=UV\\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\\n }\\n }\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\\n */\\n\\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n if (y1 == 0) {\\n return (x2, y2, 1, 1);\\n }\\n\\n assembly {\\n y1 := sub(p, y1)\\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\\n P0 := mulmod(x2, x2, p) //PP = P^2\\n P1 := mulmod(P0, x2, p) //PPP = P*PP\\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\\n }\\n //end assembly\\n } //end unchecked\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Return the zero curve in XYZZ coordinates.\\n */\\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\\n return (0, 0, 0, 0);\\n }\\n /**\\n * @dev Check if point is the neutral of the curve\\n */\\n\\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\\n return y0 == 0;\\n }\\n /**\\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\\n */\\n\\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\\n return (0, 0);\\n }\\n\\n /**\\n * @dev Check if the curve is the zero curve in affine rep.\\n */\\n // uint256 x, uint256 y)\\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\\n return (y == 0);\\n }\\n\\n /**\\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\\n */\\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\\n if (0 == x || x == p || 0 == y || y == p) {\\n return false;\\n }\\n unchecked {\\n uint256 LHS = mulmod(y, y, p); // y^2\\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\\n\\n return LHS == RHS;\\n }\\n }\\n\\n /**\\n * @dev Add two elliptic curve points in affine coordinates.\\n */\\n\\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\\n uint256 zz0;\\n uint256 zzz0;\\n\\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\\n\\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\\n\\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\\n }\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns only x for ECDSA use \\n * */\\n function ecZZ_mulmuladd_S_asm(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 Y;\\n uint256 index = 255;\\n uint256 H0;\\n uint256 H1;\\n\\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return 0;\\n\\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n X := H0\\n Y := H1\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := H0\\n T2 := H1\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n let T := mload(0x40)\\n mstore(add(T, 0x60), zz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n //Y:=mulmod(Y,zzz,p)//Y/zzz\\n //zz :=mulmod(zz, mload(T),p) //1/z\\n //zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, mload(T), p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return X;\\n }\\n\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns affine representation of point (normalized) \\n * */\\n function ecZZ_mulmuladd(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X, uint256 Y) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 index = 255;\\n uint256[6] memory T;\\n uint256[2] memory H;\\n \\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\\n\\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n Y := mload(add(H,32))\\n X := mload(H)\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := mload(H)\\n T2 := mload(add(H,32))\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zzz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n Y:=mulmod(Y,mload(T),p)//Y/zzz\\n zz :=mulmod(zz, mload(T),p) //1/z\\n zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, zz, p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return (X,Y);\\n }\\n\\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\\n //contract at given address dataPointer\\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\\n // the external tool to generate tables from public key is in the /sage directory\\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n unchecked {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n extcodecopy(dataPointer, T, mload(T), 64)\\n let index := sub(zz, 1)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for {} gt(index, 191) { index := add(index, 191) } {\\n //inline Double\\n {\\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(TT1, TT1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n let T1 := mulmod(TT1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n }\\n {\\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n let index2 := sub(index, 64)\\n let T3 :=\\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\\n let index3 := sub(index2, 64)\\n let T2 :=\\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\\n index := sub(index3, 64)\\n let T1 :=\\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T1) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n extcodecopy(dataPointer, T, T1, 64)\\n }\\n\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n\\n // inlined EcZZ_AddN\\n if iszero(zz) {\\n X := mload(T)\\n Y := mload(add(T, 32))\\n zz := 1\\n zzz := 1\\n\\n continue\\n }\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n\\n //special case ecAdd(P,P)=EcDbl\\n if iszero(y2) {\\n if iszero(T2) {\\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n let T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n let T4 := mulmod(T2, T2, p)\\n let T1 := mulmod(T4, T2, p) //\\n zz := mulmod(zz, T4, p)\\n //zzz3=V*ZZ1\\n zzz := mulmod(zzz, T1, p) // W=UV/\\n let zz1 := mulmod(X, T4, p)\\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n \\n\\n // improving the extcodecopy trick : append array at end of contract\\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n unchecked {\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n codecopy(T, add(mload(T), dataPointer), 64)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n //index:=add(index,192), restore index, interleaved with loop\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T4) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n codecopy(T, add(T4, dataPointer), 64)\\n\\n // inlined EcZZ_AddN\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n T4 := mulmod(T2, T2, p)\\n T1 := mulmod(T4, T2, p)\\n T2 := mulmod(zz, T4, p) // W=UV\\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\\n let zz1 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\\n zz := T2\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256[2] calldata Q) internal view returns (bool) {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n uint256 Q0 = Q[0];\\n uint256 Q1 = Q[1];\\n if (!ecAff_isOnCurve(Q0, Q1)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, n);\\n uint256 scalar_v = mulmod(r, sInv, n);\\n uint256 x1;\\n\\n x1 = ecZZ_mulmuladd_S_asm(Q0, Q1, scalar_u, scalar_v);\\n\\n assembly {\\n x1 := addmod(x1, sub(n, r), n)\\n }\\n //return true;\\n return x1 == 0;\\n }\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256[2] calldata rs, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) public view returns (address)\\n {\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return address(0);\\n }\\n uint256 y=ec_Decompress(r, v-27);\\n uint256 rinv=FCL_nModInv(r);\\n uint256 u1=mulmod(n-addmod(0,h,n), rinv,n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n //ecdsa signature for test purpose only (who would like to have a private key onchain anyway ?)\\n //K is nonce, kpriv is private key\\n function ecdsa_sign(bytes32 message, uint256 k , uint256 kpriv) public view returns(uint256 r, uint256 s)\\n {\\n r=ecZZ_mulmuladd_S_asm(0,0, k, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n r=addmod(0,r, n); \\n s=mulmod(FCL_nModInv(k), addmod(uint256(message), mulmod(r, kpriv, n),n),n);//s=k^-1.(h+r.kpriv)\\n\\n \\n if(r==0||s==0){\\n revert();\\n }\\n\\n\\n }\\n\\n} //EOF\\n\",\"keccak256\":\"0xd6c3e555eae02916f6b9d65db6509d7ddf0fd76d5399e29dbc1502e0b7d992a6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"FreshCryptoLib/utils/Base64Url.sol":{"Base64Url":{"abi":[],"devdoc":{"author":"evmbrahmin, adapted from hiromin's Base64URL libraries","details":"Encode (without '=' padding) ","kind":"dev","methods":{},"stateVariables":{"ENCODING_TABLE":{"details":"Base64Url Encoding Table"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220dd0fb3e368a541ad90e70b9ff44a2b95cab5a3874a7a68ec142b3bf9a4e367c664736f6c63430008140033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0xF 0xB3 0xE3 PUSH9 0xA541AD90E70B9FF44A 0x2B SWAP6 0xCA 0xB5 LOG3 DUP8 0x4A PUSH27 0x68EC142B3BF9A4E367C664736F6C63430008140033000000000000 ","sourceMap":"176:2116:2:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;176:2116:2;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220dd0fb3e368a541ad90e70b9ff44a2b95cab5a3874a7a68ec142b3bf9a4e367c664736f6c63430008140033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0xF 0xB3 0xE3 PUSH9 0xA541AD90E70B9FF44A 0x2B SWAP6 0xCA 0xB5 LOG3 DUP8 0x4A PUSH27 0x68EC142B3BF9A4E367C664736F6C63430008140033000000000000 ","sourceMap":"176:2116:2:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"encode(bytes memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"evmbrahmin, adapted from hiromin's Base64URL libraries\",\"details\":\"Encode (without '=' padding) \",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ENCODING_TABLE\":{\"details\":\"Base64Url Encoding Table\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"FreshCryptoLib/utils/Base64Url.sol\":\"Base64Url\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/utils/Base64Url.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Encode (without '=' padding) \\n * @author evmbrahmin, adapted from hiromin's Base64URL libraries\\n */\\nlibrary Base64Url {\\n /**\\n * @dev Base64Url Encoding Table\\n */\\n string internal constant ENCODING_TABLE =\\n \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\\\";\\n\\n function encode(bytes memory data) internal pure returns (string memory) {\\n if (data.length == 0) return \\\"\\\";\\n\\n // Load the table into memory\\n string memory table = ENCODING_TABLE;\\n\\n string memory result = new string(4 * ((data.length + 2) / 3));\\n\\n // @solidity memory-safe-assembly\\n assembly {\\n let tablePtr := add(table, 1)\\n let resultPtr := add(result, 32)\\n\\n for {\\n let dataPtr := data\\n let endPtr := add(data, mload(data))\\n } lt(dataPtr, endPtr) {\\n\\n } {\\n dataPtr := add(dataPtr, 3)\\n let input := mload(dataPtr)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(18, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(12, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(6, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))\\n resultPtr := add(resultPtr, 1)\\n }\\n\\n // Remove the padding adjustment logic\\n switch mod(mload(data), 3)\\n case 1 {\\n // Adjust for the last byte of data\\n resultPtr := sub(resultPtr, 2)\\n }\\n case 2 {\\n // Adjust for the last two bytes of data\\n resultPtr := sub(resultPtr, 1)\\n }\\n \\n // Set the correct length of the result string\\n mstore(result, sub(resultPtr, add(result, 32)))\\n }\\n\\n return result; \\n }\\n}\\n\",\"keccak256\":\"0xc9d5fbb0ef9ff0756eb5aabe7a32b2bf0f8f3c533d4451dd5778fe77aee7f0c1\",\"license\":\"Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/FCL/WrapperFCLWebAuthn.sol":{"WrapperFCLWebAuthn":{"abi":[{"inputs":[],"name":"InvalidAuthenticatorData","type":"error"},{"inputs":[],"name":"InvalidClientData","type":"error"},{"inputs":[{"internalType":"bytes","name":"authenticatorData","type":"bytes"},{"internalType":"bytes1","name":"authenticatorDataFlagMask","type":"bytes1"},{"internalType":"bytes","name":"clientData","type":"bytes"},{"internalType":"bytes32","name":"clientChallenge","type":"bytes32"},{"internalType":"uint256","name":"clientChallengeDataOffset","type":"uint256"},{"internalType":"uint256[2]","name":"rs","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Q","type":"uint256[2]"}],"name":"checkSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"This lib is only a wrapper around the FCL_WebAuthn library. It is meant to be used with 1271 signatures. The wrapping is necessary because the FCL_WebAuthn has only internal functions and use calldata. This makes it impossible to use it with isValidSignature that use memory.","kind":"dev","methods":{},"title":"WrapperFCLWebAuthn","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"611a3c61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80630d5efec91461003a575b600080fd5b61004d61004836600461179d565b610061565b604051901515815260200160405180910390f35b60006100748a8a8a8a8a8a8a8a8a610082565b9a9950505050505050505050565b6000806100958b8b8b8b8b8b8b8b6100b4565b905060006100a4828686610357565b9c9b505050505050505050505050565b60007fff000000000000000000000000000000000000000000000000000000000000008716878a8a60208181106100ed576100ed61187c565b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610151576040517ffc93479200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061017d8560405160200161016991815260200190565b6040516020818303038152906040526104b9565b90506000815167ffffffffffffffff81111561019b5761019b6118ab565b6040519080825280601f01601f1916602001820160405280156101c5576020820181803683370190505b50905080518589016020830137600081516020830120905080836040516020016101ef91906118da565b604051602081830303815290604052805190602001201461023c576040517febab5d2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000915061024e9050896020611938565b67ffffffffffffffff811115610266576102666118ab565b6040519080825280601f01601f191660200182016040528015610290576020820181803683370190505b509050888a60208301376000600288886040516102ae92919061194b565b602060405180830381855afa1580156102cb573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906102ee919061195b565b90508060208b0183015260028260405161030891906118da565b602060405180830381855afa158015610325573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610348919061195b565b9b9a5050505050505050505050565b60008235602084013581158061038d57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b80610396575080155b806103c157507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518110155b156103d1576000925050506104b2565b833560208501356103e28282610628565b6103f35760009450505050506104b2565b60006103fe846107a1565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828b09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518388099050600061045e86868585610825565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255103820815985050505050505050505b9392505050565b606081516000036104d857505060408051602081019091526000815290565b60006040518060600160405280604081526020016119c760409139905060006003845160026105079190611938565b6105119190611974565b61051c9060046119af565b67ffffffffffffffff811115610534576105346118ab565b6040519080825280601f01601f19166020018201604052801561055e576020820181803683370190505b509050600182016020820185865187015b808210156105ca576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f811685015184535060018301925061056f565b50506003865106600181146105e657600281146105f1576105f8565b6002820391506105f8565b6001820391505b508290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018252509392505050565b600082158061065657507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83145b8061065f575081155b8061068957507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82145b156106965750600061079b565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8208919091149150505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61081e57600080fd5b5192915050565b600080808060ff81808815801561083a575087155b1561084e57600096505050505050506112e6565b61089a7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d6112ee565b8092508193505050600189841c16600189851c1660011b015b806108d55760018403935060018a851c1660018a861c1660011b0190506108b3565b50600189841c16600189851c1660011b01955060018603610937577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603610946578a96508993505b60038603610955578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff111561123c577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080610c4057877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050611231565b60018103610c8f577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610c9e578e93508d92505b60038103610cad578593508492505b89610cc657509198506001975087965094506112319050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d88090893508061102a578361102a577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b82099a50507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050611231565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250610964565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6112b757600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b600080808086611305578585935093505050611343565b84611317578787935093505050611343565b61132688886001808a8a61134c565b929a509098509250905061133c88888484611611565b9350935050505b94509492505050565b6000806000808860000361136b57508492508391506001905080611604565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061161f846116c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61081e57600080fd5b60008083601f84011261175557600080fd5b50813567ffffffffffffffff81111561176d57600080fd5b60208301915083602082850101111561178557600080fd5b9250929050565b806040810183101561079b57600080fd5b60008060008060008060008060006101208a8c0312156117bc57600080fd5b893567ffffffffffffffff808211156117d457600080fd5b6117e08d838e01611743565b909b50995060208c013591507fff000000000000000000000000000000000000000000000000000000000000008216821461181a57600080fd5b90975060408b0135908082111561183057600080fd5b5061183d8c828d01611743565b90975095505060608a0135935060808a0135925061185e8b60a08c0161178c565b915061186d8b60e08c0161178c565b90509295985092959850929598565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000825160005b818110156118fb57602081860181015185830152016118e1565b506000920191825250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561079b5761079b611909565b8183823760009101908152919050565b60006020828403121561196d57600080fd5b5051919050565b6000826119aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761079b5761079b61190956fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa2646970667358221220a5a42b5a5048bdf6322d6fa3052df01e1a197bbb61722775e8f972389e441d9964736f6c63430008140033","opcodes":"PUSH2 0x1A3C PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xD5EFEC9 EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4D PUSH2 0x48 CALLDATASIZE PUSH1 0x4 PUSH2 0x179D JUMP JUMPDEST PUSH2 0x61 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH2 0x74 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x82 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x95 DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 PUSH2 0xB4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA4 DUP3 DUP7 DUP7 PUSH2 0x357 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 DUP8 AND DUP8 DUP11 DUP11 PUSH1 0x20 DUP2 DUP2 LT PUSH2 0xED JUMPI PUSH2 0xED PUSH2 0x187C JUMP JUMPDEST SWAP1 POP ADD CALLDATALOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL AND PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x151 JUMPI PUSH1 0x40 MLOAD PUSH32 0xFC93479200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17D DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x169 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x4B9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x19B JUMPI PUSH2 0x19B PUSH2 0x18AB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1C5 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP1 MLOAD DUP6 DUP10 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 DUP4 ADD KECCAK256 SWAP1 POP DUP1 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1EF SWAP2 SWAP1 PUSH2 0x18DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x23C JUMPI PUSH1 0x40 MLOAD PUSH32 0xEBAB5D2900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP2 POP PUSH2 0x24E SWAP1 POP DUP10 PUSH1 0x20 PUSH2 0x1938 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x266 JUMPI PUSH2 0x266 PUSH2 0x18AB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x290 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP11 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x2 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x2AE SWAP3 SWAP2 SWAP1 PUSH2 0x194B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2EE SWAP2 SWAP1 PUSH2 0x195B JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP12 ADD DUP4 ADD MSTORE PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x18DA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x325 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x348 SWAP2 SWAP1 PUSH2 0x195B JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH1 0x20 DUP5 ADD CALLDATALOAD DUP2 ISZERO DUP1 PUSH2 0x38D JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 LT ISZERO JUMPDEST DUP1 PUSH2 0x396 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x3C1 JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP2 LT ISZERO JUMPDEST ISZERO PUSH2 0x3D1 JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x4B2 JUMP JUMPDEST DUP4 CALLDATALOAD PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3E2 DUP3 DUP3 PUSH2 0x628 JUMP JUMPDEST PUSH2 0x3F3 JUMPI PUSH1 0x0 SWAP5 POP POP POP POP POP PUSH2 0x4B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FE DUP5 PUSH2 0x7A1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 DUP12 MULMOD SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP4 DUP9 MULMOD SWAP1 POP PUSH1 0x0 PUSH2 0x45E DUP7 DUP7 DUP6 DUP6 PUSH2 0x825 JUMP JUMPDEST SWAP1 POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP9 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 SUB DUP3 ADDMOD ISZERO SWAP9 POP POP POP POP POP POP POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD PUSH1 0x0 SUB PUSH2 0x4D8 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19C7 PUSH1 0x40 SWAP2 CODECOPY SWAP1 POP PUSH1 0x0 PUSH1 0x3 DUP5 MLOAD PUSH1 0x2 PUSH2 0x507 SWAP2 SWAP1 PUSH2 0x1938 JUMP JUMPDEST PUSH2 0x511 SWAP2 SWAP1 PUSH2 0x1974 JUMP JUMPDEST PUSH2 0x51C SWAP1 PUSH1 0x4 PUSH2 0x19AF JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x534 JUMPI PUSH2 0x534 PUSH2 0x18AB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x55E JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x1 DUP3 ADD PUSH1 0x20 DUP3 ADD DUP6 DUP7 MLOAD DUP8 ADD JUMPDEST DUP1 DUP3 LT ISZERO PUSH2 0x5CA JUMPI PUSH1 0x3 DUP3 ADD SWAP2 POP DUP2 MLOAD PUSH1 0x3F DUP2 PUSH1 0x12 SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 PUSH1 0xC SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 PUSH1 0x6 SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 AND DUP6 ADD MLOAD DUP5 MSTORE8 POP PUSH1 0x1 DUP4 ADD SWAP3 POP PUSH2 0x56F JUMP JUMPDEST POP POP PUSH1 0x3 DUP7 MLOAD MOD PUSH1 0x1 DUP2 EQ PUSH2 0x5E6 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x5F1 JUMPI PUSH2 0x5F8 JUMP JUMPDEST PUSH1 0x2 DUP3 SUB SWAP2 POP PUSH2 0x5F8 JUMP JUMPDEST PUSH1 0x1 DUP3 SUB SWAP2 POP JUMPDEST POP DUP3 SWAP1 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD DUP3 MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x656 JUMPI POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 EQ JUMPDEST DUP1 PUSH2 0x65F JUMPI POP DUP2 ISZERO JUMPDEST DUP1 PUSH2 0x689 JUMPI POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ JUMPDEST ISZERO PUSH2 0x696 JUMPI POP PUSH1 0x0 PUSH2 0x79B JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC DUP8 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP11 MULMOD MULMOD ADDMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B DUP3 ADDMOD SWAP2 SWAP1 SWAP2 EQ SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x81E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH1 0xFF DUP2 DUP1 DUP9 ISZERO DUP1 ISZERO PUSH2 0x83A JUMPI POP DUP8 ISZERO JUMPDEST ISZERO PUSH2 0x84E JUMPI PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x12E6 JUMP JUMPDEST PUSH2 0x89A PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 DUP14 DUP14 PUSH2 0x12EE JUMP JUMPDEST DUP1 SWAP3 POP DUP2 SWAP4 POP POP POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD JUMPDEST DUP1 PUSH2 0x8D5 JUMPI PUSH1 0x1 DUP5 SUB SWAP4 POP PUSH1 0x1 DUP11 DUP6 SHR AND PUSH1 0x1 DUP11 DUP7 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP PUSH2 0x8B3 JUMP JUMPDEST POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD SWAP6 POP PUSH1 0x1 DUP7 SUB PUSH2 0x937 JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP7 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP4 POP JUMPDEST PUSH1 0x2 DUP7 SUB PUSH2 0x946 JUMPI DUP11 SWAP7 POP DUP10 SWAP4 POP JUMPDEST PUSH1 0x3 DUP7 SUB PUSH2 0x955 JUMPI DUP2 SWAP7 POP DUP1 SWAP4 POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH1 0x1 SWAP6 POP PUSH1 0x1 SWAP5 POP JUMPDEST DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF GT ISZERO PUSH2 0x123C JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH1 0x2 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP11 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP5 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP15 ADDMOD MULMOD PUSH1 0x3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP6 MULMOD SWAP9 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP5 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD ADDMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD DUP3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP8 MULMOD ADDMOD SWAP8 POP PUSH1 0x1 DUP14 DUP9 SHR AND PUSH1 0x1 DUP14 DUP10 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP DUP1 PUSH2 0xC40 JUMPI DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB SWAP8 POP POP POP POP POP PUSH2 0x1231 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0xC8F JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP4 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP3 POP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0xC9E JUMPI DUP15 SWAP4 POP DUP14 SWAP3 POP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0xCAD JUMPI DUP6 SWAP4 POP DUP5 SWAP3 POP JUMPDEST DUP10 PUSH2 0xCC6 JUMPI POP SWAP2 SWAP9 POP PUSH1 0x1 SWAP8 POP DUP8 SWAP7 POP SWAP5 POP PUSH2 0x1231 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP7 MULMOD ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP9 MULMOD ADDMOD SWAP4 POP DUP1 PUSH2 0x102A JUMPI DUP4 PUSH2 0x102A JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP7 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP14 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP14 ADDMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP4 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH1 0x3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP3 MULMOD SWAP11 POP POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP6 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD ADDMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP6 ADDMOD DUP4 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 DUP8 MULMOD DUP6 ADDMOD SWAP9 POP POP POP POP POP POP PUSH2 0x1231 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP4 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP14 MULMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP13 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP15 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP9 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 DUP14 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP7 ADDMOD MULMOD ADDMOD SWAP11 POP POP POP POP DUP1 SWAP11 POP POP POP POP POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH2 0x964 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x12B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD DUP10 MULMOD SWAP8 POP POP POP POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP7 PUSH2 0x1305 JUMPI DUP6 DUP6 SWAP4 POP SWAP4 POP POP POP PUSH2 0x1343 JUMP JUMPDEST DUP5 PUSH2 0x1317 JUMPI DUP8 DUP8 SWAP4 POP SWAP4 POP POP POP PUSH2 0x1343 JUMP JUMPDEST PUSH2 0x1326 DUP9 DUP9 PUSH1 0x1 DUP1 DUP11 DUP11 PUSH2 0x134C JUMP JUMPDEST SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP3 POP SWAP1 POP PUSH2 0x133C DUP9 DUP9 DUP5 DUP5 PUSH2 0x1611 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 PUSH1 0x0 SUB PUSH2 0x136B JUMPI POP DUP5 SWAP3 POP DUP4 SWAP2 POP PUSH1 0x1 SWAP1 POP DUP1 PUSH2 0x1604 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 SUB SWAP9 DUP10 DUP2 DUP10 DUP9 MULMOD ADDMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP10 MULMOD ADDMOD SWAP6 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP8 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP6 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP10 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP9 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP12 MULMOD SWAP8 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP11 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 DUP12 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD MULMOD ADDMOD SWAP3 POP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x161F DUP5 PUSH2 0x16C6 JUMP JUMPDEST SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP8 MULMOD SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP8 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP10 MULMOD SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x81E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1755 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x40 DUP2 ADD DUP4 LT ISZERO PUSH2 0x79B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x17BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x17D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17E0 DUP14 DUP4 DUP15 ADD PUSH2 0x1743 JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x20 DUP13 ADD CALLDATALOAD SWAP2 POP PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 EQ PUSH2 0x181A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP8 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1830 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x183D DUP13 DUP3 DUP14 ADD PUSH2 0x1743 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP POP PUSH1 0x60 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH2 0x185E DUP12 PUSH1 0xA0 DUP13 ADD PUSH2 0x178C JUMP JUMPDEST SWAP2 POP PUSH2 0x186D DUP12 PUSH1 0xE0 DUP13 ADD PUSH2 0x178C JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x18FB JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x18E1 JUMP JUMPDEST POP PUSH1 0x0 SWAP3 ADD SWAP2 DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x79B JUMPI PUSH2 0x79B PUSH2 0x1909 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x196D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x19AA JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x79B JUMPI PUSH2 0x79B PUSH2 0x1909 JUMP INVALID COINBASE TIMESTAMP NUMBER PREVRANDAO GASLIMIT CHAINID SELFBALANCE BASEFEE 0x49 0x4A 0x4B 0x4C 0x4D 0x4E 0x4F POP MLOAD MSTORE MSTORE8 SLOAD SSTORE JUMP JUMPI PC MSIZE GAS PUSH2 0x6263 PUSH5 0x6566676869 PUSH11 0x6B6C6D6E6F707172737475 PUSH23 0x7778797A303132333435363738392D5FA2646970667358 0x22 SLT KECCAK256 0xA5 LOG4 0x2B GAS POP BASEFEE 0xBD 0xF6 ORIGIN 0x2D PUSH16 0xA3052DF01E1A197BBB61722775E8F972 CODESIZE SWAP15 PREVRANDAO SAR SWAP10 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"559:606:3:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;559:606:3;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@FCL_nModInv_298":{"entryPoint":1953,"id":298,"parameterSlots":1,"returnSlots":1},"@FCL_pModInv_308":{"entryPoint":5830,"id":308,"parameterSlots":1,"returnSlots":1},"@WebAuthn_format_109":{"entryPoint":180,"id":109,"parameterSlots":8,"returnSlots":1},"@checkSignature_156":{"entryPoint":130,"id":156,"parameterSlots":9,"returnSlots":1},"@checkSignature_1972":{"entryPoint":97,"id":1972,"parameterSlots":9,"returnSlots":1},"@ecAff_IsZero_890":{"entryPoint":null,"id":890,"parameterSlots":2,"returnSlots":1},"@ecAff_add_1024":{"entryPoint":4846,"id":1024,"parameterSlots":4,"returnSlots":2},"@ecAff_isOnCurve_961":{"entryPoint":1576,"id":961,"parameterSlots":2,"returnSlots":1},"@ecZZ_AddN_823":{"entryPoint":4940,"id":823,"parameterSlots":6,"returnSlots":4},"@ecZZ_SetAff_750":{"entryPoint":5649,"id":750,"parameterSlots":4,"returnSlots":2},"@ecZZ_mulmuladd_S_asm_1083":{"entryPoint":2085,"id":1083,"parameterSlots":4,"returnSlots":1},"@ecdsa_verify_1556":{"entryPoint":855,"id":1556,"parameterSlots":3,"returnSlots":1},"@encode_1931":{"entryPoint":1209,"id":1931,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_calldata":{"entryPoint":6028,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":5955,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":6491,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_calldata_ptrt_bytes1t_bytes_calldata_ptrt_bytes32t_uint256t_array$_t_uint256_$2_calldata_ptrt_array$_t_uint256_$2_calldata_ptr":{"entryPoint":6045,"id":null,"parameterSlots":2,"returnSlots":9},"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":6475,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":6362,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":6456,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":6516,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":6575,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":6409,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":6268,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":6315,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4462:7","statements":[{"nodeType":"YulBlock","src":"6:3:7","statements":[]},{"body":{"nodeType":"YulBlock","src":"86:275:7","statements":[{"body":{"nodeType":"YulBlock","src":"135:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"144:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"147:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"137:6:7"},"nodeType":"YulFunctionCall","src":"137:12:7"},"nodeType":"YulExpressionStatement","src":"137:12:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"114:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"122:4:7","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"110:3:7"},"nodeType":"YulFunctionCall","src":"110:17:7"},{"name":"end","nodeType":"YulIdentifier","src":"129:3:7"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"106:3:7"},"nodeType":"YulFunctionCall","src":"106:27:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"99:6:7"},"nodeType":"YulFunctionCall","src":"99:35:7"},"nodeType":"YulIf","src":"96:55:7"},{"nodeType":"YulAssignment","src":"160:30:7","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"183:6:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"170:12:7"},"nodeType":"YulFunctionCall","src":"170:20:7"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"160:6:7"}]},{"body":{"nodeType":"YulBlock","src":"233:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"242:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"245:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"235:6:7"},"nodeType":"YulFunctionCall","src":"235:12:7"},"nodeType":"YulExpressionStatement","src":"235:12:7"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"205:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"213:18:7","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"202:2:7"},"nodeType":"YulFunctionCall","src":"202:30:7"},"nodeType":"YulIf","src":"199:50:7"},{"nodeType":"YulAssignment","src":"258:29:7","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"274:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"282:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"270:3:7"},"nodeType":"YulFunctionCall","src":"270:17:7"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"258:8:7"}]},{"body":{"nodeType":"YulBlock","src":"339:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"348:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"351:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"341:6:7"},"nodeType":"YulFunctionCall","src":"341:12:7"},"nodeType":"YulExpressionStatement","src":"341:12:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"310:6:7"},{"name":"length","nodeType":"YulIdentifier","src":"318:6:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"306:3:7"},"nodeType":"YulFunctionCall","src":"306:19:7"},{"kind":"number","nodeType":"YulLiteral","src":"327:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"302:3:7"},"nodeType":"YulFunctionCall","src":"302:30:7"},{"name":"end","nodeType":"YulIdentifier","src":"334:3:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"299:2:7"},"nodeType":"YulFunctionCall","src":"299:39:7"},"nodeType":"YulIf","src":"296:59:7"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"49:6:7","type":""},{"name":"end","nodeType":"YulTypedName","src":"57:3:7","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"65:8:7","type":""},{"name":"length","nodeType":"YulTypedName","src":"75:6:7","type":""}],"src":"14:347:7"},{"body":{"nodeType":"YulBlock","src":"438:87:7","statements":[{"nodeType":"YulAssignment","src":"448:18:7","value":{"name":"offset","nodeType":"YulIdentifier","src":"460:6:7"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"448:8:7"}]},{"body":{"nodeType":"YulBlock","src":"503:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"512:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"515:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"505:6:7"},"nodeType":"YulFunctionCall","src":"505:12:7"},"nodeType":"YulExpressionStatement","src":"505:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"485:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"493:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"481:3:7"},"nodeType":"YulFunctionCall","src":"481:15:7"},{"name":"end","nodeType":"YulIdentifier","src":"498:3:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"478:2:7"},"nodeType":"YulFunctionCall","src":"478:24:7"},"nodeType":"YulIf","src":"475:44:7"}]},"name":"abi_decode_array_uint256_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"409:6:7","type":""},{"name":"end","nodeType":"YulTypedName","src":"417:3:7","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"425:8:7","type":""}],"src":"366:159:7"},{"body":{"nodeType":"YulBlock","src":"789:1064:7","statements":[{"body":{"nodeType":"YulBlock","src":"836:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"845:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"848:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"838:6:7"},"nodeType":"YulFunctionCall","src":"838:12:7"},"nodeType":"YulExpressionStatement","src":"838:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"810:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"819:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"806:3:7"},"nodeType":"YulFunctionCall","src":"806:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"831:3:7","type":"","value":"288"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"802:3:7"},"nodeType":"YulFunctionCall","src":"802:33:7"},"nodeType":"YulIf","src":"799:53:7"},{"nodeType":"YulVariableDeclaration","src":"861:37:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"888:9:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"875:12:7"},"nodeType":"YulFunctionCall","src":"875:23:7"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"865:6:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"907:28:7","value":{"kind":"number","nodeType":"YulLiteral","src":"917:18:7","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"911:2:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"962:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"971:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"974:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"964:6:7"},"nodeType":"YulFunctionCall","src":"964:12:7"},"nodeType":"YulExpressionStatement","src":"964:12:7"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"950:6:7"},{"name":"_1","nodeType":"YulIdentifier","src":"958:2:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"947:2:7"},"nodeType":"YulFunctionCall","src":"947:14:7"},"nodeType":"YulIf","src":"944:34:7"},{"nodeType":"YulVariableDeclaration","src":"987:84:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1043:9:7"},{"name":"offset","nodeType":"YulIdentifier","src":"1054:6:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1039:3:7"},"nodeType":"YulFunctionCall","src":"1039:22:7"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1063:7:7"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"1013:25:7"},"nodeType":"YulFunctionCall","src":"1013:58:7"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"991:8:7","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"1001:8:7","type":""}]},{"nodeType":"YulAssignment","src":"1080:18:7","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"1090:8:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1080:6:7"}]},{"nodeType":"YulAssignment","src":"1107:18:7","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"1117:8:7"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1107:6:7"}]},{"nodeType":"YulVariableDeclaration","src":"1134:45:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1164:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1175:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1160:3:7"},"nodeType":"YulFunctionCall","src":"1160:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1147:12:7"},"nodeType":"YulFunctionCall","src":"1147:32:7"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1138:5:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"1289:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1298:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1301:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1291:6:7"},"nodeType":"YulFunctionCall","src":"1291:12:7"},"nodeType":"YulExpressionStatement","src":"1291:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1201:5:7"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1212:5:7"},{"kind":"number","nodeType":"YulLiteral","src":"1219:66:7","type":"","value":"0xff00000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1208:3:7"},"nodeType":"YulFunctionCall","src":"1208:78:7"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1198:2:7"},"nodeType":"YulFunctionCall","src":"1198:89:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1191:6:7"},"nodeType":"YulFunctionCall","src":"1191:97:7"},"nodeType":"YulIf","src":"1188:117:7"},{"nodeType":"YulAssignment","src":"1314:15:7","value":{"name":"value","nodeType":"YulIdentifier","src":"1324:5:7"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1314:6:7"}]},{"nodeType":"YulVariableDeclaration","src":"1338:48:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1371:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1382:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1367:3:7"},"nodeType":"YulFunctionCall","src":"1367:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1354:12:7"},"nodeType":"YulFunctionCall","src":"1354:32:7"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1342:8:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"1415:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1424:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1427:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1417:6:7"},"nodeType":"YulFunctionCall","src":"1417:12:7"},"nodeType":"YulExpressionStatement","src":"1417:12:7"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1401:8:7"},{"name":"_1","nodeType":"YulIdentifier","src":"1411:2:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1398:2:7"},"nodeType":"YulFunctionCall","src":"1398:16:7"},"nodeType":"YulIf","src":"1395:36:7"},{"nodeType":"YulVariableDeclaration","src":"1440:86:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1496:9:7"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1507:8:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1492:3:7"},"nodeType":"YulFunctionCall","src":"1492:24:7"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1518:7:7"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"1466:25:7"},"nodeType":"YulFunctionCall","src":"1466:60:7"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"1444:8:7","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"1454:8:7","type":""}]},{"nodeType":"YulAssignment","src":"1535:18:7","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"1545:8:7"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1535:6:7"}]},{"nodeType":"YulAssignment","src":"1562:18:7","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"1572:8:7"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1562:6:7"}]},{"nodeType":"YulAssignment","src":"1589:42:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1616:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1627:2:7","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1612:3:7"},"nodeType":"YulFunctionCall","src":"1612:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1599:12:7"},"nodeType":"YulFunctionCall","src":"1599:32:7"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1589:6:7"}]},{"nodeType":"YulAssignment","src":"1640:43:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1667:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1678:3:7","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1663:3:7"},"nodeType":"YulFunctionCall","src":"1663:19:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1650:12:7"},"nodeType":"YulFunctionCall","src":"1650:33:7"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1640:6:7"}]},{"nodeType":"YulAssignment","src":"1692:73:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1740:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1751:3:7","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1736:3:7"},"nodeType":"YulFunctionCall","src":"1736:19:7"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1757:7:7"}],"functionName":{"name":"abi_decode_array_uint256_calldata","nodeType":"YulIdentifier","src":"1702:33:7"},"nodeType":"YulFunctionCall","src":"1702:63:7"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"1692:6:7"}]},{"nodeType":"YulAssignment","src":"1774:73:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1822:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1833:3:7","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1818:3:7"},"nodeType":"YulFunctionCall","src":"1818:19:7"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1839:7:7"}],"functionName":{"name":"abi_decode_array_uint256_calldata","nodeType":"YulIdentifier","src":"1784:33:7"},"nodeType":"YulFunctionCall","src":"1784:63:7"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"1774:6:7"}]}]},"name":"abi_decode_tuple_t_bytes_calldata_ptrt_bytes1t_bytes_calldata_ptrt_bytes32t_uint256t_array$_t_uint256_$2_calldata_ptrt_array$_t_uint256_$2_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"691:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"702:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"714:6:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"722:6:7","type":""},{"name":"value2","nodeType":"YulTypedName","src":"730:6:7","type":""},{"name":"value3","nodeType":"YulTypedName","src":"738:6:7","type":""},{"name":"value4","nodeType":"YulTypedName","src":"746:6:7","type":""},{"name":"value5","nodeType":"YulTypedName","src":"754:6:7","type":""},{"name":"value6","nodeType":"YulTypedName","src":"762:6:7","type":""},{"name":"value7","nodeType":"YulTypedName","src":"770:6:7","type":""},{"name":"value8","nodeType":"YulTypedName","src":"778:6:7","type":""}],"src":"530:1323:7"},{"body":{"nodeType":"YulBlock","src":"1961:92:7","statements":[{"nodeType":"YulAssignment","src":"1971:26:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1983:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"1994:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1979:3:7"},"nodeType":"YulFunctionCall","src":"1979:18:7"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1971:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2013:9:7"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2038:6:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2031:6:7"},"nodeType":"YulFunctionCall","src":"2031:14:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2024:6:7"},"nodeType":"YulFunctionCall","src":"2024:22:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2006:6:7"},"nodeType":"YulFunctionCall","src":"2006:41:7"},"nodeType":"YulExpressionStatement","src":"2006:41:7"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1930:9:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1941:6:7","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1952:4:7","type":""}],"src":"1858:195:7"},{"body":{"nodeType":"YulBlock","src":"2090:152:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2107:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2110:77:7","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2100:6:7"},"nodeType":"YulFunctionCall","src":"2100:88:7"},"nodeType":"YulExpressionStatement","src":"2100:88:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2204:1:7","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2207:4:7","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2197:6:7"},"nodeType":"YulFunctionCall","src":"2197:15:7"},"nodeType":"YulExpressionStatement","src":"2197:15:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2228:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2231:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2221:6:7"},"nodeType":"YulFunctionCall","src":"2221:15:7"},"nodeType":"YulExpressionStatement","src":"2221:15:7"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"2058:184:7"},{"body":{"nodeType":"YulBlock","src":"2366:63:7","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2383:3:7"},{"name":"value0","nodeType":"YulIdentifier","src":"2388:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2376:6:7"},"nodeType":"YulFunctionCall","src":"2376:19:7"},"nodeType":"YulExpressionStatement","src":"2376:19:7"},{"nodeType":"YulAssignment","src":"2404:19:7","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2415:3:7"},{"kind":"number","nodeType":"YulLiteral","src":"2420:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2411:3:7"},"nodeType":"YulFunctionCall","src":"2411:12:7"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2404:3:7"}]}]},"name":"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"2342:3:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2347:6:7","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2358:3:7","type":""}],"src":"2247:182:7"},{"body":{"nodeType":"YulBlock","src":"2466:152:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2483:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2486:77:7","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2476:6:7"},"nodeType":"YulFunctionCall","src":"2476:88:7"},"nodeType":"YulExpressionStatement","src":"2476:88:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2580:1:7","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2583:4:7","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2573:6:7"},"nodeType":"YulFunctionCall","src":"2573:15:7"},"nodeType":"YulExpressionStatement","src":"2573:15:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2604:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2607:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2597:6:7"},"nodeType":"YulFunctionCall","src":"2597:15:7"},"nodeType":"YulExpressionStatement","src":"2597:15:7"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"2434:184:7"},{"body":{"nodeType":"YulBlock","src":"2760:275:7","statements":[{"nodeType":"YulVariableDeclaration","src":"2770:27:7","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2790:6:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2784:5:7"},"nodeType":"YulFunctionCall","src":"2784:13:7"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2774:6:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2806:10:7","value":{"kind":"number","nodeType":"YulLiteral","src":"2815:1:7","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2810:1:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"2877:77:7","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2902:3:7"},{"name":"i","nodeType":"YulIdentifier","src":"2907:1:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2898:3:7"},"nodeType":"YulFunctionCall","src":"2898:11:7"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2925:6:7"},{"name":"i","nodeType":"YulIdentifier","src":"2933:1:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2921:3:7"},"nodeType":"YulFunctionCall","src":"2921:14:7"},{"kind":"number","nodeType":"YulLiteral","src":"2937:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2917:3:7"},"nodeType":"YulFunctionCall","src":"2917:25:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2911:5:7"},"nodeType":"YulFunctionCall","src":"2911:32:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2891:6:7"},"nodeType":"YulFunctionCall","src":"2891:53:7"},"nodeType":"YulExpressionStatement","src":"2891:53:7"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2836:1:7"},{"name":"length","nodeType":"YulIdentifier","src":"2839:6:7"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2833:2:7"},"nodeType":"YulFunctionCall","src":"2833:13:7"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2847:21:7","statements":[{"nodeType":"YulAssignment","src":"2849:17:7","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2858:1:7"},{"kind":"number","nodeType":"YulLiteral","src":"2861:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2854:3:7"},"nodeType":"YulFunctionCall","src":"2854:12:7"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2849:1:7"}]}]},"pre":{"nodeType":"YulBlock","src":"2829:3:7","statements":[]},"src":"2825:129:7"},{"nodeType":"YulVariableDeclaration","src":"2963:26:7","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2977:3:7"},{"name":"length","nodeType":"YulIdentifier","src":"2982:6:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2973:3:7"},"nodeType":"YulFunctionCall","src":"2973:16:7"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2967:2:7","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3005:2:7"},{"kind":"number","nodeType":"YulLiteral","src":"3009:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2998:6:7"},"nodeType":"YulFunctionCall","src":"2998:13:7"},"nodeType":"YulExpressionStatement","src":"2998:13:7"},{"nodeType":"YulAssignment","src":"3020:9:7","value":{"name":"_1","nodeType":"YulIdentifier","src":"3027:2:7"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3020:3:7"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"2736:3:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2741:6:7","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2752:3:7","type":""}],"src":"2623:412:7"},{"body":{"nodeType":"YulBlock","src":"3072:152:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3089:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3092:77:7","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3082:6:7"},"nodeType":"YulFunctionCall","src":"3082:88:7"},"nodeType":"YulExpressionStatement","src":"3082:88:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3186:1:7","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3189:4:7","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3179:6:7"},"nodeType":"YulFunctionCall","src":"3179:15:7"},"nodeType":"YulExpressionStatement","src":"3179:15:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3210:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3213:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3203:6:7"},"nodeType":"YulFunctionCall","src":"3203:15:7"},"nodeType":"YulExpressionStatement","src":"3203:15:7"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"3040:184:7"},{"body":{"nodeType":"YulBlock","src":"3277:77:7","statements":[{"nodeType":"YulAssignment","src":"3287:16:7","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3298:1:7"},{"name":"y","nodeType":"YulIdentifier","src":"3301:1:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3294:3:7"},"nodeType":"YulFunctionCall","src":"3294:9:7"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"3287:3:7"}]},{"body":{"nodeType":"YulBlock","src":"3326:22:7","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3328:16:7"},"nodeType":"YulFunctionCall","src":"3328:18:7"},"nodeType":"YulExpressionStatement","src":"3328:18:7"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3318:1:7"},{"name":"sum","nodeType":"YulIdentifier","src":"3321:3:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3315:2:7"},"nodeType":"YulFunctionCall","src":"3315:10:7"},"nodeType":"YulIf","src":"3312:36:7"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3260:1:7","type":""},{"name":"y","nodeType":"YulTypedName","src":"3263:1:7","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"3269:3:7","type":""}],"src":"3229:125:7"},{"body":{"nodeType":"YulBlock","src":"3506:124:7","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3529:3:7"},{"name":"value0","nodeType":"YulIdentifier","src":"3534:6:7"},{"name":"value1","nodeType":"YulIdentifier","src":"3542:6:7"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3516:12:7"},"nodeType":"YulFunctionCall","src":"3516:33:7"},"nodeType":"YulExpressionStatement","src":"3516:33:7"},{"nodeType":"YulVariableDeclaration","src":"3558:26:7","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3572:3:7"},{"name":"value1","nodeType":"YulIdentifier","src":"3577:6:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3568:3:7"},"nodeType":"YulFunctionCall","src":"3568:16:7"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3562:2:7","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3600:2:7"},{"kind":"number","nodeType":"YulLiteral","src":"3604:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3593:6:7"},"nodeType":"YulFunctionCall","src":"3593:13:7"},"nodeType":"YulExpressionStatement","src":"3593:13:7"},{"nodeType":"YulAssignment","src":"3615:9:7","value":{"name":"_1","nodeType":"YulIdentifier","src":"3622:2:7"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3615:3:7"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3474:3:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3479:6:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3487:6:7","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3498:3:7","type":""}],"src":"3359:271:7"},{"body":{"nodeType":"YulBlock","src":"3716:103:7","statements":[{"body":{"nodeType":"YulBlock","src":"3762:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3771:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3774:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3764:6:7"},"nodeType":"YulFunctionCall","src":"3764:12:7"},"nodeType":"YulExpressionStatement","src":"3764:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3737:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"3746:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3733:3:7"},"nodeType":"YulFunctionCall","src":"3733:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"3758:2:7","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3729:3:7"},"nodeType":"YulFunctionCall","src":"3729:32:7"},"nodeType":"YulIf","src":"3726:52:7"},{"nodeType":"YulAssignment","src":"3787:26:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3803:9:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3797:5:7"},"nodeType":"YulFunctionCall","src":"3797:16:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3787:6:7"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3682:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3693:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3705:6:7","type":""}],"src":"3635:184:7"},{"body":{"nodeType":"YulBlock","src":"3856:152:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3873:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3876:77:7","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3866:6:7"},"nodeType":"YulFunctionCall","src":"3866:88:7"},"nodeType":"YulExpressionStatement","src":"3866:88:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3970:1:7","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3973:4:7","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3963:6:7"},"nodeType":"YulFunctionCall","src":"3963:15:7"},"nodeType":"YulExpressionStatement","src":"3963:15:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3994:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3997:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3987:6:7"},"nodeType":"YulFunctionCall","src":"3987:15:7"},"nodeType":"YulExpressionStatement","src":"3987:15:7"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"3824:184:7"},{"body":{"nodeType":"YulBlock","src":"4059:228:7","statements":[{"body":{"nodeType":"YulBlock","src":"4090:168:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4111:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4114:77:7","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4104:6:7"},"nodeType":"YulFunctionCall","src":"4104:88:7"},"nodeType":"YulExpressionStatement","src":"4104:88:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4212:1:7","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4215:4:7","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4205:6:7"},"nodeType":"YulFunctionCall","src":"4205:15:7"},"nodeType":"YulExpressionStatement","src":"4205:15:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4240:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4243:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4233:6:7"},"nodeType":"YulFunctionCall","src":"4233:15:7"},"nodeType":"YulExpressionStatement","src":"4233:15:7"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"4079:1:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4072:6:7"},"nodeType":"YulFunctionCall","src":"4072:9:7"},"nodeType":"YulIf","src":"4069:189:7"},{"nodeType":"YulAssignment","src":"4267:14:7","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4276:1:7"},{"name":"y","nodeType":"YulIdentifier","src":"4279:1:7"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4272:3:7"},"nodeType":"YulFunctionCall","src":"4272:9:7"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"4267:1:7"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4044:1:7","type":""},{"name":"y","nodeType":"YulTypedName","src":"4047:1:7","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"4053:1:7","type":""}],"src":"4013:274:7"},{"body":{"nodeType":"YulBlock","src":"4344:116:7","statements":[{"nodeType":"YulAssignment","src":"4354:20:7","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4369:1:7"},{"name":"y","nodeType":"YulIdentifier","src":"4372:1:7"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4365:3:7"},"nodeType":"YulFunctionCall","src":"4365:9:7"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"4354:7:7"}]},{"body":{"nodeType":"YulBlock","src":"4432:22:7","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4434:16:7"},"nodeType":"YulFunctionCall","src":"4434:18:7"},"nodeType":"YulExpressionStatement","src":"4434:18:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4403:1:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4396:6:7"},"nodeType":"YulFunctionCall","src":"4396:9:7"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"4410:1:7"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"4417:7:7"},{"name":"x","nodeType":"YulIdentifier","src":"4426:1:7"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4413:3:7"},"nodeType":"YulFunctionCall","src":"4413:15:7"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4407:2:7"},"nodeType":"YulFunctionCall","src":"4407:22:7"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4393:2:7"},"nodeType":"YulFunctionCall","src":"4393:37:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4386:6:7"},"nodeType":"YulFunctionCall","src":"4386:45:7"},"nodeType":"YulIf","src":"4383:71:7"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4323:1:7","type":""},{"name":"y","nodeType":"YulTypedName","src":"4326:1:7","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"4332:7:7","type":""}],"src":"4292:168:7"}]},"contents":"{\n { }\n function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_array_uint256_calldata(offset, end) -> arrayPos\n {\n arrayPos := offset\n if gt(add(offset, 64), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_bytes_calldata_ptrt_bytes1t_bytes_calldata_ptrt_bytes32t_uint256t_array$_t_uint256_$2_calldata_ptrt_array$_t_uint256_$2_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8\n {\n if slt(sub(dataEnd, headStart), 288) { revert(0, 0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n let value := calldataload(add(headStart, 32))\n if iszero(eq(value, and(value, 0xff00000000000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value2 := value\n let offset_1 := calldataload(add(headStart, 64))\n if gt(offset_1, _1) { revert(0, 0) }\n let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n value3 := value3_1\n value4 := value4_1\n value5 := calldataload(add(headStart, 96))\n value6 := calldataload(add(headStart, 128))\n value7 := abi_decode_array_uint256_calldata(add(headStart, 160), dataEnd)\n value8 := abi_decode_array_uint256_calldata(add(headStart, 224), dataEnd)\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_library_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n mstore(pos, value0)\n end := add(pos, 32)\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n let i := 0\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n }\n let _1 := add(pos, length)\n mstore(_1, 0)\n end := _1\n }\n function panic_error_0x11()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n calldatacopy(pos, value0, value1)\n let _1 := add(pos, value1)\n mstore(_1, 0)\n end := _1\n }\n function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function panic_error_0x12()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n}","id":7,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80630d5efec91461003a575b600080fd5b61004d61004836600461179d565b610061565b604051901515815260200160405180910390f35b60006100748a8a8a8a8a8a8a8a8a610082565b9a9950505050505050505050565b6000806100958b8b8b8b8b8b8b8b6100b4565b905060006100a4828686610357565b9c9b505050505050505050505050565b60007fff000000000000000000000000000000000000000000000000000000000000008716878a8a60208181106100ed576100ed61187c565b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610151576040517ffc93479200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061017d8560405160200161016991815260200190565b6040516020818303038152906040526104b9565b90506000815167ffffffffffffffff81111561019b5761019b6118ab565b6040519080825280601f01601f1916602001820160405280156101c5576020820181803683370190505b50905080518589016020830137600081516020830120905080836040516020016101ef91906118da565b604051602081830303815290604052805190602001201461023c576040517febab5d2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000915061024e9050896020611938565b67ffffffffffffffff811115610266576102666118ab565b6040519080825280601f01601f191660200182016040528015610290576020820181803683370190505b509050888a60208301376000600288886040516102ae92919061194b565b602060405180830381855afa1580156102cb573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906102ee919061195b565b90508060208b0183015260028260405161030891906118da565b602060405180830381855afa158015610325573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610348919061195b565b9b9a5050505050505050505050565b60008235602084013581158061038d57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b80610396575080155b806103c157507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518110155b156103d1576000925050506104b2565b833560208501356103e28282610628565b6103f35760009450505050506104b2565b60006103fe846107a1565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828b09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518388099050600061045e86868585610825565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255103820815985050505050505050505b9392505050565b606081516000036104d857505060408051602081019091526000815290565b60006040518060600160405280604081526020016119c760409139905060006003845160026105079190611938565b6105119190611974565b61051c9060046119af565b67ffffffffffffffff811115610534576105346118ab565b6040519080825280601f01601f19166020018201604052801561055e576020820181803683370190505b509050600182016020820185865187015b808210156105ca576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f811685015184535060018301925061056f565b50506003865106600181146105e657600281146105f1576105f8565b6002820391506105f8565b6001820391505b508290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018252509392505050565b600082158061065657507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83145b8061065f575081155b8061068957507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82145b156106965750600061079b565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8208919091149150505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61081e57600080fd5b5192915050565b600080808060ff81808815801561083a575087155b1561084e57600096505050505050506112e6565b61089a7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d6112ee565b8092508193505050600189841c16600189851c1660011b015b806108d55760018403935060018a851c1660018a861c1660011b0190506108b3565b50600189841c16600189851c1660011b01955060018603610937577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603610946578a96508993505b60038603610955578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff111561123c577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080610c4057877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050611231565b60018103610c8f577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610c9e578e93508d92505b60038103610cad578593508492505b89610cc657509198506001975087965094506112319050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d88090893508061102a578361102a577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b82099a50507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050611231565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250610964565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6112b757600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b600080808086611305578585935093505050611343565b84611317578787935093505050611343565b61132688886001808a8a61134c565b929a509098509250905061133c88888484611611565b9350935050505b94509492505050565b6000806000808860000361136b57508492508391506001905080611604565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061161f846116c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61081e57600080fd5b60008083601f84011261175557600080fd5b50813567ffffffffffffffff81111561176d57600080fd5b60208301915083602082850101111561178557600080fd5b9250929050565b806040810183101561079b57600080fd5b60008060008060008060008060006101208a8c0312156117bc57600080fd5b893567ffffffffffffffff808211156117d457600080fd5b6117e08d838e01611743565b909b50995060208c013591507fff000000000000000000000000000000000000000000000000000000000000008216821461181a57600080fd5b90975060408b0135908082111561183057600080fd5b5061183d8c828d01611743565b90975095505060608a0135935060808a0135925061185e8b60a08c0161178c565b915061186d8b60e08c0161178c565b90509295985092959850929598565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000825160005b818110156118fb57602081860181015185830152016118e1565b506000920191825250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561079b5761079b611909565b8183823760009101908152919050565b60006020828403121561196d57600080fd5b5051919050565b6000826119aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761079b5761079b61190956fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa2646970667358221220a5a42b5a5048bdf6322d6fa3052df01e1a197bbb61722775e8f972389e441d9964736f6c63430008140033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xD5EFEC9 EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4D PUSH2 0x48 CALLDATASIZE PUSH1 0x4 PUSH2 0x179D JUMP JUMPDEST PUSH2 0x61 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH2 0x74 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x82 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x95 DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 PUSH2 0xB4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA4 DUP3 DUP7 DUP7 PUSH2 0x357 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 DUP8 AND DUP8 DUP11 DUP11 PUSH1 0x20 DUP2 DUP2 LT PUSH2 0xED JUMPI PUSH2 0xED PUSH2 0x187C JUMP JUMPDEST SWAP1 POP ADD CALLDATALOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL AND PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x151 JUMPI PUSH1 0x40 MLOAD PUSH32 0xFC93479200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17D DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x169 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x4B9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x19B JUMPI PUSH2 0x19B PUSH2 0x18AB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1C5 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP1 MLOAD DUP6 DUP10 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 DUP4 ADD KECCAK256 SWAP1 POP DUP1 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1EF SWAP2 SWAP1 PUSH2 0x18DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x23C JUMPI PUSH1 0x40 MLOAD PUSH32 0xEBAB5D2900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP2 POP PUSH2 0x24E SWAP1 POP DUP10 PUSH1 0x20 PUSH2 0x1938 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x266 JUMPI PUSH2 0x266 PUSH2 0x18AB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x290 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP11 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x2 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x2AE SWAP3 SWAP2 SWAP1 PUSH2 0x194B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2EE SWAP2 SWAP1 PUSH2 0x195B JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP12 ADD DUP4 ADD MSTORE PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x18DA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x325 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x348 SWAP2 SWAP1 PUSH2 0x195B JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH1 0x20 DUP5 ADD CALLDATALOAD DUP2 ISZERO DUP1 PUSH2 0x38D JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 LT ISZERO JUMPDEST DUP1 PUSH2 0x396 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x3C1 JUMPI POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP2 LT ISZERO JUMPDEST ISZERO PUSH2 0x3D1 JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x4B2 JUMP JUMPDEST DUP4 CALLDATALOAD PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3E2 DUP3 DUP3 PUSH2 0x628 JUMP JUMPDEST PUSH2 0x3F3 JUMPI PUSH1 0x0 SWAP5 POP POP POP POP POP PUSH2 0x4B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FE DUP5 PUSH2 0x7A1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP3 DUP12 MULMOD SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP4 DUP9 MULMOD SWAP1 POP PUSH1 0x0 PUSH2 0x45E DUP7 DUP7 DUP6 DUP6 PUSH2 0x825 JUMP JUMPDEST SWAP1 POP PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 DUP9 PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 SUB DUP3 ADDMOD ISZERO SWAP9 POP POP POP POP POP POP POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD PUSH1 0x0 SUB PUSH2 0x4D8 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19C7 PUSH1 0x40 SWAP2 CODECOPY SWAP1 POP PUSH1 0x0 PUSH1 0x3 DUP5 MLOAD PUSH1 0x2 PUSH2 0x507 SWAP2 SWAP1 PUSH2 0x1938 JUMP JUMPDEST PUSH2 0x511 SWAP2 SWAP1 PUSH2 0x1974 JUMP JUMPDEST PUSH2 0x51C SWAP1 PUSH1 0x4 PUSH2 0x19AF JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x534 JUMPI PUSH2 0x534 PUSH2 0x18AB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x55E JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x1 DUP3 ADD PUSH1 0x20 DUP3 ADD DUP6 DUP7 MLOAD DUP8 ADD JUMPDEST DUP1 DUP3 LT ISZERO PUSH2 0x5CA JUMPI PUSH1 0x3 DUP3 ADD SWAP2 POP DUP2 MLOAD PUSH1 0x3F DUP2 PUSH1 0x12 SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 PUSH1 0xC SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 PUSH1 0x6 SHR AND DUP6 ADD MLOAD DUP5 MSTORE8 PUSH1 0x1 DUP5 ADD SWAP4 POP PUSH1 0x3F DUP2 AND DUP6 ADD MLOAD DUP5 MSTORE8 POP PUSH1 0x1 DUP4 ADD SWAP3 POP PUSH2 0x56F JUMP JUMPDEST POP POP PUSH1 0x3 DUP7 MLOAD MOD PUSH1 0x1 DUP2 EQ PUSH2 0x5E6 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x5F1 JUMPI PUSH2 0x5F8 JUMP JUMPDEST PUSH1 0x2 DUP3 SUB SWAP2 POP PUSH2 0x5F8 JUMP JUMPDEST PUSH1 0x1 DUP3 SUB SWAP2 POP JUMPDEST POP DUP3 SWAP1 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD DUP3 MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x656 JUMPI POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 EQ JUMPDEST DUP1 PUSH2 0x65F JUMPI POP DUP2 ISZERO JUMPDEST DUP1 PUSH2 0x689 JUMPI POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ JUMPDEST ISZERO PUSH2 0x696 JUMPI POP PUSH1 0x0 PUSH2 0x79B JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD SWAP1 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC DUP8 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP11 MULMOD MULMOD ADDMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B DUP3 ADDMOD SWAP2 SWAP1 SWAP2 EQ SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x81E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH1 0xFF DUP2 DUP1 DUP9 ISZERO DUP1 ISZERO PUSH2 0x83A JUMPI POP DUP8 ISZERO JUMPDEST ISZERO PUSH2 0x84E JUMPI PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x12E6 JUMP JUMPDEST PUSH2 0x89A PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 DUP14 DUP14 PUSH2 0x12EE JUMP JUMPDEST DUP1 SWAP3 POP DUP2 SWAP4 POP POP POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD JUMPDEST DUP1 PUSH2 0x8D5 JUMPI PUSH1 0x1 DUP5 SUB SWAP4 POP PUSH1 0x1 DUP11 DUP6 SHR AND PUSH1 0x1 DUP11 DUP7 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP PUSH2 0x8B3 JUMP JUMPDEST POP PUSH1 0x1 DUP10 DUP5 SHR AND PUSH1 0x1 DUP10 DUP6 SHR AND PUSH1 0x1 SHL ADD SWAP6 POP PUSH1 0x1 DUP7 SUB PUSH2 0x937 JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP7 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP4 POP JUMPDEST PUSH1 0x2 DUP7 SUB PUSH2 0x946 JUMPI DUP11 SWAP7 POP DUP10 SWAP4 POP JUMPDEST PUSH1 0x3 DUP7 SUB PUSH2 0x955 JUMPI DUP2 SWAP7 POP DUP1 SWAP4 POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH1 0x1 SWAP6 POP PUSH1 0x1 SWAP5 POP JUMPDEST DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF GT ISZERO PUSH2 0x123C JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH1 0x2 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP11 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP5 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP15 ADDMOD MULMOD PUSH1 0x3 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP6 MULMOD SWAP9 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP5 MULMOD SWAP10 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP5 MULMOD ADDMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD DUP3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP8 MULMOD ADDMOD SWAP8 POP PUSH1 0x1 DUP14 DUP9 SHR AND PUSH1 0x1 DUP14 DUP10 SHR AND PUSH1 0x1 SHL ADD SWAP1 POP DUP1 PUSH2 0xC40 JUMPI DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB SWAP8 POP POP POP POP POP PUSH2 0x1231 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0xC8F JUMPI PUSH32 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 SWAP4 POP PUSH32 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 SWAP3 POP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0xC9E JUMPI DUP15 SWAP4 POP DUP14 SWAP3 POP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0xCAD JUMPI DUP6 SWAP4 POP DUP5 SWAP3 POP JUMPDEST DUP10 PUSH2 0xCC6 JUMPI POP SWAP2 SWAP9 POP PUSH1 0x1 SWAP8 POP DUP8 SWAP7 POP SWAP5 POP PUSH2 0x1231 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP7 MULMOD ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP13 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP9 MULMOD ADDMOD SWAP4 POP DUP1 PUSH2 0x102A JUMPI DUP4 PUSH2 0x102A JUMPI PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP7 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP14 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP7 MULMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP14 ADDMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP4 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH1 0x3 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP3 MULMOD SWAP11 POP POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP6 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD ADDMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP6 ADDMOD DUP4 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 DUP8 MULMOD DUP6 ADDMOD SWAP9 POP POP POP POP POP POP PUSH2 0x1231 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP6 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP4 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP14 MULMOD SWAP12 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP13 MULMOD SWAP11 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP15 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP9 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 DUP14 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP7 ADDMOD MULMOD ADDMOD SWAP11 POP POP POP POP DUP1 SWAP11 POP POP POP POP POP JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP PUSH2 0x964 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x12B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD DUP10 MULMOD SWAP8 POP POP POP POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP7 PUSH2 0x1305 JUMPI DUP6 DUP6 SWAP4 POP SWAP4 POP POP POP PUSH2 0x1343 JUMP JUMPDEST DUP5 PUSH2 0x1317 JUMPI DUP8 DUP8 SWAP4 POP SWAP4 POP POP POP PUSH2 0x1343 JUMP JUMPDEST PUSH2 0x1326 DUP9 DUP9 PUSH1 0x1 DUP1 DUP11 DUP11 PUSH2 0x134C JUMP JUMPDEST SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP3 POP SWAP1 POP PUSH2 0x133C DUP9 DUP9 DUP5 DUP5 PUSH2 0x1611 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 PUSH1 0x0 SUB PUSH2 0x136B JUMPI POP DUP5 SWAP3 POP DUP4 SWAP2 POP PUSH1 0x1 SWAP1 POP DUP1 PUSH2 0x1604 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 SUB SWAP9 DUP10 DUP2 DUP10 DUP9 MULMOD ADDMOD SWAP5 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP10 MULMOD ADDMOD SWAP6 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP8 MULMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP6 MULMOD SWAP3 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP10 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP9 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP12 MULMOD SWAP8 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP11 MULMOD ADDMOD ADDMOD SWAP4 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 DUP12 MULMOD PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP9 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF SUB DUP14 ADDMOD MULMOD ADDMOD SWAP3 POP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x161F DUP5 PUSH2 0x16C6 JUMP JUMPDEST SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP8 MULMOD SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP8 MULMOD SWAP1 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP3 MULMOD SWAP2 POP PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP10 MULMOD SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0xC0 DUP4 PUSH1 0x5 PUSH1 0x0 NOT STATICCALL PUSH2 0x81E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1755 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x40 DUP2 ADD DUP4 LT ISZERO PUSH2 0x79B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x17BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x17D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17E0 DUP14 DUP4 DUP15 ADD PUSH2 0x1743 JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x20 DUP13 ADD CALLDATALOAD SWAP2 POP PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 EQ PUSH2 0x181A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP8 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1830 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x183D DUP13 DUP3 DUP14 ADD PUSH2 0x1743 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP POP PUSH1 0x60 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH2 0x185E DUP12 PUSH1 0xA0 DUP13 ADD PUSH2 0x178C JUMP JUMPDEST SWAP2 POP PUSH2 0x186D DUP12 PUSH1 0xE0 DUP13 ADD PUSH2 0x178C JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x18FB JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x18E1 JUMP JUMPDEST POP PUSH1 0x0 SWAP3 ADD SWAP2 DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x79B JUMPI PUSH2 0x79B PUSH2 0x1909 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x196D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x19AA JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x79B JUMPI PUSH2 0x79B PUSH2 0x1909 JUMP INVALID COINBASE TIMESTAMP NUMBER PREVRANDAO GASLIMIT CHAINID SELFBALANCE BASEFEE 0x49 0x4A 0x4B 0x4C 0x4D 0x4E 0x4F POP MLOAD MSTORE MSTORE8 SLOAD SSTORE JUMP JUMPI PC MSIZE GAS PUSH2 0x6263 PUSH5 0x6566676869 PUSH11 0x6B6C6D6E6F707172737475 PUSH23 0x7778797A303132333435363738392D5FA2646970667358 0x22 SLT KECCAK256 0xA5 LOG4 0x2B GAS POP BASEFEE 0xBD 0xF6 ORIGIN 0x2D PUSH16 0xA3052DF01E1A197BBB61722775E8F972 CODESIZE SWAP15 PREVRANDAO SAR SWAP10 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"559:606:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;592:571;;;;;;:::i;:::-;;:::i;:::-;;;2031:14:7;;2024:22;2006:41;;1994:2;1979:18;592:571:3;;;;;;;;903:4;926:230;967:17;;998:25;1037:10;;1061:15;1090:25;1129:2;1145:1;926:27;:230::i;:::-;919:237;592:571;-1:-1:-1;;;;;;;;;;592:571:3:o;3570:696:0:-;3883:4;3992:15;4010:156;4052:17;;4071:25;4098:10;;4110:15;4127:25;4154:2;4010:28;:156::i;:::-;3992:174;;4177:11;4191:44;4220:7;4229:2;4233:1;4191:28;:44::i;:::-;4177:58;3570:696;-1:-1:-1;;;;;;;;;;;;3570:696:0:o;1483:2081::-;1767:14;1903:80;;;1958:25;1904:17;;1922:2;1904:21;;;;;;;:::i;:::-;;;;;;;;;:49;1903:80;;;;1899:152;;2010:26;;;;;;;;;;;;;;1899:152;2248:30;2281:51;2315:15;2298:33;;;;;;2376:19:7;;2420:2;2411:12;;2247:182;2298:33:0;;;;;;;;;;;;;2281:16;:51::i;:::-;2248:84;;2346:31;2409:16;2403:30;2380:63;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2380:63:0;;2346:97;;2645:18;2639:25;2591;2572:17;2568:49;2543:2;2523:18;2519:27;2485:197;2710:16;2876:18;2870:25;2865:2;2845:18;2841:27;2831:65;2819:77;;2984:8;2961:16;2938:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;2928:52;;;;;;:64;2924:129;;3019:19;;;;;;;;;;;;;;2924:129;-1:-1:-1;3177:23:0;;-1:-1:-1;3213:29:0;;-1:-1:-1;3213:17:0;3240:2;3213:29;:::i;:::-;3203:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3203:40:0;;3177:66;;3337:24;3311;3306:2;3294:10;3290:19;3277:85;3382:12;3397:18;3404:10;;3397:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3382:33;;3507:4;3501:2;3475:24;3471:33;3459:10;3455:50;3448:64;3539:18;3546:10;3539:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3532:25;1483:2081;-1:-1:-1;;;;;;;;;;;1483:2081:0:o;39212:748:1:-;39321:4;39349:5;;;39376;;;39395:6;;;:16;;;2154:66;39405:1;:6;;39395:16;:26;;;-1:-1:-1;39415:6:1;;39395:26;:36;;;;2154:66;39425:1;:6;;39395:36;39391:79;;;39454:5;39447:12;;;;;;39391:79;39492:4;;;39519;;;39538:23;39492:4;39519;39538:15;:23::i;:::-;39533:67;;39584:5;39577:12;;;;;;;;39533:67;39610:12;39625:14;39637:1;39625:11;:14::i;:::-;39610:29;-1:-1:-1;39650:16:1;2154:66;39694:4;39684:7;39669:33;39650:52;-1:-1:-1;39712:16:1;2154:66;39741:4;39738:1;39731:18;39712:37;;39759:10;39785:48;39806:2;39810;39814:8;39824;39785:20;:48::i;:::-;39780:53;;39895:1;39891;39888;39884:9;39880:2;39873:24;39946:7;;-1:-1:-1;;;;;;;;;39212:748:1;;;;;;:::o;376:1914:2:-;434:13;463:4;:11;478:1;463:16;459:31;;-1:-1:-1;;481:9:2;;;;;;;;;-1:-1:-1;481:9:2;;;376:1914::o;459:31::-;539:19;561:14;;;;;;;;;;;;;;;;;539:36;;586:20;645:1;626:4;:11;640:1;626:15;;;;:::i;:::-;625:21;;;;:::i;:::-;620:27;;:1;:27;:::i;:::-;609:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;609:39:2;;586:62;;751:1;744:5;740:13;795:2;787:6;783:15;849:4;900;894:11;888:4;884:22;812:940;933:6;924:7;921:19;812:940;;;1000:1;991:7;987:15;976:26;;1038:7;1032:14;1164:4;1156:5;1152:2;1148:14;1144:25;1134:8;1130:40;1124:47;1093:9;1064:125;1234:1;1223:9;1219:17;1206:30;;1354:4;1346:5;1342:2;1338:14;1334:25;1324:8;1320:40;1314:47;1283:9;1254:125;1424:1;1413:9;1409:17;1396:30;;1543:4;1535:5;1532:1;1528:13;1524:24;1514:8;1510:39;1504:46;1473:9;1444:124;1613:1;1602:9;1598:17;1585:30;;1683:4;1676:5;1672:16;1662:8;1658:31;1652:38;1641:9;1633:58;;1736:1;1725:9;1721:17;1708:30;;812:940;;;816:104;;1841:1;1834:4;1828:11;1824:19;1861:1;1856:121;;;;1995:1;1990:126;;;;1817:299;;1856:121;1961:1;1950:9;1946:17;1933:30;;1856:121;;1990:126;2100:1;2089:9;2085:17;2072:30;;1817:299;-1:-1:-1;2216:31:2;;;;;2201:47;;-1:-1:-1;2216:31:2;2235:6;-1:-1:-1;;;376:1914:2:o;12674:432:1:-;12744:4;12764:6;;;:16;;;1523:66;12774:1;:6;12764:16;:26;;;-1:-1:-1;12784:6:1;;12764:26;:36;;;;1523:66;12794:1;:6;12764:36;12760:79;;;-1:-1:-1;12823:5:1;12816:12;;12760:79;12872:11;1523:66;12896:1;12893;12886:15;12872:29;-1:-1:-1;12922:11:1;1523:66;;1658;12981:1;12974:15;1523:66;12967:1;1523:66;12960:1;12957;12950:15;12943:29;12936:57;12922:71;-1:-1:-1;1523:66:1;1794;13030:3;13023:17;13079:10;;;;;-1:-1:-1;;12674:432:1;;;;;:::o;3146:734::-;3201:14;3271:4;3265:11;3382:4;3373:7;3366:21;3427:4;3420;3411:7;3407:18;3400:32;3472:4;3465;3456:7;3452:18;3445:32;3576:1;3569:4;3560:7;3556:18;3549:29;3618:11;3611:4;3602:7;3598:18;3591:39;3670:1;3663:4;3654:7;3650:18;3643:29;3804:4;3795:7;3789:4;3780:7;3774:4;3770:1;3766:6;3755:54;3745:82;;3823:1;3820;3813:12;3745:82;3850:14;;3146:734;-1:-1:-1;;3146:734:1:o;13739:6506::-;13921:9;;;;14018:3;13921:9;;14100:13;;:30;;;;-1:-1:-1;14117:13:1;;14100:30;14096:44;;;14139:1;14132:8;;;;;;;;;;14096:44;14166:25;1930:66;2024;14184:2;14188;14166:9;:25::i;:::-;14155:36;;;;;;;;14371:1;14360:8;14353:5;14349:20;14345:28;14340:1;14329:8;14322:5;14318:20;14314:28;14311:1;14307:36;14303:71;14287:263;14380:2;14287:263;;14429:1;14422:5;14418:13;14409:22;;14526:1;14515:8;14508:5;14504:20;14500:28;14495:1;14484:8;14477:5;14473:20;14469:28;14466:1;14462:36;14458:71;14452:77;;14287:263;;;14291:85;14641:1;14630:8;14623:5;14619:20;14615:28;14610:1;14599:8;14592:5;14588:20;14584:28;14581:1;14577:36;14573:71;14567:77;;14672:1;14668:2;14665:9;14662:88;;14702:2;14697:7;;14730:2;14725:7;;14662:88;14777:1;14773:2;14770:9;14767:88;;14807:2;14802:7;;14835:2;14830:7;;14767:88;14882:1;14878:2;14875:9;14872:88;;14912:2;14907:7;;14940:2;14935:7;;14872:88;14998:1;14991:5;14987:13;14978:22;;15023:1;15017:7;;15048:1;15041:8;;15067:4114;15086:5;15077:7;15074:18;15067:4114;;;15205:1;15202;15199;15192:15;15272:1;15268:2;15264;15257:17;15328:1;15324:2;15321:1;15314:16;15384:1;15380:2;15376;15369:17;15363:23;;15490:1;15486;15482;15478:2;15475:1;15468:16;15464:1;15459:2;15456:1;15452:10;15449:1;15442:24;15435:53;15432:1;15425:67;15560:1;15555:3;15551:2;15544:18;15537:25;;15618:1;15614:2;15610;15603:17;15597:23;;15717:1;15713;15709:2;15700:7;15693:22;15689:1;15685:2;15681;15674:17;15667:52;15662:57;;15795:1;15791;15786:2;15783:1;15779:10;15776:1;15769:24;15765:2;15758:39;15752:45;;15871:1;15867:2;15863:1;15860;15856:2;15849:16;15842:31;15837:36;;16100:1;16089:8;16082:5;16078:20;16074:28;16069:1;16058:8;16051:5;16047:20;16043:28;16040:1;16036:36;16032:71;16026:77;;16139:2;16129:148;;16185:1;16182;16178:9;16173:14;;16243:8;;;;;;16129:148;16325:1;16321:2;16318:9;16315:114;;16364:2;16358:8;;16401:2;16395:8;;16315:114;16464:1;16460:2;16457:9;16454:114;;16503:2;16497:8;;16540:2;16534:8;;16454:114;16603:1;16599:2;16596:9;16593:114;;16642:2;16636:8;;16679:2;16673:8;;16593:114;16742:2;16732:223;;-1:-1:-1;16781:2:1;;-1:-1:-1;16854:1:1;;-1:-1:-1;16854:1:1;;-1:-1:-1;16817:2:1;-1:-1:-1;16921:8:1;;-1:-1:-1;16921:8:1;16732:223;17138:1;17135;17131;17126:3;17122:2;17115:18;17108:32;17212:1;17208;17205;17201:9;17197:1;17193:2;17189;17182:17;17175:39;17169:45;;17439:2;17429:1132;;17483:2;17473:1062;;17546:1;17543;17534:7;17527:21;17521:27;;17621:1;17617:2;17613;17606:17;17600:23;;17685:1;17681:2;17678:1;17671:16;17665:22;;17754:1;17750:2;17746;17739:17;17733:23;;17817:1;17813:2;17810:1;17803:16;17797:22;;17893:1;17888:2;17885:1;17881:10;17878:1;17871:24;17957:1;17952:3;17948:2;17941:18;17935:24;;18027:1;18023:2;18020:1;18013:16;18007:22;;18091:1;18086:3;18081;18074:19;18067:26;;;18161:1;18157:2;18153;18146:17;18140:23;;18272:1;18268;18264:2;18255:7;18248:22;18244:1;18240:2;18236;18229:17;18222:52;18217:57;;18362:1;18358;18354;18351;18347:9;18343:2;18336:24;18332:2;18325:39;18319:45;;18442:1;18438;18435;18431:2;18424:16;18420:2;18413:31;18408:36;;18497:8;;;;;;;17473:1062;18608:1;18604:2;18600;18593:17;18587:23;;18666:1;18662:2;18658;18651:17;18782:1;18778:2;18774;18767:17;18761:23;;18833:1;18828:3;18823;18816:19;18809:26;;18897:1;18893:2;18890:1;18883:16;19005:1;19001;18996:3;18987:7;18980:23;18976:1;18970:3;18967:1;18963:11;18959:1;18955:2;18951;18944:17;18937:41;18930:77;18924:83;;19106:1;19102;19097:3;19094:1;19087:17;19083:1;19079:2;19075:1;19070:2;19067:1;19063:10;19058:3;19051:26;19044:41;19037:71;19032:76;;;;;19139:2;19134:7;;15959:3204;;;;15067:4114;15115:1;15108:5;15104:13;15095:22;;15067:4114;;;19224:4;19218:11;19267:2;19260:4;19257:1;19253:12;19246:24;19532:4;19529:1;19522:15;19575:4;19568;19565:1;19561:12;19554:26;19618:4;19611;19608:1;19604:12;19597:26;19772:7;19765:4;19762:1;19758:12;19751:29;19818:1;19811:4;19808:1;19804:12;19797:23;19948:4;19945:1;19939:4;19936:1;19930:4;19926:1;19922:6;19911:42;19901:70;;19967:1;19964;19957:12;19901:70;20156:1;20152;20146:8;20143:1;20136:22;20131:27;;;20230:8;;;;;;13739:6506;;;;;;;:::o;13194:373::-;13284:7;;;;12525:6;13356:41;;13390:2;13394;13382:15;;;;;;;;13356:41;12525:6;13407:41;;13441:2;13445;13433:15;;;;;;;;13407:41;13481:31;13491:2;13495;13499:1;13502;13505:2;13509;13481:9;:31::i;:::-;13459:53;;-1:-1:-1;13459:53:1;;-1:-1:-1;13459:53:1;-1:-1:-1;13459:53:1;-1:-1:-1;13530:30:1;13459:53;;;;13530:11;:30::i;:::-;13523:37;;;;;;13194:373;;;;;;;;:::o;10549:1073::-;10690:10;10702;10714;10726;10780:2;10786:1;10780:7;10776:67;;-1:-1:-1;10815:2:1;;-1:-1:-1;10819:2:1;;-1:-1:-1;10823:1:1;;-1:-1:-1;10823:1:1;10807:21;;10776:67;10894:1;10890:10;;;;;10894:1;10941:4;10937:2;10930:19;10923:34;10917:40;;11019:1;11014:2;11011:1;11007:10;11003:1;10998:3;10994:2;10987:18;10980:41;10974:47;;11059:1;11055:2;11051;11044:17;11038:23;;11110:1;11106:2;11102;11095:17;11089:23;;11164:1;11160:2;11155:3;11148:18;11142:24;;11223:1;11219:2;11213:4;11206:19;11200:25;;11284:1;11280:2;11276;11269:17;11262:24;;11395:1;11391;11386:3;11377:7;11370:23;11366:1;11361:2;11358:1;11354:10;11350:1;11346:2;11342;11335:17;11328:40;11321:76;11315:82;;11503:1;11499;11495:2;11491;11484:17;11480:1;11476:2;11472:1;11467:2;11464:1;11460:10;11455:3;11448:26;11441:41;11434:71;11428:77;;10549:1073;;;;;;;;;;;;:::o;8944:351::-;9035:10;9047;9069:14;9086:16;9098:3;9086:11;:16::i;:::-;9069:33;-1:-1:-1;1523:66:1;9135:6;9132:1;9125:20;9120:25;-1:-1:-1;9163:10:1;1523:66;9187:6;9183:2;9176:21;9163:34;-1:-1:-1;1523:66:1;9233:2;9229;9222:17;9213:26;-1:-1:-1;1523:66:1;9271:6;9268:1;9261:20;9256:25;;9059:236;;8944:351;;;;;;;:::o;3992:730::-;4047:14;4117:4;4111:11;4228:4;4219:7;4212:21;4273:4;4266;4257:7;4253:18;4246:32;4318:4;4311;4302:7;4298:18;4291:32;4422:1;4415:4;4406:7;4402:18;4395:29;4464:7;4457:4;4448:7;4444:18;4437:35;4512:1;4505:4;4496:7;4492:18;4485:29;4646:4;4637:7;4631:4;4622:7;4616:4;4612:1;4608:6;4597:54;4587:82;;4665:1;4662;4655:12;14:347:7;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:7;;213:18;202:30;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;296:59;14:347;;;;;:::o;366:159::-;460:6;493:2;481:15;;478:24;-1:-1:-1;475:44:7;;;515:1;512;505:12;530:1323;714:6;722;730;738;746;754;762;770;778;831:3;819:9;810:7;806:23;802:33;799:53;;;848:1;845;838:12;799:53;888:9;875:23;917:18;958:2;950:6;947:14;944:34;;;974:1;971;964:12;944:34;1013:58;1063:7;1054:6;1043:9;1039:22;1013:58;:::i;:::-;1090:8;;-1:-1:-1;987:84:7;-1:-1:-1;1175:2:7;1160:18;;1147:32;;-1:-1:-1;1219:66:7;1208:78;;1198:89;;1188:117;;1301:1;1298;1291:12;1188:117;1324:5;;-1:-1:-1;1382:2:7;1367:18;;1354:32;;1398:16;;;1395:36;;;1427:1;1424;1417:12;1395:36;;1466:60;1518:7;1507:8;1496:9;1492:24;1466:60;:::i;:::-;1545:8;;-1:-1:-1;1440:86:7;-1:-1:-1;;1627:2:7;1612:18;;1599:32;;-1:-1:-1;1678:3:7;1663:19;;1650:33;;-1:-1:-1;1702:63:7;1757:7;1751:3;1736:19;;1702:63;:::i;:::-;1692:73;;1784:63;1839:7;1833:3;1822:9;1818:19;1784:63;:::i;:::-;1774:73;;530:1323;;;;;;;;;;;:::o;2058:184::-;2110:77;2107:1;2100:88;2207:4;2204:1;2197:15;2231:4;2228:1;2221:15;2434:184;2486:77;2483:1;2476:88;2583:4;2580:1;2573:15;2607:4;2604:1;2597:15;2623:412;2752:3;2790:6;2784:13;2815:1;2825:129;2839:6;2836:1;2833:13;2825:129;;;2937:4;2921:14;;;2917:25;;2911:32;2898:11;;;2891:53;2854:12;2825:129;;;-1:-1:-1;3009:1:7;2973:16;;2998:13;;;-1:-1:-1;2973:16:7;2623:412;-1:-1:-1;2623:412:7:o;3040:184::-;3092:77;3089:1;3082:88;3189:4;3186:1;3179:15;3213:4;3210:1;3203:15;3229:125;3294:9;;;3315:10;;;3312:36;;;3328:18;;:::i;3359:271::-;3542:6;3534;3529:3;3516:33;3498:3;3568:16;;3593:13;;;3568:16;3359:271;-1:-1:-1;3359:271:7:o;3635:184::-;3705:6;3758:2;3746:9;3737:7;3733:23;3729:32;3726:52;;;3774:1;3771;3764:12;3726:52;-1:-1:-1;3797:16:7;;3635:184;-1:-1:-1;3635:184:7:o;4013:274::-;4053:1;4079;4069:189;;4114:77;4111:1;4104:88;4215:4;4212:1;4205:15;4243:4;4240:1;4233:15;4069:189;-1:-1:-1;4272:9:7;;4013:274::o;4292:168::-;4365:9;;;4396;;4413:15;;;4407:22;;4393:37;4383:71;;4434:18;;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"1343200","executionCost":"1431","totalCost":"1344631"},"external":{"checkSignature(bytes,bytes1,bytes,bytes32,uint256,uint256[2],uint256[2])":"infinite"}},"methodIdentifiers":{"checkSignature(bytes,bytes1,bytes,bytes32,uint256,uint256[2],uint256[2])":"0d5efec9"}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidAuthenticatorData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidClientData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"authenticatorData\",\"type\":\"bytes\"},{\"internalType\":\"bytes1\",\"name\":\"authenticatorDataFlagMask\",\"type\":\"bytes1\"},{\"internalType\":\"bytes\",\"name\":\"clientData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"clientChallenge\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"clientChallengeDataOffset\",\"type\":\"uint256\"},{\"internalType\":\"uint256[2]\",\"name\":\"rs\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Q\",\"type\":\"uint256[2]\"}],\"name\":\"checkSignature\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This lib is only a wrapper around the FCL_WebAuthn library. It is meant to be used with 1271 signatures. The wrapping is necessary because the FCL_WebAuthn has only internal functions and use calldata. This makes it impossible to use it with isValidSignature that use memory.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"WrapperFCLWebAuthn\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A library used to verify ECDSA signatures over secp256r1 through EIP-1271 of Webauthn payloads.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FCL/WrapperFCLWebAuthn.sol\":\"WrapperFCLWebAuthn\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/FCL_Webauthn.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: Implementation of the WebAuthn Authentication mechanism\\n///* https://www.w3.org/TR/webauthn-2/#sctn-intro\\n///* Original code extracted from https://github.com/btchip/Webauthn.sol\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport {Base64Url} from \\\"./utils/Base64Url.sol\\\";\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\nlibrary FCL_WebAuthn {\\n error InvalidAuthenticatorData();\\n error InvalidClientData();\\n error InvalidSignature();\\n\\n function WebAuthn_format(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata // rs\\n ) internal pure returns (bytes32 result) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n {\\n if ((authenticatorData[32] & authenticatorDataFlagMask) != authenticatorDataFlagMask) {\\n revert InvalidAuthenticatorData();\\n }\\n // Verify that clientData commits to the expected client challenge\\n // Use the Base64Url encoding which omits padding characters to match WebAuthn Specification\\n string memory challengeEncoded = Base64Url.encode(abi.encodePacked(clientChallenge));\\n bytes memory challengeExtracted = new bytes(\\n bytes(challengeEncoded).length\\n );\\n\\n assembly {\\n calldatacopy(\\n add(challengeExtracted, 32),\\n add(clientData.offset, clientChallengeDataOffset),\\n mload(challengeExtracted)\\n )\\n }\\n\\n bytes32 moreData; //=keccak256(abi.encodePacked(challengeExtracted));\\n assembly {\\n moreData := keccak256(add(challengeExtracted, 32), mload(challengeExtracted))\\n }\\n\\n if (keccak256(abi.encodePacked(bytes(challengeEncoded))) != moreData) {\\n revert InvalidClientData();\\n }\\n } //avoid stack full\\n\\n // Verify the signature over sha256(authenticatorData || sha256(clientData))\\n bytes memory verifyData = new bytes(authenticatorData.length + 32);\\n\\n assembly {\\n calldatacopy(add(verifyData, 32), authenticatorData.offset, authenticatorData.length)\\n }\\n\\n bytes32 more = sha256(clientData);\\n assembly {\\n mstore(add(verifyData, add(authenticatorData.length, 32)), more)\\n }\\n\\n return sha256(verifyData);\\n }\\n\\n function checkSignature (\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256[2] calldata Q\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_verify(message, rs, Q);\\n\\n return result;\\n }\\n\\n function checkSignature_prec(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n address dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_verify(message, rs, dataPointer);\\n\\n return result;\\n }\\n\\n //beware that this implementation will not be compliant with EOF\\n function checkSignature_hackmem(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256 dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_hackmem(message, rs, dataPointer);\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x78658514b1f160f17b8408bddc3615b2bfaf83a50c874cdfba26ce90528214b4\",\"license\":\"MIT\"},\"FreshCryptoLib/FCL_elliptic.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: modified XYZZ system coordinates for EVM elliptic point multiplication\\n///* optimization\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nlibrary FCL_Elliptic_ZZ {\\n // Set parameters for curve sec256r1.\\n\\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\\n //curve prime field modulus\\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n //short weierstrass first coefficient\\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\\n //short weierstrass second coefficient\\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\\n //generating point affine coordinates\\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\\n //curve order (number of points)\\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\\n /* -2 mod n constant, used to speed up inversion*/\\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\\n\\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\\n //P+1 div 4\\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\\n //arbitrary constant to express no quadratic residuosity\\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n\\n /**\\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\\n */\\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2modn)\\n mstore(add(pointer, 0xa0), n)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n /**\\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\\n */\\n\\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2)\\n mstore(add(pointer, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n\\n //Coron projective shuffling, take as input alpha as blinding factor\\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) public pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n \\n uint256 alpha2=mulmod(alpha,alpha,p);\\n \\n x3=mulmod(alpha2, x,p); //alpha^-2.x\\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\\n\\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\\n \\n return (x3, y3, zz3, zzz3);\\n }\\n\\n\\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\\n u2=addmod(u2, p-u1, p);// P = U2-U1\\n x1=mulmod(u2, u2, p);//PP\\n x2=mulmod(x1, u2, p);//PPP\\n \\n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \\n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\\n\\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \\n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\\n\\n return (x3, y3, zz3, zzz3);\\n }\\n\\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\\n/// @param self The integer of which to find the modular inverse\\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\\n\\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\\n assembly (\\\"memory-safe\\\") {\\n // load the free memory pointer value\\n let pointer := mload(0x40)\\n\\n // Define length of base (Bsize)\\n mstore(pointer, 0x20)\\n // Define the exponent size (Esize)\\n mstore(add(pointer, 0x20), 0x20)\\n // Define the modulus size (Msize)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base (B)\\n mstore(add(pointer, 0x60), self)\\n // Define the exponent (E)\\n mstore(add(pointer, 0x80), pp1div4)\\n // We save the point of the last argument, it will be override by the result\\n // of the precompile call in order to avoid paying for the memory expansion properly\\n let _result := add(pointer, 0xa0)\\n // Define the modulus (M)\\n mstore(_result, p)\\n\\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\\n if iszero(\\n staticcall(\\n not(0), // amount of gas to send\\n MODEXP_PRECOMPILE, // target\\n pointer, // argsOffset\\n 0xc0, // argsSize (6 * 32 bytes)\\n _result, // retOffset (we override M to avoid paying for the memory expansion)\\n 0x20 // retSize (32 bytes)\\n )\\n ) { revert(0, 0) }\\n\\n result := mload(_result)\\n// result :=addmod(result,0,p)\\n }\\n if(mulmod(result,result,p)!=self){\\n result=_NOTSQUARE;\\n }\\n \\n return result;\\n}\\n /**\\n * /* @dev Convert from affine rep to XYZZ rep\\n */\\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\\n unchecked {\\n P[2] = 1; //ZZ\\n P[3] = 1; //ZZZ\\n P[0] = x0;\\n P[1] = y0;\\n }\\n }\\n\\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \\n\\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\\n\\n y=SqrtMod(y2);\\n if(y==_NOTSQUARE){\\n return _NOTONCURVE;\\n }\\n if((y&1)!=(parity&1)){\\n y=p-y;\\n }\\n }\\n\\n /**\\n * /* @dev Convert from XYZZ rep to affine rep\\n */\\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\\n y1 = mulmod(y, zzzInv, p); //Y/zzz\\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\\n zzzInv = mulmod(_b, _b, p); //1/zz\\n x1 = mulmod(x, zzzInv, p); //X/zz\\n }\\n\\n /**\\n * /* @dev Sutherland2008 doubling\\n */\\n /* The \\\"dbl-2008-s-1\\\" doubling formulas */\\n\\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n assembly {\\n P0 := mulmod(2, y, p) //U = 2*Y1\\n P2 := mulmod(P0, P0, p) // V=U^2\\n P3 := mulmod(x, P2, p) // S = X1*V\\n P1 := mulmod(P0, P2, p) // W=UV\\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\\n }\\n }\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\\n */\\n\\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n if (y1 == 0) {\\n return (x2, y2, 1, 1);\\n }\\n\\n assembly {\\n y1 := sub(p, y1)\\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\\n P0 := mulmod(x2, x2, p) //PP = P^2\\n P1 := mulmod(P0, x2, p) //PPP = P*PP\\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\\n }\\n //end assembly\\n } //end unchecked\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Return the zero curve in XYZZ coordinates.\\n */\\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\\n return (0, 0, 0, 0);\\n }\\n /**\\n * @dev Check if point is the neutral of the curve\\n */\\n\\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\\n return y0 == 0;\\n }\\n /**\\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\\n */\\n\\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\\n return (0, 0);\\n }\\n\\n /**\\n * @dev Check if the curve is the zero curve in affine rep.\\n */\\n // uint256 x, uint256 y)\\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\\n return (y == 0);\\n }\\n\\n /**\\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\\n */\\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\\n if (0 == x || x == p || 0 == y || y == p) {\\n return false;\\n }\\n unchecked {\\n uint256 LHS = mulmod(y, y, p); // y^2\\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\\n\\n return LHS == RHS;\\n }\\n }\\n\\n /**\\n * @dev Add two elliptic curve points in affine coordinates.\\n */\\n\\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\\n uint256 zz0;\\n uint256 zzz0;\\n\\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\\n\\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\\n\\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\\n }\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns only x for ECDSA use \\n * */\\n function ecZZ_mulmuladd_S_asm(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 Y;\\n uint256 index = 255;\\n uint256 H0;\\n uint256 H1;\\n\\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return 0;\\n\\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n X := H0\\n Y := H1\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := H0\\n T2 := H1\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n let T := mload(0x40)\\n mstore(add(T, 0x60), zz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n //Y:=mulmod(Y,zzz,p)//Y/zzz\\n //zz :=mulmod(zz, mload(T),p) //1/z\\n //zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, mload(T), p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return X;\\n }\\n\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns affine representation of point (normalized) \\n * */\\n function ecZZ_mulmuladd(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X, uint256 Y) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 index = 255;\\n uint256[6] memory T;\\n uint256[2] memory H;\\n \\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\\n\\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n Y := mload(add(H,32))\\n X := mload(H)\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := mload(H)\\n T2 := mload(add(H,32))\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zzz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n Y:=mulmod(Y,mload(T),p)//Y/zzz\\n zz :=mulmod(zz, mload(T),p) //1/z\\n zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, zz, p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return (X,Y);\\n }\\n\\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\\n //contract at given address dataPointer\\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\\n // the external tool to generate tables from public key is in the /sage directory\\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n unchecked {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n extcodecopy(dataPointer, T, mload(T), 64)\\n let index := sub(zz, 1)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for {} gt(index, 191) { index := add(index, 191) } {\\n //inline Double\\n {\\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(TT1, TT1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n let T1 := mulmod(TT1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n }\\n {\\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n let index2 := sub(index, 64)\\n let T3 :=\\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\\n let index3 := sub(index2, 64)\\n let T2 :=\\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\\n index := sub(index3, 64)\\n let T1 :=\\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T1) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n extcodecopy(dataPointer, T, T1, 64)\\n }\\n\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n\\n // inlined EcZZ_AddN\\n if iszero(zz) {\\n X := mload(T)\\n Y := mload(add(T, 32))\\n zz := 1\\n zzz := 1\\n\\n continue\\n }\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n\\n //special case ecAdd(P,P)=EcDbl\\n if iszero(y2) {\\n if iszero(T2) {\\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n let T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n let T4 := mulmod(T2, T2, p)\\n let T1 := mulmod(T4, T2, p) //\\n zz := mulmod(zz, T4, p)\\n //zzz3=V*ZZ1\\n zzz := mulmod(zzz, T1, p) // W=UV/\\n let zz1 := mulmod(X, T4, p)\\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n \\n\\n // improving the extcodecopy trick : append array at end of contract\\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n unchecked {\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n codecopy(T, add(mload(T), dataPointer), 64)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n //index:=add(index,192), restore index, interleaved with loop\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T4) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n codecopy(T, add(T4, dataPointer), 64)\\n\\n // inlined EcZZ_AddN\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n T4 := mulmod(T2, T2, p)\\n T1 := mulmod(T4, T2, p)\\n T2 := mulmod(zz, T4, p) // W=UV\\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\\n let zz1 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\\n zz := T2\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256[2] calldata Q) internal view returns (bool) {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n uint256 Q0 = Q[0];\\n uint256 Q1 = Q[1];\\n if (!ecAff_isOnCurve(Q0, Q1)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, n);\\n uint256 scalar_v = mulmod(r, sInv, n);\\n uint256 x1;\\n\\n x1 = ecZZ_mulmuladd_S_asm(Q0, Q1, scalar_u, scalar_v);\\n\\n assembly {\\n x1 := addmod(x1, sub(n, r), n)\\n }\\n //return true;\\n return x1 == 0;\\n }\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256[2] calldata rs, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) public view returns (address)\\n {\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return address(0);\\n }\\n uint256 y=ec_Decompress(r, v-27);\\n uint256 rinv=FCL_nModInv(r);\\n uint256 u1=mulmod(n-addmod(0,h,n), rinv,n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n //ecdsa signature for test purpose only (who would like to have a private key onchain anyway ?)\\n //K is nonce, kpriv is private key\\n function ecdsa_sign(bytes32 message, uint256 k , uint256 kpriv) public view returns(uint256 r, uint256 s)\\n {\\n r=ecZZ_mulmuladd_S_asm(0,0, k, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n r=addmod(0,r, n); \\n s=mulmod(FCL_nModInv(k), addmod(uint256(message), mulmod(r, kpriv, n),n),n);//s=k^-1.(h+r.kpriv)\\n\\n \\n if(r==0||s==0){\\n revert();\\n }\\n\\n\\n }\\n\\n} //EOF\\n\",\"keccak256\":\"0xd6c3e555eae02916f6b9d65db6509d7ddf0fd76d5399e29dbc1502e0b7d992a6\",\"license\":\"MIT\"},\"FreshCryptoLib/utils/Base64Url.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Encode (without '=' padding) \\n * @author evmbrahmin, adapted from hiromin's Base64URL libraries\\n */\\nlibrary Base64Url {\\n /**\\n * @dev Base64Url Encoding Table\\n */\\n string internal constant ENCODING_TABLE =\\n \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\\\";\\n\\n function encode(bytes memory data) internal pure returns (string memory) {\\n if (data.length == 0) return \\\"\\\";\\n\\n // Load the table into memory\\n string memory table = ENCODING_TABLE;\\n\\n string memory result = new string(4 * ((data.length + 2) / 3));\\n\\n // @solidity memory-safe-assembly\\n assembly {\\n let tablePtr := add(table, 1)\\n let resultPtr := add(result, 32)\\n\\n for {\\n let dataPtr := data\\n let endPtr := add(data, mload(data))\\n } lt(dataPtr, endPtr) {\\n\\n } {\\n dataPtr := add(dataPtr, 3)\\n let input := mload(dataPtr)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(18, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(12, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(6, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))\\n resultPtr := add(resultPtr, 1)\\n }\\n\\n // Remove the padding adjustment logic\\n switch mod(mload(data), 3)\\n case 1 {\\n // Adjust for the last byte of data\\n resultPtr := sub(resultPtr, 2)\\n }\\n case 2 {\\n // Adjust for the last two bytes of data\\n resultPtr := sub(resultPtr, 1)\\n }\\n \\n // Set the correct length of the result string\\n mstore(result, sub(resultPtr, add(result, 32)))\\n }\\n\\n return result; \\n }\\n}\\n\",\"keccak256\":\"0xc9d5fbb0ef9ff0756eb5aabe7a32b2bf0f8f3c533d4451dd5778fe77aee7f0c1\",\"license\":\"Apache-2.0\"},\"contracts/FCL/WrapperFCLWebAuthn.sol\":{\"content\":\"pragma solidity ^0.8.0;\\n\\nimport {FCL_WebAuthn} from \\\"FreshCryptoLib/FCL_Webauthn.sol\\\";\\n\\n/// @title WrapperFCLWebAuthn\\n/// @notice A library used to verify ECDSA signatures over secp256r1 through\\n/// EIP-1271 of Webauthn payloads.\\n/// @dev This lib is only a wrapper around the FCL_WebAuthn library.\\n/// It is meant to be used with 1271 signatures.\\n/// The wrapping is necessary because the FCL_WebAuthn has only internal\\n/// functions and use calldata. This makes it impossible to use it with\\n/// isValidSignature that use memory.\\nlibrary WrapperFCLWebAuthn {\\n function checkSignature(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256[2] calldata Q\\n ) external view returns (bool) {\\n return FCL_WebAuthn.checkSignature(\\n authenticatorData,\\n authenticatorDataFlagMask,\\n clientData,\\n clientChallenge,\\n clientChallengeDataOffset,\\n rs,\\n Q\\n );\\n }\\n}\",\"keccak256\":\"0x21b11feafba10e0db2399a46a1d5d30a93c39d0f1c384f43ac43f4988b5d0586\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"A library used to verify ECDSA signatures over secp256r1 through EIP-1271 of Webauthn payloads.","version":1}}},"contracts/P256Signer.sol":{"P256Signer":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"InvalidHash","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"x_","type":"uint256"},{"internalType":"uint256","name":"y_","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_hash","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"y","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"This contract is the implementation. It is meant to be used through proxy clone.","kind":"dev","methods":{"initialize(uint256,uint256)":{"details":"This function is only callable once and needs to be called immediately after deployment by the factory in the same transaction.","params":{"x_":"The x coordinate of the public key","y_":"The y coordinate of the public key"}},"isValidSignature(bytes,bytes)":{"details":"This is the old version of the function of EIP-1271 using bytes memory instead of bytes32","params":{"_hash":"The hash of the data signed","_signature":"The signature"},"returns":{"_0":"The EIP-1271 magic value"}},"isValidSignature(bytes32,bytes)":{"params":{"_hash":"The hash of the data signed","_signature":"The signature"},"returns":{"_0":"The EIP-1271 magic value"}}},"title":"P256Signer","version":1},"evm":{"bytecode":{"functionDebugData":{"@_2012":{"entryPoint":null,"id":2012,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"linkReferences":{"contracts/FCL/WrapperFCLWebAuthn.sol":{"WrapperFCLWebAuthn":[{"length":20,"start":641}]}},"object":"608060405234801561001057600080fd5b506000805460ff191660011790556107c18061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806320c13b0b1161005057806320c13b0b146100f4578063a56dfe4a14610107578063e4a301161461011057600080fd5b80630c55699c14610077578063158ef93e146100935780631626ba7e146100b0575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6000546100a09060ff1681565b604051901515815260200161008a565b6100c36100be366004610475565b610125565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161008a565b6100c36101023660046104bc565b61017a565b61008060025481565b61012361011e366004610516565b6101ae565b005b60006101528360405160200161013d91815260200190565b60405160208183030381529060405283610222565b507f1626ba7e0000000000000000000000000000000000000000000000000000000092915050565b60006101868383610222565b507f20c13b0b0000000000000000000000000000000000000000000000000000000092915050565b60005460ff16156101eb576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591909155600255565b6000828051906020012090506000806000808580602001905181019061024891906105a9565b9350935093509350600073__$d89787f8caa2dcaf364e9349db6aeaba37$__630d5efec9866001878a8888604051806040016040528060015481526020016002548152506040518863ffffffff1660e01b81526004016102ae97969594939291906106da565b602060405180830381865af41580156102cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ef9190610762565b905080610328576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561038457610384610332565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156103d1576103d1610332565b604052919050565b600067ffffffffffffffff8211156103f3576103f3610332565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261043057600080fd5b813561044361043e826103d9565b61038a565b81815284602083860101111561045857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561048857600080fd5b82359150602083013567ffffffffffffffff8111156104a657600080fd5b6104b28582860161041f565b9150509250929050565b600080604083850312156104cf57600080fd5b823567ffffffffffffffff808211156104e757600080fd5b6104f38683870161041f565b9350602085013591508082111561050957600080fd5b506104b28582860161041f565b6000806040838503121561052957600080fd5b50508035926020909101359150565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b600082601f83011261056d57600080fd5b815161057b61043e826103d9565b81815284602083860101111561059057600080fd5b6105a1826020830160208701610538565b949350505050565b60008060008060a085870312156105bf57600080fd5b845167ffffffffffffffff808211156105d757600080fd5b6105e38883890161055c565b95506020915081870151818111156105fa57600080fd5b61060689828a0161055c565b955050506040860151925086607f87011261062057600080fd5b610628610361565b8060a088018981111561063a57600080fd5b606089015b81811015610656578051845292840192840161063f565b505080935050505092959194509250565b6000815180845261067f816020860160208601610538565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8060005b60028110156106d45781518452602093840193909101906001016106b5565b50505050565b60006101208083526106ee8184018b610667565b90507fff000000000000000000000000000000000000000000000000000000000000008960f81b166020840152828103604084015261072d8189610667565b91505085606083015284608083015261074960a08301856106b1565b61075660e08301846106b1565b98975050505050505050565b60006020828403121561077457600080fd5b8151801515811461078457600080fd5b939250505056fea26469706673582212207cd1278d2c8b4857225fb653cc9b5ae2215dc6321928bc580a16e6fac9c293ec64736f6c63430008140033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x7C1 DUP1 PUSH2 0x2D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x72 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x20C13B0B GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x20C13B0B EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xA56DFE4A EQ PUSH2 0x107 JUMPI DUP1 PUSH4 0xE4A30116 EQ PUSH2 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC55699C EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0x158EF93E EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0xB0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x80 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH2 0xA0 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A JUMP JUMPDEST PUSH2 0xC3 PUSH2 0xBE CALLDATASIZE PUSH1 0x4 PUSH2 0x475 JUMP JUMPDEST PUSH2 0x125 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A JUMP JUMPDEST PUSH2 0xC3 PUSH2 0x102 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BC JUMP JUMPDEST PUSH2 0x17A JUMP JUMPDEST PUSH2 0x80 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x123 PUSH2 0x11E CALLDATASIZE PUSH1 0x4 PUSH2 0x516 JUMP JUMPDEST PUSH2 0x1AE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH2 0x152 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x13D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP4 PUSH2 0x222 JUMP JUMPDEST POP PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x186 DUP4 DUP4 PUSH2 0x222 JUMP JUMPDEST POP PUSH32 0x20C13B0B00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD PUSH32 0xDC149F000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP6 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x248 SWAP2 SWAP1 PUSH2 0x5A9 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH1 0x0 PUSH20 0x0 PUSH4 0xD5EFEC9 DUP7 PUSH1 0x1 DUP8 DUP11 DUP9 DUP9 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 SLOAD DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2AE SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6DA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2EF SWAP2 SWAP1 PUSH2 0x762 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x328 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8BAA579F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x384 JUMPI PUSH2 0x384 PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3D1 JUMPI PUSH2 0x3D1 PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3F3 JUMPI PUSH2 0x3F3 PUSH2 0x332 JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x430 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x443 PUSH2 0x43E DUP3 PUSH2 0x3D9 JUMP JUMPDEST PUSH2 0x38A JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4B2 DUP6 DUP3 DUP7 ADD PUSH2 0x41F JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F3 DUP7 DUP4 DUP8 ADD PUSH2 0x41F JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x509 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B2 DUP6 DUP3 DUP7 ADD PUSH2 0x41F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x529 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x553 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x53B JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x57B PUSH2 0x43E DUP3 PUSH2 0x3D9 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A1 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x538 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E3 DUP9 DUP4 DUP10 ADD PUSH2 0x55C JUMP JUMPDEST SWAP6 POP PUSH1 0x20 SWAP2 POP DUP2 DUP8 ADD MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x5FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x606 DUP10 DUP3 DUP11 ADD PUSH2 0x55C JUMP JUMPDEST SWAP6 POP POP POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP DUP7 PUSH1 0x7F DUP8 ADD SLT PUSH2 0x620 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x628 PUSH2 0x361 JUMP JUMPDEST DUP1 PUSH1 0xA0 DUP9 ADD DUP10 DUP2 GT ISZERO PUSH2 0x63A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP10 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x656 JUMPI DUP1 MLOAD DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 DUP5 ADD PUSH2 0x63F JUMP JUMPDEST POP POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x67F DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x538 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x6D4 JUMPI DUP2 MLOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x6B5 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP1 DUP4 MSTORE PUSH2 0x6EE DUP2 DUP5 ADD DUP12 PUSH2 0x667 JUMP JUMPDEST SWAP1 POP PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 DUP10 PUSH1 0xF8 SHL AND PUSH1 0x20 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x72D DUP2 DUP10 PUSH2 0x667 JUMP JUMPDEST SWAP2 POP POP DUP6 PUSH1 0x60 DUP4 ADD MSTORE DUP5 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x749 PUSH1 0xA0 DUP4 ADD DUP6 PUSH2 0x6B1 JUMP JUMPDEST PUSH2 0x756 PUSH1 0xE0 DUP4 ADD DUP5 PUSH2 0x6B1 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x774 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x784 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH29 0xD1278D2C8B4857225FB653CC9B5AE2215DC6321928BC580A16E6FAC9C2 SWAP4 0xEC PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"333:2802:4:-:0;;;1107:49;;;;;;;;;-1:-1:-1;1131:11:4;:18;;-1:-1:-1;;1131:18:4;1145:4;1131:18;;;333:2802;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_validate_2113":{"entryPoint":546,"id":2113,"parameterSlots":2,"returnSlots":0},"@initialize_2139":{"entryPoint":430,"id":2139,"parameterSlots":2,"returnSlots":0},"@initialized_1989":{"entryPoint":null,"id":1989,"parameterSlots":0,"returnSlots":0},"@isValidSignature_2033":{"entryPoint":293,"id":2033,"parameterSlots":2,"returnSlots":1},"@isValidSignature_2051":{"entryPoint":378,"id":2051,"parameterSlots":2,"returnSlots":1},"@x_1992":{"entryPoint":null,"id":1992,"parameterSlots":0,"returnSlots":0},"@y_1995":{"entryPoint":null,"id":1995,"parameterSlots":0,"returnSlots":0},"abi_decode_bytes":{"entryPoint":1055,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_fromMemory":{"entryPoint":1372,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":1890,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_bytes_memory_ptr":{"entryPoint":1141,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr":{"entryPoint":1212,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptrt_uint256t_array$_t_uint256_$2_memory_ptr_fromMemory":{"entryPoint":1449,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":1302,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_array_uint256":{"entryPoint":1713,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes":{"entryPoint":1639,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_rational_1_by_1_t_bytes_memory_ptr_t_bytes32_t_uint256_t_array$_t_uint256_$2_memory_ptr_t_array$_t_uint256_$2_memory_ptr__to_t_bytes_memory_ptr_t_bytes1_t_bytes_memory_ptr_t_bytes32_t_uint256_t_array$_t_uint256_$2_memory_ptr_t_array$_t_uint256_$2_memory_ptr__fromStack_library_reversed":{"entryPoint":1754,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":906,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_931":{"entryPoint":865,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":985,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":1336,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x41":{"entryPoint":818,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:7264:7","statements":[{"nodeType":"YulBlock","src":"6:3:7","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:7","statements":[{"nodeType":"YulAssignment","src":"125:26:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:7"},"nodeType":"YulFunctionCall","src":"133:18:7"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:7"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:7"},"nodeType":"YulFunctionCall","src":"160:25:7"},"nodeType":"YulExpressionStatement","src":"160:25:7"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:7","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:7","type":""}],"src":"14:177:7"},{"body":{"nodeType":"YulBlock","src":"291:92:7","statements":[{"nodeType":"YulAssignment","src":"301:26:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"313:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"324:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"309:3:7"},"nodeType":"YulFunctionCall","src":"309:18:7"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"301:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"343:9:7"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"368:6:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"361:6:7"},"nodeType":"YulFunctionCall","src":"361:14:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"354:6:7"},"nodeType":"YulFunctionCall","src":"354:22:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"336:6:7"},"nodeType":"YulFunctionCall","src":"336:41:7"},"nodeType":"YulExpressionStatement","src":"336:41:7"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"260:9:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"271:6:7","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"282:4:7","type":""}],"src":"196:187:7"},{"body":{"nodeType":"YulBlock","src":"420:152:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"437:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"440:77:7","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"430:6:7"},"nodeType":"YulFunctionCall","src":"430:88:7"},"nodeType":"YulExpressionStatement","src":"430:88:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"534:1:7","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"537:4:7","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"527:6:7"},"nodeType":"YulFunctionCall","src":"527:15:7"},"nodeType":"YulExpressionStatement","src":"527:15:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"558:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"561:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"551:6:7"},"nodeType":"YulFunctionCall","src":"551:15:7"},"nodeType":"YulExpressionStatement","src":"551:15:7"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"388:184:7"},{"body":{"nodeType":"YulBlock","src":"622:205:7","statements":[{"nodeType":"YulAssignment","src":"632:19:7","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"648:2:7","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"642:5:7"},"nodeType":"YulFunctionCall","src":"642:9:7"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"632:6:7"}]},{"nodeType":"YulVariableDeclaration","src":"660:33:7","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"682:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"690:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"678:3:7"},"nodeType":"YulFunctionCall","src":"678:15:7"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"664:10:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"768:22:7","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"770:16:7"},"nodeType":"YulFunctionCall","src":"770:18:7"},"nodeType":"YulExpressionStatement","src":"770:18:7"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"711:10:7"},{"kind":"number","nodeType":"YulLiteral","src":"723:18:7","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"708:2:7"},"nodeType":"YulFunctionCall","src":"708:34:7"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"747:10:7"},{"name":"memPtr","nodeType":"YulIdentifier","src":"759:6:7"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"744:2:7"},"nodeType":"YulFunctionCall","src":"744:22:7"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"705:2:7"},"nodeType":"YulFunctionCall","src":"705:62:7"},"nodeType":"YulIf","src":"702:88:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"806:2:7","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"810:10:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"799:6:7"},"nodeType":"YulFunctionCall","src":"799:22:7"},"nodeType":"YulExpressionStatement","src":"799:22:7"}]},"name":"allocate_memory_931","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"611:6:7","type":""}],"src":"577:250:7"},{"body":{"nodeType":"YulBlock","src":"877:289:7","statements":[{"nodeType":"YulAssignment","src":"887:19:7","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"903:2:7","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"897:5:7"},"nodeType":"YulFunctionCall","src":"897:9:7"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"887:6:7"}]},{"nodeType":"YulVariableDeclaration","src":"915:117:7","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"937:6:7"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"953:4:7"},{"kind":"number","nodeType":"YulLiteral","src":"959:2:7","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"949:3:7"},"nodeType":"YulFunctionCall","src":"949:13:7"},{"kind":"number","nodeType":"YulLiteral","src":"964:66:7","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"945:3:7"},"nodeType":"YulFunctionCall","src":"945:86:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"933:3:7"},"nodeType":"YulFunctionCall","src":"933:99:7"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"919:10:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"1107:22:7","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1109:16:7"},"nodeType":"YulFunctionCall","src":"1109:18:7"},"nodeType":"YulExpressionStatement","src":"1109:18:7"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1050:10:7"},{"kind":"number","nodeType":"YulLiteral","src":"1062:18:7","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1047:2:7"},"nodeType":"YulFunctionCall","src":"1047:34:7"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1086:10:7"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1098:6:7"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1083:2:7"},"nodeType":"YulFunctionCall","src":"1083:22:7"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1044:2:7"},"nodeType":"YulFunctionCall","src":"1044:62:7"},"nodeType":"YulIf","src":"1041:88:7"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1145:2:7","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1149:10:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1138:6:7"},"nodeType":"YulFunctionCall","src":"1138:22:7"},"nodeType":"YulExpressionStatement","src":"1138:22:7"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"857:4:7","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"866:6:7","type":""}],"src":"832:334:7"},{"body":{"nodeType":"YulBlock","src":"1228:188:7","statements":[{"body":{"nodeType":"YulBlock","src":"1272:22:7","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1274:16:7"},"nodeType":"YulFunctionCall","src":"1274:18:7"},"nodeType":"YulExpressionStatement","src":"1274:18:7"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1244:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"1252:18:7","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1241:2:7"},"nodeType":"YulFunctionCall","src":"1241:30:7"},"nodeType":"YulIf","src":"1238:56:7"},{"nodeType":"YulAssignment","src":"1303:107:7","value":{"arguments":[{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1323:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"1331:2:7","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1319:3:7"},"nodeType":"YulFunctionCall","src":"1319:15:7"},{"kind":"number","nodeType":"YulLiteral","src":"1336:66:7","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1315:3:7"},"nodeType":"YulFunctionCall","src":"1315:88:7"},{"kind":"number","nodeType":"YulLiteral","src":"1405:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1311:3:7"},"nodeType":"YulFunctionCall","src":"1311:99:7"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"1303:4:7"}]}]},"name":"array_allocation_size_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"1208:6:7","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"1219:4:7","type":""}],"src":"1171:245:7"},{"body":{"nodeType":"YulBlock","src":"1473:410:7","statements":[{"body":{"nodeType":"YulBlock","src":"1522:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1531:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1534:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1524:6:7"},"nodeType":"YulFunctionCall","src":"1524:12:7"},"nodeType":"YulExpressionStatement","src":"1524:12:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1501:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"1509:4:7","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1497:3:7"},"nodeType":"YulFunctionCall","src":"1497:17:7"},{"name":"end","nodeType":"YulIdentifier","src":"1516:3:7"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1493:3:7"},"nodeType":"YulFunctionCall","src":"1493:27:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1486:6:7"},"nodeType":"YulFunctionCall","src":"1486:35:7"},"nodeType":"YulIf","src":"1483:55:7"},{"nodeType":"YulVariableDeclaration","src":"1547:30:7","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1570:6:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1557:12:7"},"nodeType":"YulFunctionCall","src":"1557:20:7"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1551:2:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1586:63:7","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1645:2:7"}],"functionName":{"name":"array_allocation_size_bytes","nodeType":"YulIdentifier","src":"1617:27:7"},"nodeType":"YulFunctionCall","src":"1617:31:7"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1601:15:7"},"nodeType":"YulFunctionCall","src":"1601:48:7"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"1590:7:7","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"1665:7:7"},{"name":"_1","nodeType":"YulIdentifier","src":"1674:2:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1658:6:7"},"nodeType":"YulFunctionCall","src":"1658:19:7"},"nodeType":"YulExpressionStatement","src":"1658:19:7"},{"body":{"nodeType":"YulBlock","src":"1725:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1734:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1737:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1727:6:7"},"nodeType":"YulFunctionCall","src":"1727:12:7"},"nodeType":"YulExpressionStatement","src":"1727:12:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1700:6:7"},{"name":"_1","nodeType":"YulIdentifier","src":"1708:2:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1696:3:7"},"nodeType":"YulFunctionCall","src":"1696:15:7"},{"kind":"number","nodeType":"YulLiteral","src":"1713:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1692:3:7"},"nodeType":"YulFunctionCall","src":"1692:26:7"},{"name":"end","nodeType":"YulIdentifier","src":"1720:3:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1689:2:7"},"nodeType":"YulFunctionCall","src":"1689:35:7"},"nodeType":"YulIf","src":"1686:55:7"},{"expression":{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"1767:7:7"},{"kind":"number","nodeType":"YulLiteral","src":"1776:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1763:3:7"},"nodeType":"YulFunctionCall","src":"1763:18:7"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1787:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"1795:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1783:3:7"},"nodeType":"YulFunctionCall","src":"1783:17:7"},{"name":"_1","nodeType":"YulIdentifier","src":"1802:2:7"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1750:12:7"},"nodeType":"YulFunctionCall","src":"1750:55:7"},"nodeType":"YulExpressionStatement","src":"1750:55:7"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"1829:7:7"},{"name":"_1","nodeType":"YulIdentifier","src":"1838:2:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1825:3:7"},"nodeType":"YulFunctionCall","src":"1825:16:7"},{"kind":"number","nodeType":"YulLiteral","src":"1843:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1821:3:7"},"nodeType":"YulFunctionCall","src":"1821:27:7"},{"kind":"number","nodeType":"YulLiteral","src":"1850:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1814:6:7"},"nodeType":"YulFunctionCall","src":"1814:38:7"},"nodeType":"YulExpressionStatement","src":"1814:38:7"},{"nodeType":"YulAssignment","src":"1861:16:7","value":{"name":"array_1","nodeType":"YulIdentifier","src":"1870:7:7"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1861:5:7"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1447:6:7","type":""},{"name":"end","nodeType":"YulTypedName","src":"1455:3:7","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1463:5:7","type":""}],"src":"1421:462:7"},{"body":{"nodeType":"YulBlock","src":"1984:292:7","statements":[{"body":{"nodeType":"YulBlock","src":"2030:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2039:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2042:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2032:6:7"},"nodeType":"YulFunctionCall","src":"2032:12:7"},"nodeType":"YulExpressionStatement","src":"2032:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2005:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"2014:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2001:3:7"},"nodeType":"YulFunctionCall","src":"2001:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"2026:2:7","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1997:3:7"},"nodeType":"YulFunctionCall","src":"1997:32:7"},"nodeType":"YulIf","src":"1994:52:7"},{"nodeType":"YulAssignment","src":"2055:33:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2078:9:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2065:12:7"},"nodeType":"YulFunctionCall","src":"2065:23:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2055:6:7"}]},{"nodeType":"YulVariableDeclaration","src":"2097:46:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2128:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"2139:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2124:3:7"},"nodeType":"YulFunctionCall","src":"2124:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2111:12:7"},"nodeType":"YulFunctionCall","src":"2111:32:7"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2101:6:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"2186:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2195:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2198:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2188:6:7"},"nodeType":"YulFunctionCall","src":"2188:12:7"},"nodeType":"YulExpressionStatement","src":"2188:12:7"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2158:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"2166:18:7","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2155:2:7"},"nodeType":"YulFunctionCall","src":"2155:30:7"},"nodeType":"YulIf","src":"2152:50:7"},{"nodeType":"YulAssignment","src":"2211:59:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2242:9:7"},{"name":"offset","nodeType":"YulIdentifier","src":"2253:6:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2238:3:7"},"nodeType":"YulFunctionCall","src":"2238:22:7"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2262:7:7"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2221:16:7"},"nodeType":"YulFunctionCall","src":"2221:49:7"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2211:6:7"}]}]},"name":"abi_decode_tuple_t_bytes32t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1942:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1953:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1965:6:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1973:6:7","type":""}],"src":"1888:388:7"},{"body":{"nodeType":"YulBlock","src":"2380:149:7","statements":[{"nodeType":"YulAssignment","src":"2390:26:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2402:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"2413:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2398:3:7"},"nodeType":"YulFunctionCall","src":"2398:18:7"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2390:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2432:9:7"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2447:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"2455:66:7","type":"","value":"0xffffffff00000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2443:3:7"},"nodeType":"YulFunctionCall","src":"2443:79:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2425:6:7"},"nodeType":"YulFunctionCall","src":"2425:98:7"},"nodeType":"YulExpressionStatement","src":"2425:98:7"}]},"name":"abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2349:9:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2360:6:7","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2371:4:7","type":""}],"src":"2281:248:7"},{"body":{"nodeType":"YulBlock","src":"2639:434:7","statements":[{"body":{"nodeType":"YulBlock","src":"2685:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2694:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2697:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2687:6:7"},"nodeType":"YulFunctionCall","src":"2687:12:7"},"nodeType":"YulExpressionStatement","src":"2687:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2660:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"2669:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2656:3:7"},"nodeType":"YulFunctionCall","src":"2656:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"2681:2:7","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2652:3:7"},"nodeType":"YulFunctionCall","src":"2652:32:7"},"nodeType":"YulIf","src":"2649:52:7"},{"nodeType":"YulVariableDeclaration","src":"2710:37:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2737:9:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2724:12:7"},"nodeType":"YulFunctionCall","src":"2724:23:7"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2714:6:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2756:28:7","value":{"kind":"number","nodeType":"YulLiteral","src":"2766:18:7","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2760:2:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"2811:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2820:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2823:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2813:6:7"},"nodeType":"YulFunctionCall","src":"2813:12:7"},"nodeType":"YulExpressionStatement","src":"2813:12:7"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2799:6:7"},{"name":"_1","nodeType":"YulIdentifier","src":"2807:2:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2796:2:7"},"nodeType":"YulFunctionCall","src":"2796:14:7"},"nodeType":"YulIf","src":"2793:34:7"},{"nodeType":"YulAssignment","src":"2836:59:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2867:9:7"},{"name":"offset","nodeType":"YulIdentifier","src":"2878:6:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2863:3:7"},"nodeType":"YulFunctionCall","src":"2863:22:7"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2887:7:7"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2846:16:7"},"nodeType":"YulFunctionCall","src":"2846:49:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2836:6:7"}]},{"nodeType":"YulVariableDeclaration","src":"2904:48:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2937:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"2948:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2933:3:7"},"nodeType":"YulFunctionCall","src":"2933:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2920:12:7"},"nodeType":"YulFunctionCall","src":"2920:32:7"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"2908:8:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"2981:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2990:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2993:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2983:6:7"},"nodeType":"YulFunctionCall","src":"2983:12:7"},"nodeType":"YulExpressionStatement","src":"2983:12:7"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"2967:8:7"},{"name":"_1","nodeType":"YulIdentifier","src":"2977:2:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2964:2:7"},"nodeType":"YulFunctionCall","src":"2964:16:7"},"nodeType":"YulIf","src":"2961:36:7"},{"nodeType":"YulAssignment","src":"3006:61:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3037:9:7"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3048:8:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3033:3:7"},"nodeType":"YulFunctionCall","src":"3033:24:7"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3059:7:7"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"3016:16:7"},"nodeType":"YulFunctionCall","src":"3016:51:7"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3006:6:7"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2597:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2608:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2620:6:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2628:6:7","type":""}],"src":"2534:539:7"},{"body":{"nodeType":"YulBlock","src":"3165:161:7","statements":[{"body":{"nodeType":"YulBlock","src":"3211:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3220:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3223:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3213:6:7"},"nodeType":"YulFunctionCall","src":"3213:12:7"},"nodeType":"YulExpressionStatement","src":"3213:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3186:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"3195:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3182:3:7"},"nodeType":"YulFunctionCall","src":"3182:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"3207:2:7","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3178:3:7"},"nodeType":"YulFunctionCall","src":"3178:32:7"},"nodeType":"YulIf","src":"3175:52:7"},{"nodeType":"YulAssignment","src":"3236:33:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3259:9:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3246:12:7"},"nodeType":"YulFunctionCall","src":"3246:23:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3236:6:7"}]},{"nodeType":"YulAssignment","src":"3278:42:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3305:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"3316:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3301:3:7"},"nodeType":"YulFunctionCall","src":"3301:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3288:12:7"},"nodeType":"YulFunctionCall","src":"3288:32:7"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3278:6:7"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3123:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3134:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3146:6:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3154:6:7","type":""}],"src":"3078:248:7"},{"body":{"nodeType":"YulBlock","src":"3432:76:7","statements":[{"nodeType":"YulAssignment","src":"3442:26:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3454:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"3465:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3450:3:7"},"nodeType":"YulFunctionCall","src":"3450:18:7"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3442:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3484:9:7"},{"name":"value0","nodeType":"YulIdentifier","src":"3495:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3477:6:7"},"nodeType":"YulFunctionCall","src":"3477:25:7"},"nodeType":"YulExpressionStatement","src":"3477:25:7"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3401:9:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3412:6:7","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3423:4:7","type":""}],"src":"3331:177:7"},{"body":{"nodeType":"YulBlock","src":"3579:184:7","statements":[{"nodeType":"YulVariableDeclaration","src":"3589:10:7","value":{"kind":"number","nodeType":"YulLiteral","src":"3598:1:7","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3593:1:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"3658:63:7","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3683:3:7"},{"name":"i","nodeType":"YulIdentifier","src":"3688:1:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3679:3:7"},"nodeType":"YulFunctionCall","src":"3679:11:7"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3702:3:7"},{"name":"i","nodeType":"YulIdentifier","src":"3707:1:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3698:3:7"},"nodeType":"YulFunctionCall","src":"3698:11:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3692:5:7"},"nodeType":"YulFunctionCall","src":"3692:18:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3672:6:7"},"nodeType":"YulFunctionCall","src":"3672:39:7"},"nodeType":"YulExpressionStatement","src":"3672:39:7"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3619:1:7"},{"name":"length","nodeType":"YulIdentifier","src":"3622:6:7"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3616:2:7"},"nodeType":"YulFunctionCall","src":"3616:13:7"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3630:19:7","statements":[{"nodeType":"YulAssignment","src":"3632:15:7","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3641:1:7"},{"kind":"number","nodeType":"YulLiteral","src":"3644:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3637:3:7"},"nodeType":"YulFunctionCall","src":"3637:10:7"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3632:1:7"}]}]},"pre":{"nodeType":"YulBlock","src":"3612:3:7","statements":[]},"src":"3608:113:7"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3741:3:7"},{"name":"length","nodeType":"YulIdentifier","src":"3746:6:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3737:3:7"},"nodeType":"YulFunctionCall","src":"3737:16:7"},{"kind":"number","nodeType":"YulLiteral","src":"3755:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3730:6:7"},"nodeType":"YulFunctionCall","src":"3730:27:7"},"nodeType":"YulExpressionStatement","src":"3730:27:7"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"3557:3:7","type":""},{"name":"dst","nodeType":"YulTypedName","src":"3562:3:7","type":""},{"name":"length","nodeType":"YulTypedName","src":"3567:6:7","type":""}],"src":"3513:250:7"},{"body":{"nodeType":"YulBlock","src":"3831:378:7","statements":[{"body":{"nodeType":"YulBlock","src":"3880:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3889:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3892:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3882:6:7"},"nodeType":"YulFunctionCall","src":"3882:12:7"},"nodeType":"YulExpressionStatement","src":"3882:12:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3859:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"3867:4:7","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3855:3:7"},"nodeType":"YulFunctionCall","src":"3855:17:7"},{"name":"end","nodeType":"YulIdentifier","src":"3874:3:7"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3851:3:7"},"nodeType":"YulFunctionCall","src":"3851:27:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3844:6:7"},"nodeType":"YulFunctionCall","src":"3844:35:7"},"nodeType":"YulIf","src":"3841:55:7"},{"nodeType":"YulVariableDeclaration","src":"3905:23:7","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3921:6:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3915:5:7"},"nodeType":"YulFunctionCall","src":"3915:13:7"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3909:2:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3937:63:7","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3996:2:7"}],"functionName":{"name":"array_allocation_size_bytes","nodeType":"YulIdentifier","src":"3968:27:7"},"nodeType":"YulFunctionCall","src":"3968:31:7"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"3952:15:7"},"nodeType":"YulFunctionCall","src":"3952:48:7"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"3941:7:7","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"4016:7:7"},{"name":"_1","nodeType":"YulIdentifier","src":"4025:2:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4009:6:7"},"nodeType":"YulFunctionCall","src":"4009:19:7"},"nodeType":"YulExpressionStatement","src":"4009:19:7"},{"body":{"nodeType":"YulBlock","src":"4076:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4085:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4088:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4078:6:7"},"nodeType":"YulFunctionCall","src":"4078:12:7"},"nodeType":"YulExpressionStatement","src":"4078:12:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4051:6:7"},{"name":"_1","nodeType":"YulIdentifier","src":"4059:2:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4047:3:7"},"nodeType":"YulFunctionCall","src":"4047:15:7"},{"kind":"number","nodeType":"YulLiteral","src":"4064:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4043:3:7"},"nodeType":"YulFunctionCall","src":"4043:26:7"},{"name":"end","nodeType":"YulIdentifier","src":"4071:3:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4040:2:7"},"nodeType":"YulFunctionCall","src":"4040:35:7"},"nodeType":"YulIf","src":"4037:55:7"},{"expression":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4140:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"4148:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4136:3:7"},"nodeType":"YulFunctionCall","src":"4136:17:7"},{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"4159:7:7"},{"kind":"number","nodeType":"YulLiteral","src":"4168:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4155:3:7"},"nodeType":"YulFunctionCall","src":"4155:18:7"},{"name":"_1","nodeType":"YulIdentifier","src":"4175:2:7"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"4101:34:7"},"nodeType":"YulFunctionCall","src":"4101:77:7"},"nodeType":"YulExpressionStatement","src":"4101:77:7"},{"nodeType":"YulAssignment","src":"4187:16:7","value":{"name":"array_1","nodeType":"YulIdentifier","src":"4196:7:7"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"4187:5:7"}]}]},"name":"abi_decode_bytes_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3805:6:7","type":""},{"name":"end","nodeType":"YulTypedName","src":"3813:3:7","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"3821:5:7","type":""}],"src":"3768:441:7"},{"body":{"nodeType":"YulBlock","src":"4387:940:7","statements":[{"body":{"nodeType":"YulBlock","src":"4434:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4443:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4446:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4436:6:7"},"nodeType":"YulFunctionCall","src":"4436:12:7"},"nodeType":"YulExpressionStatement","src":"4436:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4408:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"4417:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4404:3:7"},"nodeType":"YulFunctionCall","src":"4404:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"4429:3:7","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4400:3:7"},"nodeType":"YulFunctionCall","src":"4400:33:7"},"nodeType":"YulIf","src":"4397:53:7"},{"nodeType":"YulVariableDeclaration","src":"4459:30:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4479:9:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4473:5:7"},"nodeType":"YulFunctionCall","src":"4473:16:7"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4463:6:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4498:28:7","value":{"kind":"number","nodeType":"YulLiteral","src":"4508:18:7","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4502:2:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"4553:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4562:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4565:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4555:6:7"},"nodeType":"YulFunctionCall","src":"4555:12:7"},"nodeType":"YulExpressionStatement","src":"4555:12:7"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4541:6:7"},{"name":"_1","nodeType":"YulIdentifier","src":"4549:2:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4538:2:7"},"nodeType":"YulFunctionCall","src":"4538:14:7"},"nodeType":"YulIf","src":"4535:34:7"},{"nodeType":"YulAssignment","src":"4578:70:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4620:9:7"},{"name":"offset","nodeType":"YulIdentifier","src":"4631:6:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4616:3:7"},"nodeType":"YulFunctionCall","src":"4616:22:7"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4640:7:7"}],"functionName":{"name":"abi_decode_bytes_fromMemory","nodeType":"YulIdentifier","src":"4588:27:7"},"nodeType":"YulFunctionCall","src":"4588:60:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4578:6:7"}]},{"nodeType":"YulVariableDeclaration","src":"4657:12:7","value":{"kind":"number","nodeType":"YulLiteral","src":"4667:2:7","type":"","value":"32"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4661:2:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4678:41:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4704:9:7"},{"name":"_2","nodeType":"YulIdentifier","src":"4715:2:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4700:3:7"},"nodeType":"YulFunctionCall","src":"4700:18:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4694:5:7"},"nodeType":"YulFunctionCall","src":"4694:25:7"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"4682:8:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"4748:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4757:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4760:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4750:6:7"},"nodeType":"YulFunctionCall","src":"4750:12:7"},"nodeType":"YulExpressionStatement","src":"4750:12:7"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"4734:8:7"},{"name":"_1","nodeType":"YulIdentifier","src":"4744:2:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4731:2:7"},"nodeType":"YulFunctionCall","src":"4731:16:7"},"nodeType":"YulIf","src":"4728:36:7"},{"nodeType":"YulAssignment","src":"4773:72:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4815:9:7"},{"name":"offset_1","nodeType":"YulIdentifier","src":"4826:8:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4811:3:7"},"nodeType":"YulFunctionCall","src":"4811:24:7"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4837:7:7"}],"functionName":{"name":"abi_decode_bytes_fromMemory","nodeType":"YulIdentifier","src":"4783:27:7"},"nodeType":"YulFunctionCall","src":"4783:62:7"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4773:6:7"}]},{"nodeType":"YulAssignment","src":"4854:35:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4874:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"4885:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4870:3:7"},"nodeType":"YulFunctionCall","src":"4870:18:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4864:5:7"},"nodeType":"YulFunctionCall","src":"4864:25:7"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4854:6:7"}]},{"body":{"nodeType":"YulBlock","src":"4943:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4952:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4955:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4945:6:7"},"nodeType":"YulFunctionCall","src":"4945:12:7"},"nodeType":"YulExpressionStatement","src":"4945:12:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4916:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"4927:3:7","type":"","value":"127"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4912:3:7"},"nodeType":"YulFunctionCall","src":"4912:19:7"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4933:7:7"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4908:3:7"},"nodeType":"YulFunctionCall","src":"4908:33:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4901:6:7"},"nodeType":"YulFunctionCall","src":"4901:41:7"},"nodeType":"YulIf","src":"4898:61:7"},{"nodeType":"YulVariableDeclaration","src":"4968:32:7","value":{"arguments":[],"functionName":{"name":"allocate_memory_931","nodeType":"YulIdentifier","src":"4979:19:7"},"nodeType":"YulFunctionCall","src":"4979:21:7"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"4972:3:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5009:16:7","value":{"name":"dst","nodeType":"YulIdentifier","src":"5022:3:7"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"5013:5:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5034:33:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5052:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"5063:3:7","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5048:3:7"},"nodeType":"YulFunctionCall","src":"5048:19:7"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"5038:6:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"5099:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5108:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5111:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5101:6:7"},"nodeType":"YulFunctionCall","src":"5101:12:7"},"nodeType":"YulExpressionStatement","src":"5101:12:7"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"5082:6:7"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5090:7:7"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5079:2:7"},"nodeType":"YulFunctionCall","src":"5079:19:7"},"nodeType":"YulIf","src":"5076:39:7"},{"nodeType":"YulVariableDeclaration","src":"5124:29:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5139:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"5150:2:7","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5135:3:7"},"nodeType":"YulFunctionCall","src":"5135:18:7"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"5128:3:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"5218:79:7","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5239:3:7"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5250:3:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5244:5:7"},"nodeType":"YulFunctionCall","src":"5244:10:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5232:6:7"},"nodeType":"YulFunctionCall","src":"5232:23:7"},"nodeType":"YulExpressionStatement","src":"5232:23:7"},{"nodeType":"YulAssignment","src":"5268:19:7","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5279:3:7"},{"name":"_2","nodeType":"YulIdentifier","src":"5284:2:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5275:3:7"},"nodeType":"YulFunctionCall","src":"5275:12:7"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"5268:3:7"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5173:3:7"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"5178:6:7"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5170:2:7"},"nodeType":"YulFunctionCall","src":"5170:15:7"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5186:23:7","statements":[{"nodeType":"YulAssignment","src":"5188:19:7","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5199:3:7"},{"name":"_2","nodeType":"YulIdentifier","src":"5204:2:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5195:3:7"},"nodeType":"YulFunctionCall","src":"5195:12:7"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"5188:3:7"}]}]},"pre":{"nodeType":"YulBlock","src":"5166:3:7","statements":[]},"src":"5162:135:7"},{"nodeType":"YulAssignment","src":"5306:15:7","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"5316:5:7"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5306:6:7"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptrt_uint256t_array$_t_uint256_$2_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4329:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4340:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4352:6:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4360:6:7","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4368:6:7","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4376:6:7","type":""}],"src":"4214:1113:7"},{"body":{"nodeType":"YulBlock","src":"5381:280:7","statements":[{"nodeType":"YulVariableDeclaration","src":"5391:26:7","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5411:5:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5405:5:7"},"nodeType":"YulFunctionCall","src":"5405:12:7"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5395:6:7","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5433:3:7"},{"name":"length","nodeType":"YulIdentifier","src":"5438:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5426:6:7"},"nodeType":"YulFunctionCall","src":"5426:19:7"},"nodeType":"YulExpressionStatement","src":"5426:19:7"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5493:5:7"},{"kind":"number","nodeType":"YulLiteral","src":"5500:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5489:3:7"},"nodeType":"YulFunctionCall","src":"5489:16:7"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5511:3:7"},{"kind":"number","nodeType":"YulLiteral","src":"5516:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5507:3:7"},"nodeType":"YulFunctionCall","src":"5507:14:7"},{"name":"length","nodeType":"YulIdentifier","src":"5523:6:7"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"5454:34:7"},"nodeType":"YulFunctionCall","src":"5454:76:7"},"nodeType":"YulExpressionStatement","src":"5454:76:7"},{"nodeType":"YulAssignment","src":"5539:116:7","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5554:3:7"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"5567:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"5575:2:7","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5563:3:7"},"nodeType":"YulFunctionCall","src":"5563:15:7"},{"kind":"number","nodeType":"YulLiteral","src":"5580:66:7","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5559:3:7"},"nodeType":"YulFunctionCall","src":"5559:88:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5550:3:7"},"nodeType":"YulFunctionCall","src":"5550:98:7"},{"kind":"number","nodeType":"YulLiteral","src":"5650:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5546:3:7"},"nodeType":"YulFunctionCall","src":"5546:109:7"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5539:3:7"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5358:5:7","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5365:3:7","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5373:3:7","type":""}],"src":"5332:329:7"},{"body":{"nodeType":"YulBlock","src":"5716:276:7","statements":[{"nodeType":"YulAssignment","src":"5726:10:7","value":{"name":"pos","nodeType":"YulIdentifier","src":"5733:3:7"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5726:3:7"}]},{"nodeType":"YulVariableDeclaration","src":"5745:19:7","value":{"name":"value","nodeType":"YulIdentifier","src":"5759:5:7"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"5749:6:7","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5773:10:7","value":{"kind":"number","nodeType":"YulLiteral","src":"5782:1:7","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5777:1:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"5839:147:7","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5860:3:7"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5871:6:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5865:5:7"},"nodeType":"YulFunctionCall","src":"5865:13:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5853:6:7"},"nodeType":"YulFunctionCall","src":"5853:26:7"},"nodeType":"YulExpressionStatement","src":"5853:26:7"},{"nodeType":"YulVariableDeclaration","src":"5892:14:7","value":{"kind":"number","nodeType":"YulLiteral","src":"5902:4:7","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5896:2:7","type":""}]},{"nodeType":"YulAssignment","src":"5919:19:7","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5930:3:7"},{"name":"_1","nodeType":"YulIdentifier","src":"5935:2:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5926:3:7"},"nodeType":"YulFunctionCall","src":"5926:12:7"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5919:3:7"}]},{"nodeType":"YulAssignment","src":"5951:25:7","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5965:6:7"},{"name":"_1","nodeType":"YulIdentifier","src":"5973:2:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5961:3:7"},"nodeType":"YulFunctionCall","src":"5961:15:7"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5951:6:7"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5803:1:7"},{"kind":"number","nodeType":"YulLiteral","src":"5806:4:7","type":"","value":"0x02"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5800:2:7"},"nodeType":"YulFunctionCall","src":"5800:11:7"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5812:18:7","statements":[{"nodeType":"YulAssignment","src":"5814:14:7","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5823:1:7"},{"kind":"number","nodeType":"YulLiteral","src":"5826:1:7","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5819:3:7"},"nodeType":"YulFunctionCall","src":"5819:9:7"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5814:1:7"}]}]},"pre":{"nodeType":"YulBlock","src":"5796:3:7","statements":[]},"src":"5792:194:7"}]},"name":"abi_encode_array_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5700:5:7","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5707:3:7","type":""}],"src":"5666:326:7"},{"body":{"nodeType":"YulBlock","src":"6409:571:7","statements":[{"nodeType":"YulVariableDeclaration","src":"6419:13:7","value":{"kind":"number","nodeType":"YulLiteral","src":"6429:3:7","type":"","value":"288"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6423:2:7","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6448:9:7"},{"name":"_1","nodeType":"YulIdentifier","src":"6459:2:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6441:6:7"},"nodeType":"YulFunctionCall","src":"6441:21:7"},"nodeType":"YulExpressionStatement","src":"6441:21:7"},{"nodeType":"YulVariableDeclaration","src":"6471:58:7","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6502:6:7"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6514:9:7"},{"name":"_1","nodeType":"YulIdentifier","src":"6525:2:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6510:3:7"},"nodeType":"YulFunctionCall","src":"6510:18:7"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6485:16:7"},"nodeType":"YulFunctionCall","src":"6485:44:7"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"6475:6:7","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6549:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"6560:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6545:3:7"},"nodeType":"YulFunctionCall","src":"6545:18:7"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6573:3:7","type":"","value":"248"},{"name":"value1","nodeType":"YulIdentifier","src":"6578:6:7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6569:3:7"},"nodeType":"YulFunctionCall","src":"6569:16:7"},{"kind":"number","nodeType":"YulLiteral","src":"6587:66:7","type":"","value":"0xff00000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6565:3:7"},"nodeType":"YulFunctionCall","src":"6565:89:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6538:6:7"},"nodeType":"YulFunctionCall","src":"6538:117:7"},"nodeType":"YulExpressionStatement","src":"6538:117:7"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6675:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"6686:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6671:3:7"},"nodeType":"YulFunctionCall","src":"6671:18:7"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6695:6:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"6703:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6691:3:7"},"nodeType":"YulFunctionCall","src":"6691:22:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6664:6:7"},"nodeType":"YulFunctionCall","src":"6664:50:7"},"nodeType":"YulExpressionStatement","src":"6664:50:7"},{"nodeType":"YulAssignment","src":"6723:40:7","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"6748:6:7"},{"name":"tail_1","nodeType":"YulIdentifier","src":"6756:6:7"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6731:16:7"},"nodeType":"YulFunctionCall","src":"6731:32:7"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6723:4:7"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6783:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"6794:2:7","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6779:3:7"},"nodeType":"YulFunctionCall","src":"6779:18:7"},{"name":"value3","nodeType":"YulIdentifier","src":"6799:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6772:6:7"},"nodeType":"YulFunctionCall","src":"6772:34:7"},"nodeType":"YulExpressionStatement","src":"6772:34:7"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6826:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"6837:3:7","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6822:3:7"},"nodeType":"YulFunctionCall","src":"6822:19:7"},{"name":"value4","nodeType":"YulIdentifier","src":"6843:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6815:6:7"},"nodeType":"YulFunctionCall","src":"6815:35:7"},"nodeType":"YulExpressionStatement","src":"6815:35:7"},{"expression":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"6884:6:7"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6896:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"6907:3:7","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6892:3:7"},"nodeType":"YulFunctionCall","src":"6892:19:7"}],"functionName":{"name":"abi_encode_array_uint256","nodeType":"YulIdentifier","src":"6859:24:7"},"nodeType":"YulFunctionCall","src":"6859:53:7"},"nodeType":"YulExpressionStatement","src":"6859:53:7"},{"expression":{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"6946:6:7"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6958:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"6969:3:7","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6954:3:7"},"nodeType":"YulFunctionCall","src":"6954:19:7"}],"functionName":{"name":"abi_encode_array_uint256","nodeType":"YulIdentifier","src":"6921:24:7"},"nodeType":"YulFunctionCall","src":"6921:53:7"},"nodeType":"YulExpressionStatement","src":"6921:53:7"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_rational_1_by_1_t_bytes_memory_ptr_t_bytes32_t_uint256_t_array$_t_uint256_$2_memory_ptr_t_array$_t_uint256_$2_memory_ptr__to_t_bytes_memory_ptr_t_bytes1_t_bytes_memory_ptr_t_bytes32_t_uint256_t_array$_t_uint256_$2_memory_ptr_t_array$_t_uint256_$2_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6330:9:7","type":""},{"name":"value6","nodeType":"YulTypedName","src":"6341:6:7","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6349:6:7","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6357:6:7","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6365:6:7","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6373:6:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6381:6:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6389:6:7","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6400:4:7","type":""}],"src":"5997:983:7"},{"body":{"nodeType":"YulBlock","src":"7063:199:7","statements":[{"body":{"nodeType":"YulBlock","src":"7109:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7118:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7121:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7111:6:7"},"nodeType":"YulFunctionCall","src":"7111:12:7"},"nodeType":"YulExpressionStatement","src":"7111:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7084:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"7093:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7080:3:7"},"nodeType":"YulFunctionCall","src":"7080:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"7105:2:7","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7076:3:7"},"nodeType":"YulFunctionCall","src":"7076:32:7"},"nodeType":"YulIf","src":"7073:52:7"},{"nodeType":"YulVariableDeclaration","src":"7134:29:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7153:9:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7147:5:7"},"nodeType":"YulFunctionCall","src":"7147:16:7"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7138:5:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"7216:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7225:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7228:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7218:6:7"},"nodeType":"YulFunctionCall","src":"7218:12:7"},"nodeType":"YulExpressionStatement","src":"7218:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7185:5:7"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7206:5:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7199:6:7"},"nodeType":"YulFunctionCall","src":"7199:13:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7192:6:7"},"nodeType":"YulFunctionCall","src":"7192:21:7"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"7182:2:7"},"nodeType":"YulFunctionCall","src":"7182:32:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7175:6:7"},"nodeType":"YulFunctionCall","src":"7175:40:7"},"nodeType":"YulIf","src":"7172:60:7"},{"nodeType":"YulAssignment","src":"7241:15:7","value":{"name":"value","nodeType":"YulIdentifier","src":"7251:5:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7241:6:7"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7029:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7040:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7052:6:7","type":""}],"src":"6985:277:7"}]},"contents":"{\n { }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_931() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 64)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n size := add(and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20)\n }\n function abi_decode_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := calldataload(offset)\n let array_1 := allocate_memory(array_allocation_size_bytes(_1))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n mstore(add(add(array_1, _1), 0x20), 0)\n array := array_1\n }\n function abi_decode_tuple_t_bytes32t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value1 := abi_decode_bytes(add(headStart, offset), dataEnd)\n }\n function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff00000000000000000000000000000000000000000000000000000000))\n }\n function abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n let offset_1 := calldataload(add(headStart, 32))\n if gt(offset_1, _1) { revert(0, 0) }\n value1 := abi_decode_bytes(add(headStart, offset_1), dataEnd)\n }\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_decode_bytes_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := mload(offset)\n let array_1 := allocate_memory(array_allocation_size_bytes(_1))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n copy_memory_to_memory_with_cleanup(add(offset, 0x20), add(array_1, 0x20), _1)\n array := array_1\n }\n function abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptrt_uint256t_array$_t_uint256_$2_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n let offset := mload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n value0 := abi_decode_bytes_fromMemory(add(headStart, offset), dataEnd)\n let _2 := 32\n let offset_1 := mload(add(headStart, _2))\n if gt(offset_1, _1) { revert(0, 0) }\n value1 := abi_decode_bytes_fromMemory(add(headStart, offset_1), dataEnd)\n value2 := mload(add(headStart, 64))\n if iszero(slt(add(headStart, 127), dataEnd)) { revert(0, 0) }\n let dst := allocate_memory_931()\n let dst_1 := dst\n let srcEnd := add(headStart, 160)\n if gt(srcEnd, dataEnd) { revert(0, 0) }\n let src := add(headStart, 96)\n for { } lt(src, srcEnd) { src := add(src, _2) }\n {\n mstore(dst, mload(src))\n dst := add(dst, _2)\n }\n value3 := dst_1\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n }\n function abi_encode_array_uint256(value, pos)\n {\n pos := pos\n let srcPtr := value\n let i := 0\n for { } lt(i, 0x02) { i := add(i, 1) }\n {\n mstore(pos, mload(srcPtr))\n let _1 := 0x20\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n }\n function abi_encode_tuple_t_bytes_memory_ptr_t_rational_1_by_1_t_bytes_memory_ptr_t_bytes32_t_uint256_t_array$_t_uint256_$2_memory_ptr_t_array$_t_uint256_$2_memory_ptr__to_t_bytes_memory_ptr_t_bytes1_t_bytes_memory_ptr_t_bytes32_t_uint256_t_array$_t_uint256_$2_memory_ptr_t_array$_t_uint256_$2_memory_ptr__fromStack_library_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n let _1 := 288\n mstore(headStart, _1)\n let tail_1 := abi_encode_bytes(value0, add(headStart, _1))\n mstore(add(headStart, 32), and(shl(248, value1), 0xff00000000000000000000000000000000000000000000000000000000000000))\n mstore(add(headStart, 64), sub(tail_1, headStart))\n tail := abi_encode_bytes(value2, tail_1)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n abi_encode_array_uint256(value5, add(headStart, 160))\n abi_encode_array_uint256(value6, add(headStart, 224))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n}","id":7,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{"contracts/FCL/WrapperFCLWebAuthn.sol":{"WrapperFCLWebAuthn":[{"length":20,"start":596}]}},"object":"608060405234801561001057600080fd5b50600436106100725760003560e01c806320c13b0b1161005057806320c13b0b146100f4578063a56dfe4a14610107578063e4a301161461011057600080fd5b80630c55699c14610077578063158ef93e146100935780631626ba7e146100b0575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6000546100a09060ff1681565b604051901515815260200161008a565b6100c36100be366004610475565b610125565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161008a565b6100c36101023660046104bc565b61017a565b61008060025481565b61012361011e366004610516565b6101ae565b005b60006101528360405160200161013d91815260200190565b60405160208183030381529060405283610222565b507f1626ba7e0000000000000000000000000000000000000000000000000000000092915050565b60006101868383610222565b507f20c13b0b0000000000000000000000000000000000000000000000000000000092915050565b60005460ff16156101eb576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591909155600255565b6000828051906020012090506000806000808580602001905181019061024891906105a9565b9350935093509350600073__$d89787f8caa2dcaf364e9349db6aeaba37$__630d5efec9866001878a8888604051806040016040528060015481526020016002548152506040518863ffffffff1660e01b81526004016102ae97969594939291906106da565b602060405180830381865af41580156102cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ef9190610762565b905080610328576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561038457610384610332565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156103d1576103d1610332565b604052919050565b600067ffffffffffffffff8211156103f3576103f3610332565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261043057600080fd5b813561044361043e826103d9565b61038a565b81815284602083860101111561045857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561048857600080fd5b82359150602083013567ffffffffffffffff8111156104a657600080fd5b6104b28582860161041f565b9150509250929050565b600080604083850312156104cf57600080fd5b823567ffffffffffffffff808211156104e757600080fd5b6104f38683870161041f565b9350602085013591508082111561050957600080fd5b506104b28582860161041f565b6000806040838503121561052957600080fd5b50508035926020909101359150565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b600082601f83011261056d57600080fd5b815161057b61043e826103d9565b81815284602083860101111561059057600080fd5b6105a1826020830160208701610538565b949350505050565b60008060008060a085870312156105bf57600080fd5b845167ffffffffffffffff808211156105d757600080fd5b6105e38883890161055c565b95506020915081870151818111156105fa57600080fd5b61060689828a0161055c565b955050506040860151925086607f87011261062057600080fd5b610628610361565b8060a088018981111561063a57600080fd5b606089015b81811015610656578051845292840192840161063f565b505080935050505092959194509250565b6000815180845261067f816020860160208601610538565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8060005b60028110156106d45781518452602093840193909101906001016106b5565b50505050565b60006101208083526106ee8184018b610667565b90507fff000000000000000000000000000000000000000000000000000000000000008960f81b166020840152828103604084015261072d8189610667565b91505085606083015284608083015261074960a08301856106b1565b61075660e08301846106b1565b98975050505050505050565b60006020828403121561077457600080fd5b8151801515811461078457600080fd5b939250505056fea26469706673582212207cd1278d2c8b4857225fb653cc9b5ae2215dc6321928bc580a16e6fac9c293ec64736f6c63430008140033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x72 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x20C13B0B GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x20C13B0B EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xA56DFE4A EQ PUSH2 0x107 JUMPI DUP1 PUSH4 0xE4A30116 EQ PUSH2 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC55699C EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0x158EF93E EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0xB0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x80 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH2 0xA0 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A JUMP JUMPDEST PUSH2 0xC3 PUSH2 0xBE CALLDATASIZE PUSH1 0x4 PUSH2 0x475 JUMP JUMPDEST PUSH2 0x125 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A JUMP JUMPDEST PUSH2 0xC3 PUSH2 0x102 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BC JUMP JUMPDEST PUSH2 0x17A JUMP JUMPDEST PUSH2 0x80 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x123 PUSH2 0x11E CALLDATASIZE PUSH1 0x4 PUSH2 0x516 JUMP JUMPDEST PUSH2 0x1AE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH2 0x152 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x13D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP4 PUSH2 0x222 JUMP JUMPDEST POP PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x186 DUP4 DUP4 PUSH2 0x222 JUMP JUMPDEST POP PUSH32 0x20C13B0B00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD PUSH32 0xDC149F000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP6 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x248 SWAP2 SWAP1 PUSH2 0x5A9 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH1 0x0 PUSH20 0x0 PUSH4 0xD5EFEC9 DUP7 PUSH1 0x1 DUP8 DUP11 DUP9 DUP9 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 SLOAD DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2AE SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6DA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2EF SWAP2 SWAP1 PUSH2 0x762 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x328 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8BAA579F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x384 JUMPI PUSH2 0x384 PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3D1 JUMPI PUSH2 0x3D1 PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3F3 JUMPI PUSH2 0x3F3 PUSH2 0x332 JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x430 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x443 PUSH2 0x43E DUP3 PUSH2 0x3D9 JUMP JUMPDEST PUSH2 0x38A JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4B2 DUP6 DUP3 DUP7 ADD PUSH2 0x41F JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F3 DUP7 DUP4 DUP8 ADD PUSH2 0x41F JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x509 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B2 DUP6 DUP3 DUP7 ADD PUSH2 0x41F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x529 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x553 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x53B JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x57B PUSH2 0x43E DUP3 PUSH2 0x3D9 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A1 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x538 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E3 DUP9 DUP4 DUP10 ADD PUSH2 0x55C JUMP JUMPDEST SWAP6 POP PUSH1 0x20 SWAP2 POP DUP2 DUP8 ADD MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x5FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x606 DUP10 DUP3 DUP11 ADD PUSH2 0x55C JUMP JUMPDEST SWAP6 POP POP POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP DUP7 PUSH1 0x7F DUP8 ADD SLT PUSH2 0x620 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x628 PUSH2 0x361 JUMP JUMPDEST DUP1 PUSH1 0xA0 DUP9 ADD DUP10 DUP2 GT ISZERO PUSH2 0x63A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP10 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x656 JUMPI DUP1 MLOAD DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 DUP5 ADD PUSH2 0x63F JUMP JUMPDEST POP POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x67F DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x538 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x6D4 JUMPI DUP2 MLOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x6B5 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP1 DUP4 MSTORE PUSH2 0x6EE DUP2 DUP5 ADD DUP12 PUSH2 0x667 JUMP JUMPDEST SWAP1 POP PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 DUP10 PUSH1 0xF8 SHL AND PUSH1 0x20 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x72D DUP2 DUP10 PUSH2 0x667 JUMP JUMPDEST SWAP2 POP POP DUP6 PUSH1 0x60 DUP4 ADD MSTORE DUP5 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x749 PUSH1 0xA0 DUP4 ADD DUP6 PUSH2 0x6B1 JUMP JUMPDEST PUSH2 0x756 PUSH1 0xE0 DUP4 ADD DUP5 PUSH2 0x6B1 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x774 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x784 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH29 0xD1278D2C8B4857225FB653CC9B5AE2215DC6321928BC580A16E6FAC9C2 SWAP4 0xEC PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"333:2802:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;724:16;;;;;;;;;160:25:7;;;148:2;133:18;724:16:4;;;;;;;;633:23;;;;;;;;;;;;361:14:7;;354:22;336:41;;324:2;309:18;633:23:4;196:187:7;1375::4;;;;;;:::i;:::-;;:::i;:::-;;;2455:66:7;2443:79;;;2425:98;;2413:2;2398:18;1375:187:4;2281:248:7;1897:184:4;;;;;;:::i;:::-;;:::i;808:16::-;;;;;;2959:174;;;;;;:::i;:::-;;:::i;:::-;;1375:187;1462:6;1480:40;1501:5;1490:17;;;;;;160:25:7;;148:2;133:18;;14:177;1490:17:4;;;;;;;;;;;;;1509:10;1480:9;:40::i;:::-;-1:-1:-1;1537:18:4;1375:187;;;;:::o;1897:184::-;1989:6;2007:28;2017:5;2024:10;2007:9;:28::i;:::-;-1:-1:-1;2052:22:4;1897:184;;;;:::o;2959:174::-;3026:11;;;;3022:44;;;3046:20;;;;;;;;;;;;;;3022:44;3076:11;:18;;;;3090:4;3076:18;;;;;;3104:6;;;;3120:1;:6;2959:174::o;2203:490::-;2289:13;2315:4;2305:15;;;;;;2289:31;;2331:30;2363:23;2388;2413:20;2460:10;2449:59;;;;;;;;;;;;:::i;:::-;2330:178;;;;;;;;2519:10;2532:18;:33;2566:17;2585:4;2591:10;2603:5;2610:15;2627:2;2532:106;;;;;;;;2632:1;;2532:106;;;;2635:1;;2532:106;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2519:119;;2654:5;2649:37;;2668:18;;;;;;;;;;;;;;2649:37;2279:414;;;;;;2203:490;;:::o;388:184:7:-;440:77;437:1;430:88;537:4;534:1;527:15;561:4;558:1;551:15;577:250;648:2;642:9;;;678:15;;723:18;708:34;;744:22;;;705:62;702:88;;;770:18;;:::i;:::-;806:2;799:22;577:250;:::o;832:334::-;903:2;897:9;959:2;949:13;;964:66;945:86;933:99;;1062:18;1047:34;;1083:22;;;1044:62;1041:88;;;1109:18;;:::i;:::-;1145:2;1138:22;832:334;;-1:-1:-1;832:334:7:o;1171:245::-;1219:4;1252:18;1244:6;1241:30;1238:56;;;1274:18;;:::i;:::-;-1:-1:-1;1331:2:7;1319:15;1336:66;1315:88;1405:4;1311:99;;1171:245::o;1421:462::-;1463:5;1516:3;1509:4;1501:6;1497:17;1493:27;1483:55;;1534:1;1531;1524:12;1483:55;1570:6;1557:20;1601:48;1617:31;1645:2;1617:31;:::i;:::-;1601:48;:::i;:::-;1674:2;1665:7;1658:19;1720:3;1713:4;1708:2;1700:6;1696:15;1692:26;1689:35;1686:55;;;1737:1;1734;1727:12;1686:55;1802:2;1795:4;1787:6;1783:17;1776:4;1767:7;1763:18;1750:55;1850:1;1825:16;;;1843:4;1821:27;1814:38;;;;1829:7;1421:462;-1:-1:-1;;;1421:462:7:o;1888:388::-;1965:6;1973;2026:2;2014:9;2005:7;2001:23;1997:32;1994:52;;;2042:1;2039;2032:12;1994:52;2078:9;2065:23;2055:33;;2139:2;2128:9;2124:18;2111:32;2166:18;2158:6;2155:30;2152:50;;;2198:1;2195;2188:12;2152:50;2221:49;2262:7;2253:6;2242:9;2238:22;2221:49;:::i;:::-;2211:59;;;1888:388;;;;;:::o;2534:539::-;2620:6;2628;2681:2;2669:9;2660:7;2656:23;2652:32;2649:52;;;2697:1;2694;2687:12;2649:52;2737:9;2724:23;2766:18;2807:2;2799:6;2796:14;2793:34;;;2823:1;2820;2813:12;2793:34;2846:49;2887:7;2878:6;2867:9;2863:22;2846:49;:::i;:::-;2836:59;;2948:2;2937:9;2933:18;2920:32;2904:48;;2977:2;2967:8;2964:16;2961:36;;;2993:1;2990;2983:12;2961:36;;3016:51;3059:7;3048:8;3037:9;3033:24;3016:51;:::i;3078:248::-;3146:6;3154;3207:2;3195:9;3186:7;3182:23;3178:32;3175:52;;;3223:1;3220;3213:12;3175:52;-1:-1:-1;;3246:23:7;;;3316:2;3301:18;;;3288:32;;-1:-1:-1;3078:248:7:o;3513:250::-;3598:1;3608:113;3622:6;3619:1;3616:13;3608:113;;;3698:11;;;3692:18;3679:11;;;3672:39;3644:2;3637:10;3608:113;;;-1:-1:-1;;3755:1:7;3737:16;;3730:27;3513:250::o;3768:441::-;3821:5;3874:3;3867:4;3859:6;3855:17;3851:27;3841:55;;3892:1;3889;3882:12;3841:55;3921:6;3915:13;3952:48;3968:31;3996:2;3968:31;:::i;3952:48::-;4025:2;4016:7;4009:19;4071:3;4064:4;4059:2;4051:6;4047:15;4043:26;4040:35;4037:55;;;4088:1;4085;4078:12;4037:55;4101:77;4175:2;4168:4;4159:7;4155:18;4148:4;4140:6;4136:17;4101:77;:::i;:::-;4196:7;3768:441;-1:-1:-1;;;;3768:441:7:o;4214:1113::-;4352:6;4360;4368;4376;4429:3;4417:9;4408:7;4404:23;4400:33;4397:53;;;4446:1;4443;4436:12;4397:53;4479:9;4473:16;4508:18;4549:2;4541:6;4538:14;4535:34;;;4565:1;4562;4555:12;4535:34;4588:60;4640:7;4631:6;4620:9;4616:22;4588:60;:::i;:::-;4578:70;;4667:2;4657:12;;4715:2;4704:9;4700:18;4694:25;4744:2;4734:8;4731:16;4728:36;;;4760:1;4757;4750:12;4728:36;4783:62;4837:7;4826:8;4815:9;4811:24;4783:62;:::i;:::-;4773:72;;;;4885:2;4874:9;4870:18;4864:25;4854:35;;4933:7;4927:3;4916:9;4912:19;4908:33;4898:61;;4955:1;4952;4945:12;4898:61;4979:21;;:::i;:::-;5022:3;5063;5052:9;5048:19;5090:7;5082:6;5079:19;5076:39;;;5111:1;5108;5101:12;5076:39;5150:2;5139:9;5135:18;5162:135;5178:6;5173:3;5170:15;5162:135;;;5244:10;;5232:23;;5275:12;;;;5195;;5162:135;;;5166:3;;5316:5;5306:15;;;;;4214:1113;;;;;;;:::o;5332:329::-;5373:3;5411:5;5405:12;5438:6;5433:3;5426:19;5454:76;5523:6;5516:4;5511:3;5507:14;5500:4;5493:5;5489:16;5454:76;:::i;:::-;5575:2;5563:15;5580:66;5559:88;5550:98;;;;5650:4;5546:109;;5332:329;-1:-1:-1;;5332:329:7:o;5666:326::-;5759:5;5782:1;5792:194;5806:4;5803:1;5800:11;5792:194;;;5865:13;;5853:26;;5902:4;5926:12;;;;5961:15;;;;5826:1;5819:9;5792:194;;;5796:3;;5666:326;;:::o;5997:983::-;6400:4;6429:3;6459:2;6448:9;6441:21;6485:44;6525:2;6514:9;6510:18;6502:6;6485:44;:::i;:::-;6471:58;;6587:66;6578:6;6573:3;6569:16;6565:89;6560:2;6549:9;6545:18;6538:117;6703:9;6695:6;6691:22;6686:2;6675:9;6671:18;6664:50;6731:32;6756:6;6748;6731:32;:::i;:::-;6723:40;;;6799:6;6794:2;6783:9;6779:18;6772:34;6843:6;6837:3;6826:9;6822:19;6815:35;6859:53;6907:3;6896:9;6892:19;6884:6;6859:53;:::i;:::-;6921;6969:3;6958:9;6954:19;6946:6;6921:53;:::i;:::-;5997:983;;;;;;;;;;:::o;6985:277::-;7052:6;7105:2;7093:9;7084:7;7080:23;7076:32;7073:52;;;7121:1;7118;7111:12;7073:52;7153:9;7147:16;7206:5;7199:13;7192:21;7185:5;7182:32;7172:60;;7228:1;7225;7218:12;7172:60;7251:5;6985:277;-1:-1:-1;;;6985:277:7:o"},"gasEstimates":{"creation":{"codeDepositCost":"397000","executionCost":"24660","totalCost":"421660"},"external":{"initialize(uint256,uint256)":"70856","initialized()":"2333","isValidSignature(bytes,bytes)":"infinite","isValidSignature(bytes32,bytes)":"infinite","x()":"2285","y()":"2306"},"internal":{"_validate(bytes memory,bytes memory)":"infinite"}},"methodIdentifiers":{"initialize(uint256,uint256)":"e4a30116","initialized()":"158ef93e","isValidSignature(bytes,bytes)":"20c13b0b","isValidSignature(bytes32,bytes)":"1626ba7e","x()":"0c55699c","y()":"a56dfe4a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y_\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_hash\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"y\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is the implementation. It is meant to be used through proxy clone.\",\"kind\":\"dev\",\"methods\":{\"initialize(uint256,uint256)\":{\"details\":\"This function is only callable once and needs to be called immediately after deployment by the factory in the same transaction.\",\"params\":{\"x_\":\"The x coordinate of the public key\",\"y_\":\"The y coordinate of the public key\"}},\"isValidSignature(bytes,bytes)\":{\"details\":\"This is the old version of the function of EIP-1271 using bytes memory instead of bytes32\",\"params\":{\"_hash\":\"The hash of the data signed\",\"_signature\":\"The signature\"},\"returns\":{\"_0\":\"The EIP-1271 magic value\"}},\"isValidSignature(bytes32,bytes)\":{\"params\":{\"_hash\":\"The hash of the data signed\",\"_signature\":\"The signature\"},\"returns\":{\"_0\":\"The EIP-1271 magic value\"}}},\"title\":\"P256Signer\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"notice\":\"Error message when the contract is already initialized\"}],\"InvalidHash()\":[{\"notice\":\"Error message when the hash is invalid\"}],\"InvalidSignature()\":[{\"notice\":\"Error message when the signature is invalid\"}]},\"kind\":\"user\",\"methods\":{\"initialized()\":{\"notice\":\"Whether the contract has been initialized\"},\"isValidSignature(bytes,bytes)\":{\"notice\":\"Verifies that the signer is the owner of the secp256r1 public key.\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies that the signer is the owner of the secp256r1 public key.\"},\"x()\":{\"notice\":\"The x coordinate of the secp256r1 public key\"},\"y()\":{\"notice\":\"The y coordinate of the secp256r1 public key\"}},\"notice\":\"A contract used to verify ECDSA signatures over secp256r1 through EIP-1271 of Webauthn payloads.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/P256Signer.sol\":\"P256Signer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/FCL_Webauthn.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: Implementation of the WebAuthn Authentication mechanism\\n///* https://www.w3.org/TR/webauthn-2/#sctn-intro\\n///* Original code extracted from https://github.com/btchip/Webauthn.sol\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport {Base64Url} from \\\"./utils/Base64Url.sol\\\";\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\nlibrary FCL_WebAuthn {\\n error InvalidAuthenticatorData();\\n error InvalidClientData();\\n error InvalidSignature();\\n\\n function WebAuthn_format(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata // rs\\n ) internal pure returns (bytes32 result) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n {\\n if ((authenticatorData[32] & authenticatorDataFlagMask) != authenticatorDataFlagMask) {\\n revert InvalidAuthenticatorData();\\n }\\n // Verify that clientData commits to the expected client challenge\\n // Use the Base64Url encoding which omits padding characters to match WebAuthn Specification\\n string memory challengeEncoded = Base64Url.encode(abi.encodePacked(clientChallenge));\\n bytes memory challengeExtracted = new bytes(\\n bytes(challengeEncoded).length\\n );\\n\\n assembly {\\n calldatacopy(\\n add(challengeExtracted, 32),\\n add(clientData.offset, clientChallengeDataOffset),\\n mload(challengeExtracted)\\n )\\n }\\n\\n bytes32 moreData; //=keccak256(abi.encodePacked(challengeExtracted));\\n assembly {\\n moreData := keccak256(add(challengeExtracted, 32), mload(challengeExtracted))\\n }\\n\\n if (keccak256(abi.encodePacked(bytes(challengeEncoded))) != moreData) {\\n revert InvalidClientData();\\n }\\n } //avoid stack full\\n\\n // Verify the signature over sha256(authenticatorData || sha256(clientData))\\n bytes memory verifyData = new bytes(authenticatorData.length + 32);\\n\\n assembly {\\n calldatacopy(add(verifyData, 32), authenticatorData.offset, authenticatorData.length)\\n }\\n\\n bytes32 more = sha256(clientData);\\n assembly {\\n mstore(add(verifyData, add(authenticatorData.length, 32)), more)\\n }\\n\\n return sha256(verifyData);\\n }\\n\\n function checkSignature (\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256[2] calldata Q\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_verify(message, rs, Q);\\n\\n return result;\\n }\\n\\n function checkSignature_prec(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n address dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_verify(message, rs, dataPointer);\\n\\n return result;\\n }\\n\\n //beware that this implementation will not be compliant with EOF\\n function checkSignature_hackmem(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256 dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_hackmem(message, rs, dataPointer);\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x78658514b1f160f17b8408bddc3615b2bfaf83a50c874cdfba26ce90528214b4\",\"license\":\"MIT\"},\"FreshCryptoLib/FCL_elliptic.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: modified XYZZ system coordinates for EVM elliptic point multiplication\\n///* optimization\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nlibrary FCL_Elliptic_ZZ {\\n // Set parameters for curve sec256r1.\\n\\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\\n //curve prime field modulus\\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n //short weierstrass first coefficient\\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\\n //short weierstrass second coefficient\\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\\n //generating point affine coordinates\\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\\n //curve order (number of points)\\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\\n /* -2 mod n constant, used to speed up inversion*/\\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\\n\\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\\n //P+1 div 4\\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\\n //arbitrary constant to express no quadratic residuosity\\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n\\n /**\\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\\n */\\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2modn)\\n mstore(add(pointer, 0xa0), n)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n /**\\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\\n */\\n\\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2)\\n mstore(add(pointer, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n\\n //Coron projective shuffling, take as input alpha as blinding factor\\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) public pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n \\n uint256 alpha2=mulmod(alpha,alpha,p);\\n \\n x3=mulmod(alpha2, x,p); //alpha^-2.x\\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\\n\\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\\n \\n return (x3, y3, zz3, zzz3);\\n }\\n\\n\\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\\n u2=addmod(u2, p-u1, p);// P = U2-U1\\n x1=mulmod(u2, u2, p);//PP\\n x2=mulmod(x1, u2, p);//PPP\\n \\n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \\n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\\n\\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \\n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\\n\\n return (x3, y3, zz3, zzz3);\\n }\\n\\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\\n/// @param self The integer of which to find the modular inverse\\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\\n\\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\\n assembly (\\\"memory-safe\\\") {\\n // load the free memory pointer value\\n let pointer := mload(0x40)\\n\\n // Define length of base (Bsize)\\n mstore(pointer, 0x20)\\n // Define the exponent size (Esize)\\n mstore(add(pointer, 0x20), 0x20)\\n // Define the modulus size (Msize)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base (B)\\n mstore(add(pointer, 0x60), self)\\n // Define the exponent (E)\\n mstore(add(pointer, 0x80), pp1div4)\\n // We save the point of the last argument, it will be override by the result\\n // of the precompile call in order to avoid paying for the memory expansion properly\\n let _result := add(pointer, 0xa0)\\n // Define the modulus (M)\\n mstore(_result, p)\\n\\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\\n if iszero(\\n staticcall(\\n not(0), // amount of gas to send\\n MODEXP_PRECOMPILE, // target\\n pointer, // argsOffset\\n 0xc0, // argsSize (6 * 32 bytes)\\n _result, // retOffset (we override M to avoid paying for the memory expansion)\\n 0x20 // retSize (32 bytes)\\n )\\n ) { revert(0, 0) }\\n\\n result := mload(_result)\\n// result :=addmod(result,0,p)\\n }\\n if(mulmod(result,result,p)!=self){\\n result=_NOTSQUARE;\\n }\\n \\n return result;\\n}\\n /**\\n * /* @dev Convert from affine rep to XYZZ rep\\n */\\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\\n unchecked {\\n P[2] = 1; //ZZ\\n P[3] = 1; //ZZZ\\n P[0] = x0;\\n P[1] = y0;\\n }\\n }\\n\\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \\n\\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\\n\\n y=SqrtMod(y2);\\n if(y==_NOTSQUARE){\\n return _NOTONCURVE;\\n }\\n if((y&1)!=(parity&1)){\\n y=p-y;\\n }\\n }\\n\\n /**\\n * /* @dev Convert from XYZZ rep to affine rep\\n */\\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\\n y1 = mulmod(y, zzzInv, p); //Y/zzz\\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\\n zzzInv = mulmod(_b, _b, p); //1/zz\\n x1 = mulmod(x, zzzInv, p); //X/zz\\n }\\n\\n /**\\n * /* @dev Sutherland2008 doubling\\n */\\n /* The \\\"dbl-2008-s-1\\\" doubling formulas */\\n\\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n assembly {\\n P0 := mulmod(2, y, p) //U = 2*Y1\\n P2 := mulmod(P0, P0, p) // V=U^2\\n P3 := mulmod(x, P2, p) // S = X1*V\\n P1 := mulmod(P0, P2, p) // W=UV\\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\\n }\\n }\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\\n */\\n\\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n if (y1 == 0) {\\n return (x2, y2, 1, 1);\\n }\\n\\n assembly {\\n y1 := sub(p, y1)\\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\\n P0 := mulmod(x2, x2, p) //PP = P^2\\n P1 := mulmod(P0, x2, p) //PPP = P*PP\\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\\n }\\n //end assembly\\n } //end unchecked\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Return the zero curve in XYZZ coordinates.\\n */\\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\\n return (0, 0, 0, 0);\\n }\\n /**\\n * @dev Check if point is the neutral of the curve\\n */\\n\\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\\n return y0 == 0;\\n }\\n /**\\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\\n */\\n\\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\\n return (0, 0);\\n }\\n\\n /**\\n * @dev Check if the curve is the zero curve in affine rep.\\n */\\n // uint256 x, uint256 y)\\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\\n return (y == 0);\\n }\\n\\n /**\\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\\n */\\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\\n if (0 == x || x == p || 0 == y || y == p) {\\n return false;\\n }\\n unchecked {\\n uint256 LHS = mulmod(y, y, p); // y^2\\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\\n\\n return LHS == RHS;\\n }\\n }\\n\\n /**\\n * @dev Add two elliptic curve points in affine coordinates.\\n */\\n\\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\\n uint256 zz0;\\n uint256 zzz0;\\n\\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\\n\\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\\n\\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\\n }\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns only x for ECDSA use \\n * */\\n function ecZZ_mulmuladd_S_asm(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 Y;\\n uint256 index = 255;\\n uint256 H0;\\n uint256 H1;\\n\\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return 0;\\n\\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n X := H0\\n Y := H1\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := H0\\n T2 := H1\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n let T := mload(0x40)\\n mstore(add(T, 0x60), zz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n //Y:=mulmod(Y,zzz,p)//Y/zzz\\n //zz :=mulmod(zz, mload(T),p) //1/z\\n //zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, mload(T), p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return X;\\n }\\n\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns affine representation of point (normalized) \\n * */\\n function ecZZ_mulmuladd(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X, uint256 Y) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 index = 255;\\n uint256[6] memory T;\\n uint256[2] memory H;\\n \\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\\n\\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n Y := mload(add(H,32))\\n X := mload(H)\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := mload(H)\\n T2 := mload(add(H,32))\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zzz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n Y:=mulmod(Y,mload(T),p)//Y/zzz\\n zz :=mulmod(zz, mload(T),p) //1/z\\n zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, zz, p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return (X,Y);\\n }\\n\\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\\n //contract at given address dataPointer\\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\\n // the external tool to generate tables from public key is in the /sage directory\\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n unchecked {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n extcodecopy(dataPointer, T, mload(T), 64)\\n let index := sub(zz, 1)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for {} gt(index, 191) { index := add(index, 191) } {\\n //inline Double\\n {\\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(TT1, TT1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n let T1 := mulmod(TT1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n }\\n {\\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n let index2 := sub(index, 64)\\n let T3 :=\\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\\n let index3 := sub(index2, 64)\\n let T2 :=\\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\\n index := sub(index3, 64)\\n let T1 :=\\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T1) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n extcodecopy(dataPointer, T, T1, 64)\\n }\\n\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n\\n // inlined EcZZ_AddN\\n if iszero(zz) {\\n X := mload(T)\\n Y := mload(add(T, 32))\\n zz := 1\\n zzz := 1\\n\\n continue\\n }\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n\\n //special case ecAdd(P,P)=EcDbl\\n if iszero(y2) {\\n if iszero(T2) {\\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n let T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n let T4 := mulmod(T2, T2, p)\\n let T1 := mulmod(T4, T2, p) //\\n zz := mulmod(zz, T4, p)\\n //zzz3=V*ZZ1\\n zzz := mulmod(zzz, T1, p) // W=UV/\\n let zz1 := mulmod(X, T4, p)\\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n \\n\\n // improving the extcodecopy trick : append array at end of contract\\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n unchecked {\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n codecopy(T, add(mload(T), dataPointer), 64)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n //index:=add(index,192), restore index, interleaved with loop\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T4) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n codecopy(T, add(T4, dataPointer), 64)\\n\\n // inlined EcZZ_AddN\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n T4 := mulmod(T2, T2, p)\\n T1 := mulmod(T4, T2, p)\\n T2 := mulmod(zz, T4, p) // W=UV\\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\\n let zz1 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\\n zz := T2\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256[2] calldata Q) internal view returns (bool) {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n uint256 Q0 = Q[0];\\n uint256 Q1 = Q[1];\\n if (!ecAff_isOnCurve(Q0, Q1)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, n);\\n uint256 scalar_v = mulmod(r, sInv, n);\\n uint256 x1;\\n\\n x1 = ecZZ_mulmuladd_S_asm(Q0, Q1, scalar_u, scalar_v);\\n\\n assembly {\\n x1 := addmod(x1, sub(n, r), n)\\n }\\n //return true;\\n return x1 == 0;\\n }\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256[2] calldata rs, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) public view returns (address)\\n {\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return address(0);\\n }\\n uint256 y=ec_Decompress(r, v-27);\\n uint256 rinv=FCL_nModInv(r);\\n uint256 u1=mulmod(n-addmod(0,h,n), rinv,n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n //ecdsa signature for test purpose only (who would like to have a private key onchain anyway ?)\\n //K is nonce, kpriv is private key\\n function ecdsa_sign(bytes32 message, uint256 k , uint256 kpriv) public view returns(uint256 r, uint256 s)\\n {\\n r=ecZZ_mulmuladd_S_asm(0,0, k, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n r=addmod(0,r, n); \\n s=mulmod(FCL_nModInv(k), addmod(uint256(message), mulmod(r, kpriv, n),n),n);//s=k^-1.(h+r.kpriv)\\n\\n \\n if(r==0||s==0){\\n revert();\\n }\\n\\n\\n }\\n\\n} //EOF\\n\",\"keccak256\":\"0xd6c3e555eae02916f6b9d65db6509d7ddf0fd76d5399e29dbc1502e0b7d992a6\",\"license\":\"MIT\"},\"FreshCryptoLib/utils/Base64Url.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Encode (without '=' padding) \\n * @author evmbrahmin, adapted from hiromin's Base64URL libraries\\n */\\nlibrary Base64Url {\\n /**\\n * @dev Base64Url Encoding Table\\n */\\n string internal constant ENCODING_TABLE =\\n \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\\\";\\n\\n function encode(bytes memory data) internal pure returns (string memory) {\\n if (data.length == 0) return \\\"\\\";\\n\\n // Load the table into memory\\n string memory table = ENCODING_TABLE;\\n\\n string memory result = new string(4 * ((data.length + 2) / 3));\\n\\n // @solidity memory-safe-assembly\\n assembly {\\n let tablePtr := add(table, 1)\\n let resultPtr := add(result, 32)\\n\\n for {\\n let dataPtr := data\\n let endPtr := add(data, mload(data))\\n } lt(dataPtr, endPtr) {\\n\\n } {\\n dataPtr := add(dataPtr, 3)\\n let input := mload(dataPtr)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(18, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(12, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(6, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))\\n resultPtr := add(resultPtr, 1)\\n }\\n\\n // Remove the padding adjustment logic\\n switch mod(mload(data), 3)\\n case 1 {\\n // Adjust for the last byte of data\\n resultPtr := sub(resultPtr, 2)\\n }\\n case 2 {\\n // Adjust for the last two bytes of data\\n resultPtr := sub(resultPtr, 1)\\n }\\n \\n // Set the correct length of the result string\\n mstore(result, sub(resultPtr, add(result, 32)))\\n }\\n\\n return result; \\n }\\n}\\n\",\"keccak256\":\"0xc9d5fbb0ef9ff0756eb5aabe7a32b2bf0f8f3c533d4451dd5778fe77aee7f0c1\",\"license\":\"Apache-2.0\"},\"contracts/FCL/WrapperFCLWebAuthn.sol\":{\"content\":\"pragma solidity ^0.8.0;\\n\\nimport {FCL_WebAuthn} from \\\"FreshCryptoLib/FCL_Webauthn.sol\\\";\\n\\n/// @title WrapperFCLWebAuthn\\n/// @notice A library used to verify ECDSA signatures over secp256r1 through\\n/// EIP-1271 of Webauthn payloads.\\n/// @dev This lib is only a wrapper around the FCL_WebAuthn library.\\n/// It is meant to be used with 1271 signatures.\\n/// The wrapping is necessary because the FCL_WebAuthn has only internal\\n/// functions and use calldata. This makes it impossible to use it with\\n/// isValidSignature that use memory.\\nlibrary WrapperFCLWebAuthn {\\n function checkSignature(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256[2] calldata Q\\n ) external view returns (bool) {\\n return FCL_WebAuthn.checkSignature(\\n authenticatorData,\\n authenticatorDataFlagMask,\\n clientData,\\n clientChallenge,\\n clientChallengeDataOffset,\\n rs,\\n Q\\n );\\n }\\n}\",\"keccak256\":\"0x21b11feafba10e0db2399a46a1d5d30a93c39d0f1c384f43ac43f4988b5d0586\"},\"contracts/P256Signer.sol\":{\"content\":\"pragma solidity ^0.8.0;\\n\\nimport {WrapperFCLWebAuthn} from \\\"./FCL/WrapperFCLWebAuthn.sol\\\";\\n\\n/// @title P256Signer\\n/// @notice A contract used to verify ECDSA signatures over secp256r1 through\\n/// EIP-1271 of Webauthn payloads.\\n/// @dev This contract is the implementation. It is meant to be used through\\n/// proxy clone.\\ncontract P256Signer {\\n /// @notice The EIP-1271 magic value\\n bytes4 internal constant EIP1271_MAGICVALUE = 0x1626ba7e;\\n\\n /// @notice The old EIP-1271 magic value\\n bytes4 internal constant OLD_EIP1271_MAGICVALUE = 0x20c13b0b;\\n\\n /// @notice Whether the contract has been initialized\\n bool public initialized;\\n\\n /// @notice The x coordinate of the secp256r1 public key\\n uint256 public x;\\n\\n /// @notice The y coordinate of the secp256r1 public key\\n uint256 public y;\\n\\n /// @notice Error message when the signature is invalid\\n error InvalidSignature();\\n\\n /// @notice Error message when the hash is invalid\\n error InvalidHash();\\n\\n /// @notice Error message when the contract is already initialized\\n error AlreadyInitialized();\\n\\n constructor() {\\n initialized = true;\\n }\\n\\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\\n /// @param _hash The hash of the data signed\\n /// @param _signature The signature\\n /// @return The EIP-1271 magic value\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view returns (bytes4) {\\n _validate(abi.encode(_hash), _signature);\\n return EIP1271_MAGICVALUE;\\n }\\n\\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\\n /// @dev This is the old version of the function of EIP-1271 using bytes\\n /// memory instead of bytes32\\n /// @param _hash The hash of the data signed\\n /// @param _signature The signature\\n /// @return The EIP-1271 magic value\\n function isValidSignature(bytes memory _hash, bytes memory _signature) public view returns (bytes4) {\\n _validate(_hash, _signature);\\n return OLD_EIP1271_MAGICVALUE;\\n }\\n\\n /// @notice Validates the signature\\n /// @param data The data signed\\n /// @param _signature The signature\\n function _validate(bytes memory data, bytes memory _signature) private view {\\n bytes32 _hash = keccak256(data);\\n (bytes memory authenticatorData, bytes memory clientData, uint256 challengeOffset, uint256[2] memory rs) =\\n abi.decode(_signature, (bytes, bytes, uint256, uint256[2]));\\n\\n bool valid = WrapperFCLWebAuthn.checkSignature(authenticatorData, 0x01, clientData, _hash, challengeOffset, rs, [x, y]);\\n\\n if (!valid) revert InvalidSignature();\\n }\\n\\n /// @dev This function is only callable once and needs to be called immediately\\n /// after deployment by the factory in the same transaction.\\n /// @param x_ The x coordinate of the public key\\n /// @param y_ The y coordinate of the public key\\n function initialize(uint256 x_, uint256 y_) external {\\n if (initialized) revert AlreadyInitialized();\\n initialized = true;\\n x = x_;\\n y = y_;\\n }\\n}\\n\",\"keccak256\":\"0x1c4a4a8793dd4753832bd31e0a048b87ca2ef9f35b16ee4ee960eca473a4920a\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1989,"contract":"contracts/P256Signer.sol:P256Signer","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":1992,"contract":"contracts/P256Signer.sol:P256Signer","label":"x","offset":0,"slot":"1","type":"t_uint256"},{"astId":1995,"contract":"contracts/P256Signer.sol:P256Signer","label":"y","offset":0,"slot":"2","type":"t_uint256"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"errors":{"AlreadyInitialized()":[{"notice":"Error message when the contract is already initialized"}],"InvalidHash()":[{"notice":"Error message when the hash is invalid"}],"InvalidSignature()":[{"notice":"Error message when the signature is invalid"}]},"kind":"user","methods":{"initialized()":{"notice":"Whether the contract has been initialized"},"isValidSignature(bytes,bytes)":{"notice":"Verifies that the signer is the owner of the secp256r1 public key."},"isValidSignature(bytes32,bytes)":{"notice":"Verifies that the signer is the owner of the secp256r1 public key."},"x()":{"notice":"The x coordinate of the secp256r1 public key"},"y()":{"notice":"The y coordinate of the secp256r1 public key"}},"notice":"A contract used to verify ECDSA signatures over secp256r1 through EIP-1271 of Webauthn payloads.","version":1}}},"contracts/P256SignerFactory.sol":{"P256SignerFactory":{"abi":[{"inputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"y","type":"uint256"},{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"NewSignerCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"create","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"create(uint256,uint256)":{"params":{"x":"The x coordinate of the public key","y":"The y coordinate of the public key"}}},"title":"P256SignerFactory","version":1},"evm":{"bytecode":{"functionDebugData":{"@_2159":{"entryPoint":null,"id":2159,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":64,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:306:7","statements":[{"nodeType":"YulBlock","src":"6:3:7","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:7","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:7"},"nodeType":"YulFunctionCall","src":"143:12:7"},"nodeType":"YulExpressionStatement","src":"143:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:7"},"nodeType":"YulFunctionCall","src":"112:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:7","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:7"},"nodeType":"YulFunctionCall","src":"108:32:7"},"nodeType":"YulIf","src":"105:52:7"},{"nodeType":"YulVariableDeclaration","src":"166:29:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:7"},"nodeType":"YulFunctionCall","src":"179:16:7"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:7","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:7"},"nodeType":"YulFunctionCall","src":"260:12:7"},"nodeType":"YulExpressionStatement","src":"260:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:7"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:7"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:7","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:7","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:7"},"nodeType":"YulFunctionCall","src":"239:11:7"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:7","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:7"},"nodeType":"YulFunctionCall","src":"235:19:7"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:7"},"nodeType":"YulFunctionCall","src":"224:31:7"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:7"},"nodeType":"YulFunctionCall","src":"214:42:7"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:7"},"nodeType":"YulFunctionCall","src":"207:50:7"},"nodeType":"YulIf","src":"204:70:7"},{"nodeType":"YulAssignment","src":"283:15:7","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:7"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:7","type":""}],"src":"14:290:7"}]},"contents":"{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n}","id":7,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b5060405161031a38038061031a83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161028a610090600039600081816040015260d7015261028a6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80635c60da1b1461003b5780639f7b45791461008b575b600080fd5b6100627f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b610062610099366004610232565b60008083836040516020016100b8929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006100fc7f0000000000000000000000000000000000000000000000000000000000000000836101db565b6040517fe4a30116000000000000000000000000000000000000000000000000000000008152600481018790526024810186905290915073ffffffffffffffffffffffffffffffffffffffff82169063e4a3011690604401600060405180830381600087803b15801561016e57600080fd5b505af1158015610182573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681528692508791507f33b61205835e3063eb8935cac4b29d7fc333ad80d6cb11893ba4758adf8cdde19060200160405180910390a3949350505050565b60006c5af43d3d93803e602a57fd5bf36021528260145273602c3d8160093d39f33d3d3d3d363d3d37363d73600052816035600c6000f59050806102275763301164256000526004601cfd5b600060215292915050565b6000806040838503121561024557600080fd5b5050803592602090910135915056fea2646970667358221220d58b58802d5c7747f06cdad3d5dae1daf849ad475c9f80c8a469c68e8b50b75264736f6c63430008140033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x31A CODESIZE SUB DUP1 PUSH2 0x31A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x28A PUSH2 0x90 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0x40 ADD MSTORE PUSH1 0xD7 ADD MSTORE PUSH2 0x28A PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x9F7B4579 EQ PUSH2 0x8B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x62 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0x99 CALLDATASIZE PUSH1 0x4 PUSH2 0x232 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB8 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xFC PUSH32 0x0 DUP4 PUSH2 0x1DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4A3011600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xE4A30116 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x182 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP2 MSTORE DUP7 SWAP3 POP DUP8 SWAP2 POP PUSH32 0x33B61205835E3063EB8935CAC4B29D7FC333AD80D6CB11893BA4758ADF8CDDE1 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH13 0x5AF43D3D93803E602A57FD5BF3 PUSH1 0x21 MSTORE DUP3 PUSH1 0x14 MSTORE PUSH20 0x602C3D8160093D39F33D3D3D3D363D3D37363D73 PUSH1 0x0 MSTORE DUP2 PUSH1 0x35 PUSH1 0xC PUSH1 0x0 CREATE2 SWAP1 POP DUP1 PUSH2 0x227 JUMPI PUSH4 0x30116425 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 PUSH1 0x21 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD5 DUP12 PC DUP1 0x2D 0x5C PUSH24 0x47F06CDAD3D5DAE1DAF849AD475C9F80C8A469C68E8B50B7 MSTORE PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"205:877:5:-:0;;;354:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;401:32:5;;;205:877;;14:290:7;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:7;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:7:o;:::-;205:877:5;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@cloneDeterministic_2245":{"entryPoint":475,"id":2245,"parameterSlots":2,"returnSlots":1},"@create_2213":{"entryPoint":null,"id":2213,"parameterSlots":2,"returnSlots":1},"@implementation_2149":{"entryPoint":null,"id":2149,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":562,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_uint256_t_uint256__to_t_uint256_t_uint256__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1000:7","statements":[{"nodeType":"YulBlock","src":"6:3:7","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:125:7","statements":[{"nodeType":"YulAssignment","src":"125:26:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:7"},"nodeType":"YulFunctionCall","src":"133:18:7"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:7"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"182:6:7"},{"kind":"number","nodeType":"YulLiteral","src":"190:42:7","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"178:3:7"},"nodeType":"YulFunctionCall","src":"178:55:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:7"},"nodeType":"YulFunctionCall","src":"160:74:7"},"nodeType":"YulExpressionStatement","src":"160:74:7"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:7","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:7","type":""}],"src":"14:226:7"},{"body":{"nodeType":"YulBlock","src":"332:161:7","statements":[{"body":{"nodeType":"YulBlock","src":"378:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"387:1:7","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"390:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"380:6:7"},"nodeType":"YulFunctionCall","src":"380:12:7"},"nodeType":"YulExpressionStatement","src":"380:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"353:7:7"},{"name":"headStart","nodeType":"YulIdentifier","src":"362:9:7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"349:3:7"},"nodeType":"YulFunctionCall","src":"349:23:7"},{"kind":"number","nodeType":"YulLiteral","src":"374:2:7","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"345:3:7"},"nodeType":"YulFunctionCall","src":"345:32:7"},"nodeType":"YulIf","src":"342:52:7"},{"nodeType":"YulAssignment","src":"403:33:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"426:9:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"413:12:7"},"nodeType":"YulFunctionCall","src":"413:23:7"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"403:6:7"}]},{"nodeType":"YulAssignment","src":"445:42:7","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"472:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"483:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"468:3:7"},"nodeType":"YulFunctionCall","src":"468:18:7"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"455:12:7"},"nodeType":"YulFunctionCall","src":"455:32:7"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"445:6:7"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"290:9:7","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"301:7:7","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"313:6:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"321:6:7","type":""}],"src":"245:248:7"},{"body":{"nodeType":"YulBlock","src":"645:100:7","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"662:3:7"},{"name":"value0","nodeType":"YulIdentifier","src":"667:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"655:6:7"},"nodeType":"YulFunctionCall","src":"655:19:7"},"nodeType":"YulExpressionStatement","src":"655:19:7"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"694:3:7"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"690:3:7"},"nodeType":"YulFunctionCall","src":"690:12:7"},{"name":"value1","nodeType":"YulIdentifier","src":"704:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"683:6:7"},"nodeType":"YulFunctionCall","src":"683:28:7"},"nodeType":"YulExpressionStatement","src":"683:28:7"},{"nodeType":"YulAssignment","src":"720:19:7","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"731:3:7"},{"kind":"number","nodeType":"YulLiteral","src":"736:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"727:3:7"},"nodeType":"YulFunctionCall","src":"727:12:7"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"720:3:7"}]}]},"name":"abi_encode_tuple_packed_t_uint256_t_uint256__to_t_uint256_t_uint256__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"613:3:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"618:6:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"626:6:7","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"637:3:7","type":""}],"src":"498:247:7"},{"body":{"nodeType":"YulBlock","src":"879:119:7","statements":[{"nodeType":"YulAssignment","src":"889:26:7","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"901:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"912:2:7","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"897:3:7"},"nodeType":"YulFunctionCall","src":"897:18:7"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"889:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"931:9:7"},{"name":"value0","nodeType":"YulIdentifier","src":"942:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"924:6:7"},"nodeType":"YulFunctionCall","src":"924:25:7"},"nodeType":"YulExpressionStatement","src":"924:25:7"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"969:9:7"},{"kind":"number","nodeType":"YulLiteral","src":"980:2:7","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"965:3:7"},"nodeType":"YulFunctionCall","src":"965:18:7"},{"name":"value1","nodeType":"YulIdentifier","src":"985:6:7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"958:6:7"},"nodeType":"YulFunctionCall","src":"958:34:7"},"nodeType":"YulExpressionStatement","src":"958:34:7"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"840:9:7","type":""},{"name":"value1","nodeType":"YulTypedName","src":"851:6:7","type":""},{"name":"value0","nodeType":"YulTypedName","src":"859:6:7","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"870:4:7","type":""}],"src":"750:248:7"}]},"contents":"{\n { }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_packed_t_uint256_t_uint256__to_t_uint256_t_uint256__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n mstore(pos, value0)\n mstore(add(pos, 32), value1)\n end := add(pos, 64)\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n}","id":7,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"2149":[{"length":32,"start":64},{"length":32,"start":215}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c80635c60da1b1461003b5780639f7b45791461008b575b600080fd5b6100627f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b610062610099366004610232565b60008083836040516020016100b8929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006100fc7f0000000000000000000000000000000000000000000000000000000000000000836101db565b6040517fe4a30116000000000000000000000000000000000000000000000000000000008152600481018790526024810186905290915073ffffffffffffffffffffffffffffffffffffffff82169063e4a3011690604401600060405180830381600087803b15801561016e57600080fd5b505af1158015610182573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681528692508791507f33b61205835e3063eb8935cac4b29d7fc333ad80d6cb11893ba4758adf8cdde19060200160405180910390a3949350505050565b60006c5af43d3d93803e602a57fd5bf36021528260145273602c3d8160093d39f33d3d3d3d363d3d37363d73600052816035600c6000f59050806102275763301164256000526004601cfd5b600060215292915050565b6000806040838503121561024557600080fd5b5050803592602090910135915056fea2646970667358221220d58b58802d5c7747f06cdad3d5dae1daf849ad475c9f80c8a469c68e8b50b75264736f6c63430008140033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x9F7B4579 EQ PUSH2 0x8B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x62 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0x99 CALLDATASIZE PUSH1 0x4 PUSH2 0x232 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB8 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xFC PUSH32 0x0 DUP4 PUSH2 0x1DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4A3011600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xE4A30116 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x182 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP2 MSTORE DUP7 SWAP3 POP DUP8 SWAP2 POP PUSH32 0x33B61205835E3063EB8935CAC4B29D7FC333AD80D6CB11893BA4758ADF8CDDE1 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH13 0x5AF43D3D93803E602A57FD5BF3 PUSH1 0x21 MSTORE DUP3 PUSH1 0x14 MSTORE PUSH20 0x602C3D8160093D39F33D3D3D3D363D3D37363D73 PUSH1 0x0 MSTORE DUP2 PUSH1 0x35 PUSH1 0xC PUSH1 0x0 CREATE2 SWAP1 POP DUP1 PUSH2 0x227 JUMPI PUSH4 0x30116425 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 PUSH1 0x21 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD5 DUP12 PC DUP1 0x2D 0x5C PUSH24 0x47F06CDAD3D5DAE1DAF849AD475C9F80C8A469C68E8B50B7 MSTORE PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"205:877:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;308:39;;;;;;;;190:42:7;178:55;;;160:74;;148:2;133:18;308:39:5;;;;;;;761:319;;;;;;:::i;:::-;817:7;836:12;878:1;881;861:22;;;;;;;;655:19:7;;;699:2;690:12;;683:28;736:2;727:12;;498:247;861:22:5;;;;;;;;;;;;;851:33;;;;;;836:48;;894:14;911:49;939:14;955:4;911:27;:49::i;:::-;970:35;;;;;;;;924:25:7;;;965:18;;;958:34;;;894:66:5;;-1:-1:-1;970:29:5;;;;;;897:18:7;;970:35:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1020:30:5;;190:42:7;178:55;;160:74;;1040:1:5;;-1:-1:-1;1037:1:5;;-1:-1:-1;1020:30:5;;148:2:7;133:18;1020:30:5;;;;;;;1067:6;761:319;-1:-1:-1;;;;761:319:5:o;8126:822:6:-;8226:16;8337:28;8331:4;8324:42;8392:14;8386:4;8379:28;8433:42;8427:4;8420:56;8524:4;8518;8512;8509:1;8501:28;8489:40;;8598:8;8588:230;;8711:10;8705:4;8698:24;8799:4;8793;8786:18;8588:230;8930:1;8924:4;8917:15;8126:822;;;;:::o;245:248:7:-;313:6;321;374:2;362:9;353:7;349:23;345:32;342:52;;;390:1;387;380:12;342:52;-1:-1:-1;;413:23:7;;;483:2;468:18;;;455:32;;-1:-1:-1;245:248:7:o"},"gasEstimates":{"creation":{"codeDepositCost":"130000","executionCost":"infinite","totalCost":"infinite"},"external":{"create(uint256,uint256)":"infinite","implementation()":"infinite"}},"methodIdentifiers":{"create(uint256,uint256)":"9f7b4579","implementation()":"5c60da1b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"NewSignerCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create(uint256,uint256)\":{\"params\":{\"x\":\"The x coordinate of the public key\",\"y\":\"The y coordinate of the public key\"}}},\"title\":\"P256SignerFactory\",\"version\":1},\"userdoc\":{\"events\":{\"NewSignerCreated(uint256,uint256,address)\":{\"notice\":\"Emitted when a new P256Signer proxy contract is created\"}},\"kind\":\"user\",\"methods\":{\"create(uint256,uint256)\":{\"notice\":\"Creates a new P256Signer proxy contract\"},\"implementation()\":{\"notice\":\"The implementation address of the P256Signer contract\"}},\"notice\":\"Factory contract for creating proxies for P256Signer\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/P256SignerFactory.sol\":\"P256SignerFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"FreshCryptoLib/FCL_Webauthn.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: Implementation of the WebAuthn Authentication mechanism\\n///* https://www.w3.org/TR/webauthn-2/#sctn-intro\\n///* Original code extracted from https://github.com/btchip/Webauthn.sol\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport {Base64Url} from \\\"./utils/Base64Url.sol\\\";\\nimport {FCL_Elliptic_ZZ} from \\\"./FCL_elliptic.sol\\\";\\n\\nlibrary FCL_WebAuthn {\\n error InvalidAuthenticatorData();\\n error InvalidClientData();\\n error InvalidSignature();\\n\\n function WebAuthn_format(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata // rs\\n ) internal pure returns (bytes32 result) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n {\\n if ((authenticatorData[32] & authenticatorDataFlagMask) != authenticatorDataFlagMask) {\\n revert InvalidAuthenticatorData();\\n }\\n // Verify that clientData commits to the expected client challenge\\n // Use the Base64Url encoding which omits padding characters to match WebAuthn Specification\\n string memory challengeEncoded = Base64Url.encode(abi.encodePacked(clientChallenge));\\n bytes memory challengeExtracted = new bytes(\\n bytes(challengeEncoded).length\\n );\\n\\n assembly {\\n calldatacopy(\\n add(challengeExtracted, 32),\\n add(clientData.offset, clientChallengeDataOffset),\\n mload(challengeExtracted)\\n )\\n }\\n\\n bytes32 moreData; //=keccak256(abi.encodePacked(challengeExtracted));\\n assembly {\\n moreData := keccak256(add(challengeExtracted, 32), mload(challengeExtracted))\\n }\\n\\n if (keccak256(abi.encodePacked(bytes(challengeEncoded))) != moreData) {\\n revert InvalidClientData();\\n }\\n } //avoid stack full\\n\\n // Verify the signature over sha256(authenticatorData || sha256(clientData))\\n bytes memory verifyData = new bytes(authenticatorData.length + 32);\\n\\n assembly {\\n calldatacopy(add(verifyData, 32), authenticatorData.offset, authenticatorData.length)\\n }\\n\\n bytes32 more = sha256(clientData);\\n assembly {\\n mstore(add(verifyData, add(authenticatorData.length, 32)), more)\\n }\\n\\n return sha256(verifyData);\\n }\\n\\n function checkSignature (\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256[2] calldata Q\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_verify(message, rs, Q);\\n\\n return result;\\n }\\n\\n function checkSignature_prec(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n address dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_verify(message, rs, dataPointer);\\n\\n return result;\\n }\\n\\n //beware that this implementation will not be compliant with EOF\\n function checkSignature_hackmem(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256 dataPointer\\n ) internal view returns (bool) {\\n // Let the caller check if User Presence (0x01) or User Verification (0x04) are set\\n\\n bytes32 message = FCL_WebAuthn.WebAuthn_format(\\n authenticatorData, authenticatorDataFlagMask, clientData, clientChallenge, clientChallengeDataOffset, rs\\n );\\n\\n bool result = FCL_Elliptic_ZZ.ecdsa_precomputed_hackmem(message, rs, dataPointer);\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x78658514b1f160f17b8408bddc3615b2bfaf83a50c874cdfba26ce90528214b4\",\"license\":\"MIT\"},\"FreshCryptoLib/FCL_elliptic.sol\":{\"content\":\"//********************************************************************************************/\\n// ___ _ ___ _ _ _ _\\n// | __| _ ___ __| |_ / __|_ _ _ _ _ __| |_ ___ | | (_) |__\\n// | _| '_/ -_|_-< ' \\\\ | (__| '_| || | '_ \\\\ _/ _ \\\\ | |__| | '_ \\\\\\n// |_||_| \\\\___/__/_||_| \\\\___|_| \\\\_, | .__/\\\\__\\\\___/ |____|_|_.__/\\n// |__/|_|\\n///* Copyright (C) 2022 - Renaud Dubois - This file is part of FCL (Fresh CryptoLib) project\\n///* License: This software is licensed under MIT License\\n///* This Code may be reused including license and copyright notice.\\n///* See LICENSE file at the root folder of the project.\\n///* FILE: FCL_elliptic.sol\\n///*\\n///*\\n///* DESCRIPTION: modified XYZZ system coordinates for EVM elliptic point multiplication\\n///* optimization\\n///*\\n//**************************************************************************************/\\n//* WARNING: this code SHALL not be used for non prime order curves for security reasons.\\n// Code is optimized for a=-3 only curves with prime order, constant like -1, -2 shall be replaced\\n// if ever used for other curve than sec256R1\\n// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nlibrary FCL_Elliptic_ZZ {\\n // Set parameters for curve sec256r1.\\n\\n // address of the ModExp precompiled contract (Arbitrary-precision exponentiation under modulo)\\n address constant MODEXP_PRECOMPILE = 0x0000000000000000000000000000000000000005;\\n //curve prime field modulus\\n uint256 constant p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n //short weierstrass first coefficient\\n uint256 constant a = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC;\\n //short weierstrass second coefficient\\n uint256 constant b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B;\\n //generating point affine coordinates\\n uint256 constant gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296;\\n uint256 constant gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5;\\n //curve order (number of points)\\n uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;\\n /* -2 mod p constant, used to speed up inversion and doubling (avoid negation)*/\\n uint256 constant minus_2 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFD;\\n /* -2 mod n constant, used to speed up inversion*/\\n uint256 constant minus_2modn = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254F;\\n\\n uint256 constant minus_1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;\\n //P+1 div 4\\n uint256 constant pp1div4=0x3fffffffc0000000400000000000000000000000400000000000000000000000;\\n //arbitrary constant to express no quadratic residuosity\\n uint256 constant _NOTSQUARE=0xFFFFFFFF00000002000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n uint256 constant _NOTONCURVE=0xFFFFFFFF00000003000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF;\\n\\n /**\\n * /* inversion mod n via a^(n-2), use of precompiled using little Fermat theorem\\n */\\n function FCL_nModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2modn)\\n mstore(add(pointer, 0xa0), n)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n /**\\n * /* @dev inversion mod nusing little Fermat theorem via a^(n-2), use of precompiled\\n */\\n\\n function FCL_pModInv(uint256 u) internal view returns (uint256 result) {\\n assembly {\\n let pointer := mload(0x40)\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(pointer, 0x20)\\n mstore(add(pointer, 0x20), 0x20)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n mstore(add(pointer, 0x60), u)\\n mstore(add(pointer, 0x80), minus_2)\\n mstore(add(pointer, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, pointer, 0xc0, pointer, 0x20)) { revert(0, 0) }\\n result := mload(pointer)\\n }\\n }\\n\\n //Coron projective shuffling, take as input alpha as blinding factor\\n function ecZZ_Coronize(uint256 alpha, uint256 x, uint256 y, uint256 zz, uint256 zzz) public pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n \\n uint256 alpha2=mulmod(alpha,alpha,p);\\n \\n x3=mulmod(alpha2, x,p); //alpha^-2.x\\n y3=mulmod(mulmod(alpha, alpha2,p), y,p);\\n\\n zz3=mulmod(zz,alpha2,p);//alpha^2 zz\\n zzz3=mulmod(zzz,mulmod(alpha, alpha2,p),p);//alpha^3 zzz\\n \\n return (x3, y3, zz3, zzz3);\\n }\\n\\n\\n function ecZZ_Add(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2, uint256 zz2, uint256 zzz2) internal pure returns (uint256 x3, uint256 y3, uint256 zz3, uint256 zzz3)\\n {\\n uint256 u1=mulmod(x1,zz2,p); // U1 = X1*ZZ2\\n uint256 u2=mulmod(x2, zz1,p); // U2 = X2*ZZ1\\n u2=addmod(u2, p-u1, p);// P = U2-U1\\n x1=mulmod(u2, u2, p);//PP\\n x2=mulmod(x1, u2, p);//PPP\\n \\n zz3=mulmod(x1, mulmod(zz1, zz2, p),p);//ZZ3 = ZZ1*ZZ2*PP \\n zzz3=mulmod(zzz1, mulmod(zzz2, x2, p),p);//ZZZ3 = ZZZ1*ZZZ2*PPP\\n\\n zz1=mulmod(y1, zzz2,p); // S1 = Y1*ZZZ2\\n zz2=mulmod(y2, zzz1, p); // S2 = Y2*ZZZ1 \\n zz2=addmod(zz2, p-zz1, p);//R = S2-S1\\n zzz1=mulmod(u1, x1,p); //Q = U1*PP\\n x3= addmod(addmod(mulmod(zz2, zz2, p), p-x2,p), mulmod(minus_2, zzz1,p),p); //X3 = R2-PPP-2*Q\\n y3=addmod( mulmod(zz2, addmod(zzz1, p-x3, p),p), p-mulmod(zz1, x2, p),p);//R*(Q-X3)-S1*PPP\\n\\n return (x3, y3, zz3, zzz3);\\n }\\n\\n/// @notice Calculate one modular square root of a given integer. Assume that p=3 mod 4.\\n/// @dev Uses the ModExp precompiled contract at address 0x05 for fast computation using little Fermat theorem\\n/// @param self The integer of which to find the modular inverse\\n/// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx\\n\\nfunction SqrtMod(uint256 self) internal view returns (uint256 result){\\n assembly (\\\"memory-safe\\\") {\\n // load the free memory pointer value\\n let pointer := mload(0x40)\\n\\n // Define length of base (Bsize)\\n mstore(pointer, 0x20)\\n // Define the exponent size (Esize)\\n mstore(add(pointer, 0x20), 0x20)\\n // Define the modulus size (Msize)\\n mstore(add(pointer, 0x40), 0x20)\\n // Define variables base (B)\\n mstore(add(pointer, 0x60), self)\\n // Define the exponent (E)\\n mstore(add(pointer, 0x80), pp1div4)\\n // We save the point of the last argument, it will be override by the result\\n // of the precompile call in order to avoid paying for the memory expansion properly\\n let _result := add(pointer, 0xa0)\\n // Define the modulus (M)\\n mstore(_result, p)\\n\\n // Call the precompiled ModExp (0x05) https://www.evm.codes/precompiled#0x05\\n if iszero(\\n staticcall(\\n not(0), // amount of gas to send\\n MODEXP_PRECOMPILE, // target\\n pointer, // argsOffset\\n 0xc0, // argsSize (6 * 32 bytes)\\n _result, // retOffset (we override M to avoid paying for the memory expansion)\\n 0x20 // retSize (32 bytes)\\n )\\n ) { revert(0, 0) }\\n\\n result := mload(_result)\\n// result :=addmod(result,0,p)\\n }\\n if(mulmod(result,result,p)!=self){\\n result=_NOTSQUARE;\\n }\\n \\n return result;\\n}\\n /**\\n * /* @dev Convert from affine rep to XYZZ rep\\n */\\n function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) {\\n unchecked {\\n P[2] = 1; //ZZ\\n P[3] = 1; //ZZZ\\n P[0] = x0;\\n P[1] = y0;\\n }\\n }\\n\\n function ec_Decompress(uint256 x, uint256 parity) internal view returns(uint256 y){ \\n\\n uint256 y2=mulmod(x,mulmod(x,x,p),p);//x3\\n y2=addmod(b,addmod(y2,mulmod(x,a,p),p),p);//x3+ax+b\\n\\n y=SqrtMod(y2);\\n if(y==_NOTSQUARE){\\n return _NOTONCURVE;\\n }\\n if((y&1)!=(parity&1)){\\n y=p-y;\\n }\\n }\\n\\n /**\\n * /* @dev Convert from XYZZ rep to affine rep\\n */\\n /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/\\n function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) {\\n uint256 zzzInv = FCL_pModInv(zzz); //1/zzz\\n y1 = mulmod(y, zzzInv, p); //Y/zzz\\n uint256 _b = mulmod(zz, zzzInv, p); //1/z\\n zzzInv = mulmod(_b, _b, p); //1/zz\\n x1 = mulmod(x, zzzInv, p); //X/zz\\n }\\n\\n /**\\n * /* @dev Sutherland2008 doubling\\n */\\n /* The \\\"dbl-2008-s-1\\\" doubling formulas */\\n\\n function ecZZ_Dbl(uint256 x, uint256 y, uint256 zz, uint256 zzz)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n assembly {\\n P0 := mulmod(2, y, p) //U = 2*Y1\\n P2 := mulmod(P0, P0, p) // V=U^2\\n P3 := mulmod(x, P2, p) // S = X1*V\\n P1 := mulmod(P0, P2, p) // W=UV\\n P2 := mulmod(P2, zz, p) //zz3=V*ZZ1\\n zz := mulmod(3, mulmod(addmod(x, sub(p, zz), p), addmod(x, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n P0 := addmod(mulmod(zz, zz, p), mulmod(minus_2, P3, p), p) //X3=M^2-2S\\n x := mulmod(zz, addmod(P3, sub(p, P0), p), p) //M(S-X3)\\n P3 := mulmod(P1, zzz, p) //zzz3=W*zzz1\\n P1 := addmod(x, sub(p, mulmod(P1, y, p)), p) //Y3= M(S-X3)-W*Y1\\n }\\n }\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae\\n * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1)\\n */\\n\\n function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2)\\n internal\\n pure\\n returns (uint256 P0, uint256 P1, uint256 P2, uint256 P3)\\n {\\n unchecked {\\n if (y1 == 0) {\\n return (x2, y2, 1, 1);\\n }\\n\\n assembly {\\n y1 := sub(p, y1)\\n y2 := addmod(mulmod(y2, zzz1, p), y1, p)\\n x2 := addmod(mulmod(x2, zz1, p), sub(p, x1), p)\\n P0 := mulmod(x2, x2, p) //PP = P^2\\n P1 := mulmod(P0, x2, p) //PPP = P*PP\\n P2 := mulmod(zz1, P0, p) ////ZZ3 = ZZ1*PP\\n P3 := mulmod(zzz1, P1, p) ////ZZZ3 = ZZZ1*PPP\\n zz1 := mulmod(x1, P0, p) //Q = X1*PP\\n P0 := addmod(addmod(mulmod(y2, y2, p), sub(p, P1), p), mulmod(minus_2, zz1, p), p) //R^2-PPP-2*Q\\n P1 := addmod(mulmod(addmod(zz1, sub(p, P0), p), y2, p), mulmod(y1, P1, p), p) //R*(Q-X3)\\n }\\n //end assembly\\n } //end unchecked\\n return (P0, P1, P2, P3);\\n }\\n\\n /**\\n * @dev Return the zero curve in XYZZ coordinates.\\n */\\n function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) {\\n return (0, 0, 0, 0);\\n }\\n /**\\n * @dev Check if point is the neutral of the curve\\n */\\n\\n // uint256 x0, uint256 y0, uint256 zz0, uint256 zzz0\\n function ecZZ_IsZero(uint256, uint256 y0, uint256, uint256) internal pure returns (bool) {\\n return y0 == 0;\\n }\\n /**\\n * @dev Return the zero curve in affine coordinates. Compatible with the double formulae (no special case)\\n */\\n\\n function ecAff_SetZero() internal pure returns (uint256 x, uint256 y) {\\n return (0, 0);\\n }\\n\\n /**\\n * @dev Check if the curve is the zero curve in affine rep.\\n */\\n // uint256 x, uint256 y)\\n function ecAff_IsZero(uint256, uint256 y) internal pure returns (bool flag) {\\n return (y == 0);\\n }\\n\\n /**\\n * @dev Check if a point in affine coordinates is on the curve (reject Neutral that is indeed on the curve).\\n */\\n function ecAff_isOnCurve(uint256 x, uint256 y) internal pure returns (bool) {\\n if (0 == x || x == p || 0 == y || y == p) {\\n return false;\\n }\\n unchecked {\\n uint256 LHS = mulmod(y, y, p); // y^2\\n uint256 RHS = addmod(mulmod(mulmod(x, x, p), x, p), mulmod(x, a, p), p); // x^3+ax\\n RHS = addmod(RHS, b, p); // x^3 + a*x + b\\n\\n return LHS == RHS;\\n }\\n }\\n\\n /**\\n * @dev Add two elliptic curve points in affine coordinates.\\n */\\n\\n function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) {\\n uint256 zz0;\\n uint256 zzz0;\\n\\n if (ecAff_IsZero(x0, y0)) return (x1, y1);\\n if (ecAff_IsZero(x1, y1)) return (x0, y0);\\n\\n (x0, y0, zz0, zzz0) = ecZZ_AddN(x0, y0, 1, 1, x1, y1);\\n\\n return ecZZ_SetAff(x0, y0, zz0, zzz0);\\n }\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns only x for ECDSA use \\n * */\\n function ecZZ_mulmuladd_S_asm(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 Y;\\n uint256 index = 255;\\n uint256 H0;\\n uint256 H1;\\n\\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return 0;\\n\\n (H0, H1) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n X := H0\\n Y := H1\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := H0\\n T2 := H1\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n let T := mload(0x40)\\n mstore(add(T, 0x60), zz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n //Y:=mulmod(Y,zzz,p)//Y/zzz\\n //zz :=mulmod(zz, mload(T),p) //1/z\\n //zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, mload(T), p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return X;\\n }\\n\\n\\n /**\\n * @dev Computation of uG+vQ using Strauss-Shamir's trick, G basepoint, Q public key\\n * Returns affine representation of point (normalized) \\n * */\\n function ecZZ_mulmuladd(\\n uint256 Q0,\\n uint256 Q1, //affine rep for input point Q\\n uint256 scalar_u,\\n uint256 scalar_v\\n ) internal view returns (uint256 X, uint256 Y) {\\n uint256 zz;\\n uint256 zzz;\\n uint256 index = 255;\\n uint256[6] memory T;\\n uint256[2] memory H;\\n \\n unchecked {\\n if (scalar_u == 0 && scalar_v == 0) return (0,0);\\n\\n (H[0], H[1]) = ecAff_add(gx, gy, Q0, Q1); //will not work if Q=P, obvious forbidden private key\\n\\n assembly {\\n for { let T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1)) } eq(T4, 0) {\\n index := sub(index, 1)\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n } {}\\n zz := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if eq(zz, 1) {\\n X := gx\\n Y := gy\\n }\\n if eq(zz, 2) {\\n X := Q0\\n Y := Q1\\n }\\n if eq(zz, 3) {\\n Y := mload(add(H,32))\\n X := mload(H)\\n }\\n\\n index := sub(index, 1)\\n zz := 1\\n zzz := 1\\n\\n for {} gt(minus_1, index) { index := sub(index, 1) } {\\n // inlined EcZZ_Dbl\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n {\\n //value of dibit\\n T4 := add(shl(1, and(shr(index, scalar_v), 1)), and(shr(index, scalar_u), 1))\\n\\n if iszero(T4) {\\n Y := sub(p, Y) //restore the -Y inversion\\n continue\\n } // if T4!=0\\n\\n if eq(T4, 1) {\\n T1 := gx\\n T2 := gy\\n }\\n if eq(T4, 2) {\\n T1 := Q0\\n T2 := Q1\\n }\\n if eq(T4, 3) {\\n T1 := mload(H)\\n T2 := mload(add(H,32))\\n }\\n if iszero(zz) {\\n X := T1\\n Y := T2\\n zz := 1\\n zzz := 1\\n continue\\n }\\n // inlined EcZZ_AddN\\n\\n //T3:=sub(p, Y)\\n //T3:=Y\\n let y2 := addmod(mulmod(T2, zzz, p), Y, p) //R\\n T2 := addmod(mulmod(T1, zz, p), sub(p, X), p) //P\\n\\n //special extremely rare case accumulator where EcAdd is replaced by EcDbl, no need to optimize this\\n //todo : construct edge vector case\\n if iszero(y2) {\\n if iszero(T2) {\\n T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n T4 := mulmod(T2, T2, p) //PP\\n let TT1 := mulmod(T4, T2, p) //PPP, this one could be spared, but adding this register spare gas\\n zz := mulmod(zz, T4, p)\\n zzz := mulmod(zzz, TT1, p) //zz3=V*ZZ1\\n let TT2 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, TT1), p), mulmod(minus_2, TT2, p), p)\\n Y := addmod(mulmod(addmod(TT2, sub(p, T4), p), y2, p), mulmod(Y, TT1, p), p)\\n\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zzz)\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n Y:=mulmod(Y,mload(T),p)//Y/zzz\\n zz :=mulmod(zz, mload(T),p) //1/z\\n zz:= mulmod(zz,zz,p) //1/zz\\n X := mulmod(X, zz, p) //X/zz\\n } //end assembly\\n } //end unchecked\\n\\n return (X,Y);\\n }\\n\\n //8 dimensions Shamir's trick, using precomputations stored in Shamir8, stored as Bytecode of an external\\n //contract at given address dataPointer\\n //(thx to Lakhdar https://github.com/Kelvyne for EVM storage explanations and tricks)\\n // the external tool to generate tables from public key is in the /sage directory\\n function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n unchecked {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n extcodecopy(dataPointer, T, mload(T), 64)\\n let index := sub(zz, 1)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for {} gt(index, 191) { index := add(index, 191) } {\\n //inline Double\\n {\\n let TT1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(TT1, TT1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n let T1 := mulmod(TT1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n let T5 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T5, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n }\\n {\\n let T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n let index2 := sub(index, 64)\\n let T3 :=\\n add(T4, add(shl(12, and(shr(index2, scalar_v), 1)), shl(8, and(shr(index2, scalar_u), 1))))\\n let index3 := sub(index2, 64)\\n let T2 :=\\n add(T3, add(shl(11, and(shr(index3, scalar_v), 1)), shl(7, and(shr(index3, scalar_u), 1))))\\n index := sub(index3, 64)\\n let T1 :=\\n add(T2, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T1) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n extcodecopy(dataPointer, T, T1, 64)\\n }\\n\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n\\n // inlined EcZZ_AddN\\n if iszero(zz) {\\n X := mload(T)\\n Y := mload(add(T, 32))\\n zz := 1\\n zzz := 1\\n\\n continue\\n }\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n let T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n\\n //special case ecAdd(P,P)=EcDbl\\n if iszero(y2) {\\n if iszero(T2) {\\n let T1 := mulmod(minus_2, Y, p) //U = 2*Y1, y free\\n T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n\\n T1 := mulmod(T1, T2, p) // W=UV\\n y2 := addmod(X, zz, p) //X+ZZ\\n let TT1 := addmod(X, sub(p, zz), p) //X-ZZ\\n y2 := mulmod(y2, TT1, p) //(X-ZZ)(X+ZZ)\\n let T4 := mulmod(3, y2, p) //M\\n\\n zzz := mulmod(TT1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n T2 := mulmod(T4, addmod(T3, sub(p, X), p), p) //M(S-X3)\\n\\n Y := addmod(T2, mulmod(T1, Y, p), p) //Y3= M(S-X3)-W*Y1\\n\\n continue\\n }\\n }\\n\\n let T4 := mulmod(T2, T2, p)\\n let T1 := mulmod(T4, T2, p) //\\n zz := mulmod(zz, T4, p)\\n //zzz3=V*ZZ1\\n zzz := mulmod(zzz, T1, p) // W=UV/\\n let zz1 := mulmod(X, T4, p)\\n X := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, X), p), y2, p), mulmod(Y, T1, p), p)\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n \\n\\n // improving the extcodecopy trick : append array at end of contract\\n function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer)\\n internal view\\n returns (uint256 X /*, uint Y*/ )\\n {\\n uint256 zz; // third and coordinates of the point\\n\\n uint256[6] memory T;\\n zz = 256; //start index\\n\\n unchecked {\\n while (T[0] == 0) {\\n zz = zz - 1;\\n //tbd case of msb octobit is null\\n T[0] = 64\\n * (\\n 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1)\\n + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1)\\n + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1)\\n + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1)\\n );\\n }\\n assembly {\\n codecopy(T, add(mload(T), dataPointer), 64)\\n X := mload(T)\\n let Y := mload(add(T, 32))\\n let zzz := 1\\n zz := 1\\n\\n //loop over 1/4 of scalars thx to Shamir's trick over 8 points\\n for { let index := 254 } gt(index, 191) { index := add(index, 191) } {\\n let T1 := mulmod(2, Y, p) //U = 2*Y1, y free\\n let T2 := mulmod(T1, T1, p) // V=U^2\\n let T3 := mulmod(X, T2, p) // S = X1*V\\n T1 := mulmod(T1, T2, p) // W=UV\\n let T4 := mulmod(3, mulmod(addmod(X, sub(p, zz), p), addmod(X, zz, p), p), p) //M=3*(X1-ZZ1)*(X1+ZZ1)\\n zzz := mulmod(T1, zzz, p) //zzz3=W*zzz1\\n zz := mulmod(T2, zz, p) //zz3=V*ZZ1, V free\\n\\n X := addmod(mulmod(T4, T4, p), mulmod(minus_2, T3, p), p) //X3=M^2-2S\\n //T2:=mulmod(T4,addmod(T3, sub(p, X),p),p)//M(S-X3)\\n T2 := mulmod(T4, addmod(X, sub(p, T3), p), p) //-M(S-X3)=M(X3-S)\\n\\n //Y:= addmod(T2, sub(p, mulmod(T1, Y ,p)),p )//Y3= M(S-X3)-W*Y1\\n Y := addmod(mulmod(T1, Y, p), T2, p) //-Y3= W*Y1-M(S-X3), we replace Y by -Y to avoid a sub in ecAdd\\n\\n /* compute element to access in precomputed table */\\n T4 := add(shl(13, and(shr(index, scalar_v), 1)), shl(9, and(shr(index, scalar_u), 1)))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(12, and(shr(index, scalar_v), 1)), shl(8, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(11, and(shr(index, scalar_v), 1)), shl(7, and(shr(index, scalar_u), 1))))\\n index := sub(index, 64)\\n T4 := add(T4, add(shl(10, and(shr(index, scalar_v), 1)), shl(6, and(shr(index, scalar_u), 1))))\\n //index:=add(index,192), restore index, interleaved with loop\\n\\n //tbd: check validity of formulae with (0,1) to remove conditional jump\\n if iszero(T4) {\\n Y := sub(p, Y)\\n\\n continue\\n }\\n {\\n /* Access to precomputed table using extcodecopy hack */\\n codecopy(T, add(T4, dataPointer), 64)\\n\\n // inlined EcZZ_AddN\\n\\n let y2 := addmod(mulmod(mload(add(T, 32)), zzz, p), Y, p)\\n T2 := addmod(mulmod(mload(T), zz, p), sub(p, X), p)\\n T4 := mulmod(T2, T2, p)\\n T1 := mulmod(T4, T2, p)\\n T2 := mulmod(zz, T4, p) // W=UV\\n zzz := mulmod(zzz, T1, p) //zz3=V*ZZ1\\n let zz1 := mulmod(X, T4, p)\\n T4 := addmod(addmod(mulmod(y2, y2, p), sub(p, T1), p), mulmod(minus_2, zz1, p), p)\\n Y := addmod(mulmod(addmod(zz1, sub(p, T4), p), y2, p), mulmod(Y, T1, p), p)\\n zz := T2\\n X := T4\\n }\\n } //end loop\\n mstore(add(T, 0x60), zz)\\n\\n //(X,Y)=ecZZ_SetAff(X,Y,zz, zzz);\\n //T[0] = inverseModp_Hard(T[0], p); //1/zzz, inline modular inversion using precompile:\\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\\n mstore(T, 0x20)\\n mstore(add(T, 0x20), 0x20)\\n mstore(add(T, 0x40), 0x20)\\n // Define variables base, exponent and modulus\\n //mstore(add(pointer, 0x60), u)\\n mstore(add(T, 0x80), minus_2)\\n mstore(add(T, 0xa0), p)\\n\\n // Call the precompiled contract 0x05 = ModExp\\n if iszero(staticcall(not(0), 0x05, T, 0xc0, T, 0x20)) { revert(0, 0) }\\n\\n zz := mload(T)\\n X := mulmod(X, zz, p) //X/zz\\n }\\n } //end unchecked\\n }\\n\\n /**\\n * @dev ECDSA verification, given , signature, and public key.\\n */\\n function ecdsa_verify(bytes32 message, uint256[2] calldata rs, uint256[2] calldata Q) internal view returns (bool) {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n uint256 Q0 = Q[0];\\n uint256 Q1 = Q[1];\\n if (!ecAff_isOnCurve(Q0, Q1)) {\\n return false;\\n }\\n\\n uint256 sInv = FCL_nModInv(s);\\n\\n uint256 scalar_u = mulmod(uint256(message), sInv, n);\\n uint256 scalar_v = mulmod(r, sInv, n);\\n uint256 x1;\\n\\n x1 = ecZZ_mulmuladd_S_asm(Q0, Q1, scalar_u, scalar_v);\\n\\n assembly {\\n x1 := addmod(x1, sub(n, r), n)\\n }\\n //return true;\\n return x1 == 0;\\n }\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q stored in contract at address Shamir8\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_verify(bytes32 message, uint256[2] calldata rs, address Shamir8)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_extcode(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), Shamir8);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n /**\\n * @dev ECDSA verification using a precomputed table of multiples of P and Q appended at end of contract at address endcontract\\n * generation of contract bytecode for precomputations is done using sagemath code\\n * (see sage directory, WebAuthn_precompute.sage)\\n */\\n\\n function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract)\\n internal view\\n returns (bool)\\n {\\n uint256 r = rs[0];\\n uint256 s = rs[1];\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return false;\\n }\\n /* Q is pushed via bytecode assumed to be correct\\n if (!isOnCurve(Q[0], Q[1])) {\\n return false;\\n }*/\\n\\n uint256 sInv = FCL_nModInv(s);\\n uint256 X;\\n\\n //Shamir 8 dimensions\\n X = ecZZ_mulmuladd_S8_hackmem(mulmod(uint256(message), sInv, n), mulmod(r, sInv, n), endcontract);\\n\\n assembly {\\n X := addmod(X, sub(n, r), n)\\n }\\n return X == 0;\\n } //end ecdsa_precomputed_verify()\\n\\n function ec_recover_r1(uint256 h, uint256 v, uint256 r, uint256 s) public view returns (address)\\n {\\n if (r == 0 || r >= n || s == 0 || s >= n) {\\n return address(0);\\n }\\n uint256 y=ec_Decompress(r, v-27);\\n uint256 rinv=FCL_nModInv(r);\\n uint256 u1=mulmod(n-addmod(0,h,n), rinv,n);//-hr^-1\\n uint256 u2=mulmod(s, rinv,n);//sr^-1\\n\\n uint256 Qx;\\n uint256 Qy;\\n (Qx,Qy)=ecZZ_mulmuladd(r,y, u1, u2);\\n\\n return address(uint160(uint256(keccak256(abi.encodePacked(Qx, Qy)))));\\n }\\n\\n //ecdsa signature for test purpose only (who would like to have a private key onchain anyway ?)\\n //K is nonce, kpriv is private key\\n function ecdsa_sign(bytes32 message, uint256 k , uint256 kpriv) public view returns(uint256 r, uint256 s)\\n {\\n r=ecZZ_mulmuladd_S_asm(0,0, k, 0) ;//Calculate the curve point k.G (abuse ecmulmul add with v=0)\\n r=addmod(0,r, n); \\n s=mulmod(FCL_nModInv(k), addmod(uint256(message), mulmod(r, kpriv, n),n),n);//s=k^-1.(h+r.kpriv)\\n\\n \\n if(r==0||s==0){\\n revert();\\n }\\n\\n\\n }\\n\\n} //EOF\\n\",\"keccak256\":\"0xd6c3e555eae02916f6b9d65db6509d7ddf0fd76d5399e29dbc1502e0b7d992a6\",\"license\":\"MIT\"},\"FreshCryptoLib/utils/Base64Url.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Encode (without '=' padding) \\n * @author evmbrahmin, adapted from hiromin's Base64URL libraries\\n */\\nlibrary Base64Url {\\n /**\\n * @dev Base64Url Encoding Table\\n */\\n string internal constant ENCODING_TABLE =\\n \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\\\";\\n\\n function encode(bytes memory data) internal pure returns (string memory) {\\n if (data.length == 0) return \\\"\\\";\\n\\n // Load the table into memory\\n string memory table = ENCODING_TABLE;\\n\\n string memory result = new string(4 * ((data.length + 2) / 3));\\n\\n // @solidity memory-safe-assembly\\n assembly {\\n let tablePtr := add(table, 1)\\n let resultPtr := add(result, 32)\\n\\n for {\\n let dataPtr := data\\n let endPtr := add(data, mload(data))\\n } lt(dataPtr, endPtr) {\\n\\n } {\\n dataPtr := add(dataPtr, 3)\\n let input := mload(dataPtr)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(18, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(12, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(\\n resultPtr,\\n mload(add(tablePtr, and(shr(6, input), 0x3F)))\\n )\\n resultPtr := add(resultPtr, 1)\\n\\n mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))\\n resultPtr := add(resultPtr, 1)\\n }\\n\\n // Remove the padding adjustment logic\\n switch mod(mload(data), 3)\\n case 1 {\\n // Adjust for the last byte of data\\n resultPtr := sub(resultPtr, 2)\\n }\\n case 2 {\\n // Adjust for the last two bytes of data\\n resultPtr := sub(resultPtr, 1)\\n }\\n \\n // Set the correct length of the result string\\n mstore(result, sub(resultPtr, add(result, 32)))\\n }\\n\\n return result; \\n }\\n}\\n\",\"keccak256\":\"0xc9d5fbb0ef9ff0756eb5aabe7a32b2bf0f8f3c533d4451dd5778fe77aee7f0c1\",\"license\":\"Apache-2.0\"},\"contracts/FCL/WrapperFCLWebAuthn.sol\":{\"content\":\"pragma solidity ^0.8.0;\\n\\nimport {FCL_WebAuthn} from \\\"FreshCryptoLib/FCL_Webauthn.sol\\\";\\n\\n/// @title WrapperFCLWebAuthn\\n/// @notice A library used to verify ECDSA signatures over secp256r1 through\\n/// EIP-1271 of Webauthn payloads.\\n/// @dev This lib is only a wrapper around the FCL_WebAuthn library.\\n/// It is meant to be used with 1271 signatures.\\n/// The wrapping is necessary because the FCL_WebAuthn has only internal\\n/// functions and use calldata. This makes it impossible to use it with\\n/// isValidSignature that use memory.\\nlibrary WrapperFCLWebAuthn {\\n function checkSignature(\\n bytes calldata authenticatorData,\\n bytes1 authenticatorDataFlagMask,\\n bytes calldata clientData,\\n bytes32 clientChallenge,\\n uint256 clientChallengeDataOffset,\\n uint256[2] calldata rs,\\n uint256[2] calldata Q\\n ) external view returns (bool) {\\n return FCL_WebAuthn.checkSignature(\\n authenticatorData,\\n authenticatorDataFlagMask,\\n clientData,\\n clientChallenge,\\n clientChallengeDataOffset,\\n rs,\\n Q\\n );\\n }\\n}\",\"keccak256\":\"0x21b11feafba10e0db2399a46a1d5d30a93c39d0f1c384f43ac43f4988b5d0586\"},\"contracts/P256Signer.sol\":{\"content\":\"pragma solidity ^0.8.0;\\n\\nimport {WrapperFCLWebAuthn} from \\\"./FCL/WrapperFCLWebAuthn.sol\\\";\\n\\n/// @title P256Signer\\n/// @notice A contract used to verify ECDSA signatures over secp256r1 through\\n/// EIP-1271 of Webauthn payloads.\\n/// @dev This contract is the implementation. It is meant to be used through\\n/// proxy clone.\\ncontract P256Signer {\\n /// @notice The EIP-1271 magic value\\n bytes4 internal constant EIP1271_MAGICVALUE = 0x1626ba7e;\\n\\n /// @notice The old EIP-1271 magic value\\n bytes4 internal constant OLD_EIP1271_MAGICVALUE = 0x20c13b0b;\\n\\n /// @notice Whether the contract has been initialized\\n bool public initialized;\\n\\n /// @notice The x coordinate of the secp256r1 public key\\n uint256 public x;\\n\\n /// @notice The y coordinate of the secp256r1 public key\\n uint256 public y;\\n\\n /// @notice Error message when the signature is invalid\\n error InvalidSignature();\\n\\n /// @notice Error message when the hash is invalid\\n error InvalidHash();\\n\\n /// @notice Error message when the contract is already initialized\\n error AlreadyInitialized();\\n\\n constructor() {\\n initialized = true;\\n }\\n\\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\\n /// @param _hash The hash of the data signed\\n /// @param _signature The signature\\n /// @return The EIP-1271 magic value\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view returns (bytes4) {\\n _validate(abi.encode(_hash), _signature);\\n return EIP1271_MAGICVALUE;\\n }\\n\\n /// @notice Verifies that the signer is the owner of the secp256r1 public key.\\n /// @dev This is the old version of the function of EIP-1271 using bytes\\n /// memory instead of bytes32\\n /// @param _hash The hash of the data signed\\n /// @param _signature The signature\\n /// @return The EIP-1271 magic value\\n function isValidSignature(bytes memory _hash, bytes memory _signature) public view returns (bytes4) {\\n _validate(_hash, _signature);\\n return OLD_EIP1271_MAGICVALUE;\\n }\\n\\n /// @notice Validates the signature\\n /// @param data The data signed\\n /// @param _signature The signature\\n function _validate(bytes memory data, bytes memory _signature) private view {\\n bytes32 _hash = keccak256(data);\\n (bytes memory authenticatorData, bytes memory clientData, uint256 challengeOffset, uint256[2] memory rs) =\\n abi.decode(_signature, (bytes, bytes, uint256, uint256[2]));\\n\\n bool valid = WrapperFCLWebAuthn.checkSignature(authenticatorData, 0x01, clientData, _hash, challengeOffset, rs, [x, y]);\\n\\n if (!valid) revert InvalidSignature();\\n }\\n\\n /// @dev This function is only callable once and needs to be called immediately\\n /// after deployment by the factory in the same transaction.\\n /// @param x_ The x coordinate of the public key\\n /// @param y_ The y coordinate of the public key\\n function initialize(uint256 x_, uint256 y_) external {\\n if (initialized) revert AlreadyInitialized();\\n initialized = true;\\n x = x_;\\n y = y_;\\n }\\n}\\n\",\"keccak256\":\"0x1c4a4a8793dd4753832bd31e0a048b87ca2ef9f35b16ee4ee960eca473a4920a\"},\"contracts/P256SignerFactory.sol\":{\"content\":\"pragma solidity ^0.8.0;\\n\\nimport {P256Signer} from \\\"./P256Signer.sol\\\";\\nimport \\\"solady/src/utils/LibClone.sol\\\";\\n\\n/// @title P256SignerFactory\\n/// @notice Factory contract for creating proxies for P256Signer\\ncontract P256SignerFactory {\\n /// @notice The implementation address of the P256Signer contract\\n address public immutable implementation;\\n\\n constructor(address implementation_) {\\n implementation = implementation_;\\n }\\n\\n /// @notice Emitted when a new P256Signer proxy contract is created\\n event NewSignerCreated(uint256 indexed x, uint256 indexed y, address signer);\\n\\n /// @notice Creates a new P256Signer proxy contract\\n /// @param x The x coordinate of the public key\\n /// @param y The y coordinate of the public key\\n function create(uint256 x, uint256 y) external returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(x, y));\\n address signer = LibClone.cloneDeterministic(implementation, salt);\\n P256Signer(signer).initialize(x, y);\\n emit NewSignerCreated(x, y, signer);\\n return signer;\\n }\\n}\\n\",\"keccak256\":\"0x3bdac08bf7a1c4c1621474b10733f74a9487359212705bbca42ec678aa549a53\"},\"solady/src/utils/LibClone.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Minimal proxy library.\\n/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)\\n/// @author Minimal proxy by 0age (https://github.com/0age)\\n/// @author Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie\\n/// (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)\\n///\\n/// @dev Minimal proxy:\\n/// Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime,\\n/// it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern,\\n/// which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.\\n///\\n/// @dev Minimal proxy (PUSH0 variant):\\n/// This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai.\\n/// It is optimized first for minimal runtime gas, then for minimal bytecode.\\n/// The PUSH0 clone functions are intentionally postfixed with a jarring \\\"_PUSH0\\\" as\\n/// many EVM chains may not support the PUSH0 opcode in the early months after Shanghai.\\n/// Please use with caution.\\n///\\n/// @dev Clones with immutable args (CWIA):\\n/// The implementation of CWIA here implements a `receive()` method that emits the\\n/// `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata,\\n/// enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards\\n/// composability. The minimal proxy implementation does not offer this feature.\\nlibrary LibClone {\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* CUSTOM ERRORS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Unable to deploy the clone.\\n error DeploymentFailed();\\n\\n /// @dev The salt must start with either the zero address or the caller.\\n error SaltDoesNotStartWithCaller();\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* MINIMAL PROXY OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a clone of `implementation`.\\n function clone(address implementation) internal returns (address instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n /**\\n * --------------------------------------------------------------------------+\\n * CREATION (9 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * 60 runSize | PUSH1 runSize | r | |\\n * 3d | RETURNDATASIZE | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * --------------------------------------------------------------------------|\\n * RUNTIME (44 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * |\\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | 0 | |\\n * 3d | RETURNDATASIZE | 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 0 0 | |\\n * |\\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 cds 0 0 0 0 | |\\n * 37 | CALLDATACOPY | 0 0 0 0 | [0..cds): calldata |\\n * |\\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | [0..cds): calldata |\\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 0 0 | [0..cds): calldata |\\n * 5a | GAS | gas addr 0 cds 0 0 0 0 | [0..cds): calldata |\\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata |\\n * |\\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata |\\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata |\\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata |\\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\\n * |\\n * 60 0x2a | PUSH1 0x2a | 0x2a success 0 rds | [0..rds): returndata |\\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\\n * |\\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * --------------------------------------------------------------------------+\\n */\\n\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n instance := create(0, 0x0c, 0x35)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Deploys a deterministic clone of `implementation` with `salt`.\\n function cloneDeterministic(address implementation, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n instance := create2(0, 0x0c, 0x35, salt)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the clone of `implementation`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash(address implementation) internal pure returns (bytes32 hash) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n hash := keccak256(0x0c, 0x35)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic clone of `implementation`,\\n /// with `salt` by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(address implementation, bytes32 salt, address deployer)\\n internal\\n pure\\n returns (address predicted)\\n {\\n bytes32 hash = initCodeHash(implementation);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* MINIMAL PROXY OPERATIONS (PUSH0 VARIANT) */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a PUSH0 clone of `implementation`.\\n function clone_PUSH0(address implementation) internal returns (address instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n /**\\n * --------------------------------------------------------------------------+\\n * CREATION (9 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * 60 runSize | PUSH1 runSize | r | |\\n * 5f | PUSH0 | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 5f | PUSH0 | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * --------------------------------------------------------------------------|\\n * RUNTIME (45 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * |\\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\\n * 5f | PUSH0 | 0 | |\\n * 5f | PUSH0 | 0 0 | |\\n * |\\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 | |\\n * 5f | PUSH0 | 0 cds 0 0 | |\\n * 5f | PUSH0 | 0 0 cds 0 0 | |\\n * 37 | CALLDATACOPY | 0 0 | [0..cds): calldata |\\n * |\\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 | [0..cds): calldata |\\n * 5f | PUSH0 | 0 cds 0 0 | [0..cds): calldata |\\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 | [0..cds): calldata |\\n * 5a | GAS | gas addr 0 cds 0 0 | [0..cds): calldata |\\n * f4 | DELEGATECALL | success | [0..cds): calldata |\\n * |\\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success | [0..cds): calldata |\\n * 5f | PUSH0 | 0 rds success | [0..cds): calldata |\\n * 5f | PUSH0 | 0 0 rds success | [0..cds): calldata |\\n * 3e | RETURNDATACOPY | success | [0..rds): returndata |\\n * |\\n * 60 0x29 | PUSH1 0x29 | 0x29 success | [0..rds): returndata |\\n * 57 | JUMPI | | [0..rds): returndata |\\n * |\\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | | [0..rds): returndata |\\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * --------------------------------------------------------------------------+\\n */\\n\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n instance := create(0, 0x0e, 0x36)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Deploys a deterministic PUSH0 clone of `implementation` with `salt`.\\n function cloneDeterministic_PUSH0(address implementation, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n instance := create2(0, 0x0e, 0x36, salt)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the PUSH0 clone of `implementation`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash_PUSH0(address implementation) internal pure returns (bytes32 hash) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n hash := keccak256(0x0e, 0x36)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic PUSH0 clone of `implementation`,\\n /// with `salt` by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress_PUSH0(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n bytes32 hash = initCodeHash_PUSH0(implementation);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* CLONES WITH IMMUTABLE ARGS OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a minimal proxy with `implementation`,\\n /// using immutable arguments encoded in `data`.\\n ///\\n /// Note: This implementation of CWIA differs from the original implementation.\\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\\n function clone(address implementation, bytes memory data) internal returns (address instance) {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n // The `creationSize` is `extraLength + 108`\\n // The `runSize` is `creationSize - 10`.\\n\\n /**\\n * ---------------------------------------------------------------------------------------------------+\\n * CREATION (10 bytes) |\\n * ---------------------------------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * ---------------------------------------------------------------------------------------------------|\\n * 61 runSize | PUSH2 runSize | r | |\\n * 3d | RETURNDATASIZE | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * ---------------------------------------------------------------------------------------------------|\\n * RUNTIME (98 bytes + extraLength) |\\n * ---------------------------------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * ---------------------------------------------------------------------------------------------------|\\n * |\\n * ::: if no calldata, emit event & return w/o `DELEGATECALL` ::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds | |\\n * 60 0x2c | PUSH1 0x2c | 0x2c cds | |\\n * 57 | JUMPI | | |\\n * 34 | CALLVALUE | cv | |\\n * 3d | RETURNDATASIZE | 0 cv | |\\n * 52 | MSTORE | | [0..0x20): callvalue |\\n * 7f sig | PUSH32 0x9e.. | sig | [0..0x20): callvalue |\\n * 59 | MSIZE | 0x20 sig | [0..0x20): callvalue |\\n * 3d | RETURNDATASIZE | 0 0x20 sig | [0..0x20): callvalue |\\n * a1 | LOG1 | | [0..0x20): callvalue |\\n * 00 | STOP | | [0..0x20): callvalue |\\n * 5b | JUMPDEST | | |\\n * |\\n * ::: copy calldata to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds | |\\n * 3d | RETURNDATASIZE | 0 cds | |\\n * 3d | RETURNDATASIZE | 0 0 cds | |\\n * 37 | CALLDATACOPY | | [0..cds): calldata |\\n * |\\n * ::: keep some values in stack :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 0 0 | [0..cds): calldata |\\n * 61 extra | PUSH2 extra | e 0 0 0 0 | [0..cds): calldata |\\n * |\\n * ::: copy extra data to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 80 | DUP1 | e e 0 0 0 0 | [0..cds): calldata |\\n * 60 0x62 | PUSH1 0x62 | 0x62 e e 0 0 0 0 | [0..cds): calldata |\\n * 36 | CALLDATASIZE | cds 0x62 e e 0 0 0 0 | [0..cds): calldata |\\n * 39 | CODECOPY | e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * |\\n * ::: delegate call to the implementation contract ::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 01 | ADD | cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3d | RETURNDATASIZE | 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 73 addr | PUSH20 addr | addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 5a | GAS | gas addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * |\\n * ::: copy return data to memory ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\\n * |\\n * 60 0x60 | PUSH1 0x60 | 0x60 success 0 rds | [0..rds): returndata |\\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\\n * |\\n * ::: revert ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * ---------------------------------------------------------------------------------------------------+\\n */\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\\n // The actual EVM limit may be smaller and may change over time.\\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Create the instance.\\n instance := create(0, sub(data, 0x4c), add(extraLength, 0x6c))\\n\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Deploys a deterministic clone of `implementation`,\\n /// using immutable arguments encoded in `data`, with `salt`.\\n ///\\n /// Note: This implementation of CWIA differs from the original implementation.\\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\\n function cloneDeterministic(address implementation, bytes memory data, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\\n // The actual EVM limit may be smaller and may change over time.\\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Create the instance.\\n instance := create2(0, sub(data, 0x4c), add(extraLength, 0x6c), salt)\\n\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the clone of `implementation`\\n /// using immutable arguments encoded in `data`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash(address implementation, bytes memory data)\\n internal\\n pure\\n returns (bytes32 hash)\\n {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // Do a out-of-gas revert if `dataLength` is too big. 0xffff - 0x02 - 0x62 = 0xff9b.\\n // The actual EVM limit may be smaller and may change over time.\\n returndatacopy(returndatasize(), returndatasize(), gt(dataLength, 0xff9b))\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n sub(data, 0x5a),\\n or(shl(0x78, add(extraLength, 0x62)), 0x6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Compute and store the bytecode hash.\\n hash := keccak256(sub(data, 0x4c), add(extraLength, 0x6c))\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic clone of\\n /// `implementation` using immutable arguments encoded in `data`, with `salt`, by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(\\n address implementation,\\n bytes memory data,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n bytes32 hash = initCodeHash(implementation, data);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* OTHER OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Returns the address when a contract with initialization code hash,\\n /// `hash`, is deployed with `salt`, by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(bytes32 hash, bytes32 salt, address deployer)\\n internal\\n pure\\n returns (address predicted)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // Compute and store the bytecode hash.\\n mstore8(0x00, 0xff) // Write the prefix.\\n mstore(0x35, hash)\\n mstore(0x01, shl(96, deployer))\\n mstore(0x15, salt)\\n predicted := keccak256(0x00, 0x55)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x35, 0)\\n }\\n }\\n\\n /// @dev Reverts if `salt` does not start with either the zero address or the caller.\\n function checkStartsWithCaller(bytes32 salt) internal view {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // If the salt does not start with the zero address or the caller.\\n if iszero(or(iszero(shr(96, salt)), eq(caller(), shr(96, salt)))) {\\n // Store the function selector of `SaltDoesNotStartWithCaller()`.\\n mstore(0x00, 0x2f634836)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x159b64c65da9e6efe93b8df8c6bb1c7672a7511dcaba414aaa3e447f6d7065e6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"NewSignerCreated(uint256,uint256,address)":{"notice":"Emitted when a new P256Signer proxy contract is created"}},"kind":"user","methods":{"create(uint256,uint256)":{"notice":"Creates a new P256Signer proxy contract"},"implementation()":{"notice":"The implementation address of the P256Signer contract"}},"notice":"Factory contract for creating proxies for P256Signer","version":1}}},"solady/src/utils/LibClone.sol":{"LibClone":{"abi":[{"inputs":[],"name":"DeploymentFailed","type":"error"},{"inputs":[],"name":"SaltDoesNotStartWithCaller","type":"error"}],"devdoc":{"author":"Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)Minimal proxy by 0age (https://github.com/0age)Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)","details":"Minimal proxy: Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime, it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern, which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.Minimal proxy (PUSH0 variant): This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai. It is optimized first for minimal runtime gas, then for minimal bytecode. The PUSH0 clone functions are intentionally postfixed with a jarring \"_PUSH0\" as many EVM chains may not support the PUSH0 opcode in the early months after Shanghai. Please use with caution.Clones with immutable args (CWIA): The implementation of CWIA here implements a `receive()` method that emits the `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata, enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards composability. The minimal proxy implementation does not offer this feature.","errors":{"DeploymentFailed()":[{"details":"Unable to deploy the clone."}],"SaltDoesNotStartWithCaller()":[{"details":"The salt must start with either the zero address or the caller."}]},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201b29770ebfd9f20c56f183e6554d507ec6d536d6e6814af6e0744e59bb355dc864736f6c63430008140033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL 0x29 PUSH24 0xEBFD9F20C56F183E6554D507EC6D536D6E6814AF6E0744E MSIZE 0xBB CALLDATALOAD 0x5D 0xC8 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"1500:36285:6:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1500:36285:6;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201b29770ebfd9f20c56f183e6554d507ec6d536d6e6814af6e0744e59bb355dc864736f6c63430008140033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL 0x29 PUSH24 0xEBFD9F20C56F183E6554D507EC6D536D6E6814AF6E0744E MSIZE 0xBB CALLDATALOAD 0x5D 0xC8 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ","sourceMap":"1500:36285:6:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"checkStartsWithCaller(bytes32)":"infinite","clone(address)":"infinite","clone(address,bytes memory)":"infinite","cloneDeterministic(address,bytes memory,bytes32)":"infinite","cloneDeterministic(address,bytes32)":"infinite","cloneDeterministic_PUSH0(address,bytes32)":"infinite","clone_PUSH0(address)":"infinite","initCodeHash(address)":"infinite","initCodeHash(address,bytes memory)":"infinite","initCodeHash_PUSH0(address)":"infinite","predictDeterministicAddress(address,bytes memory,bytes32,address)":"infinite","predictDeterministicAddress(address,bytes32,address)":"infinite","predictDeterministicAddress(bytes32,bytes32,address)":"infinite","predictDeterministicAddress_PUSH0(address,bytes32,address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DeploymentFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SaltDoesNotStartWithCaller\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)Minimal proxy by 0age (https://github.com/0age)Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)\",\"details\":\"Minimal proxy: Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime, it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern, which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.Minimal proxy (PUSH0 variant): This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai. It is optimized first for minimal runtime gas, then for minimal bytecode. The PUSH0 clone functions are intentionally postfixed with a jarring \\\"_PUSH0\\\" as many EVM chains may not support the PUSH0 opcode in the early months after Shanghai. Please use with caution.Clones with immutable args (CWIA): The implementation of CWIA here implements a `receive()` method that emits the `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata, enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards composability. The minimal proxy implementation does not offer this feature.\",\"errors\":{\"DeploymentFailed()\":[{\"details\":\"Unable to deploy the clone.\"}],\"SaltDoesNotStartWithCaller()\":[{\"details\":\"The salt must start with either the zero address or the caller.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Minimal proxy library.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solady/src/utils/LibClone.sol\":\"LibClone\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"solady/src/utils/LibClone.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Minimal proxy library.\\n/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)\\n/// @author Minimal proxy by 0age (https://github.com/0age)\\n/// @author Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie\\n/// (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)\\n///\\n/// @dev Minimal proxy:\\n/// Although the sw0nt pattern saves 5 gas over the erc-1167 pattern during runtime,\\n/// it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern,\\n/// which saves 4 gas over the erc-1167 pattern during runtime, and has the smallest bytecode.\\n///\\n/// @dev Minimal proxy (PUSH0 variant):\\n/// This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai.\\n/// It is optimized first for minimal runtime gas, then for minimal bytecode.\\n/// The PUSH0 clone functions are intentionally postfixed with a jarring \\\"_PUSH0\\\" as\\n/// many EVM chains may not support the PUSH0 opcode in the early months after Shanghai.\\n/// Please use with caution.\\n///\\n/// @dev Clones with immutable args (CWIA):\\n/// The implementation of CWIA here implements a `receive()` method that emits the\\n/// `ReceiveETH(uint256)` event. This skips the `DELEGATECALL` when there is no calldata,\\n/// enabling us to accept hard gas-capped `sends` & `transfers` for maximum backwards\\n/// composability. The minimal proxy implementation does not offer this feature.\\nlibrary LibClone {\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* CUSTOM ERRORS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Unable to deploy the clone.\\n error DeploymentFailed();\\n\\n /// @dev The salt must start with either the zero address or the caller.\\n error SaltDoesNotStartWithCaller();\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* MINIMAL PROXY OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a clone of `implementation`.\\n function clone(address implementation) internal returns (address instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n /**\\n * --------------------------------------------------------------------------+\\n * CREATION (9 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * 60 runSize | PUSH1 runSize | r | |\\n * 3d | RETURNDATASIZE | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * --------------------------------------------------------------------------|\\n * RUNTIME (44 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * |\\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | 0 | |\\n * 3d | RETURNDATASIZE | 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 0 0 | |\\n * |\\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | |\\n * 3d | RETURNDATASIZE | 0 0 cds 0 0 0 0 | |\\n * 37 | CALLDATACOPY | 0 0 0 0 | [0..cds): calldata |\\n * |\\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | [0..cds): calldata |\\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 0 0 | [0..cds): calldata |\\n * 5a | GAS | gas addr 0 cds 0 0 0 0 | [0..cds): calldata |\\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata |\\n * |\\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata |\\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata |\\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata |\\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\\n * |\\n * 60 0x2a | PUSH1 0x2a | 0x2a success 0 rds | [0..rds): returndata |\\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\\n * |\\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * --------------------------------------------------------------------------+\\n */\\n\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n instance := create(0, 0x0c, 0x35)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Deploys a deterministic clone of `implementation` with `salt`.\\n function cloneDeterministic(address implementation, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n instance := create2(0, 0x0c, 0x35, salt)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the clone of `implementation`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash(address implementation) internal pure returns (bytes32 hash) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)\\n mstore(0x14, implementation)\\n mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)\\n hash := keccak256(0x0c, 0x35)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x21, 0)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic clone of `implementation`,\\n /// with `salt` by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(address implementation, bytes32 salt, address deployer)\\n internal\\n pure\\n returns (address predicted)\\n {\\n bytes32 hash = initCodeHash(implementation);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* MINIMAL PROXY OPERATIONS (PUSH0 VARIANT) */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a PUSH0 clone of `implementation`.\\n function clone_PUSH0(address implementation) internal returns (address instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n /**\\n * --------------------------------------------------------------------------+\\n * CREATION (9 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * 60 runSize | PUSH1 runSize | r | |\\n * 5f | PUSH0 | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 5f | PUSH0 | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * --------------------------------------------------------------------------|\\n * RUNTIME (45 bytes) |\\n * --------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * --------------------------------------------------------------------------|\\n * |\\n * ::: keep some values in stack ::::::::::::::::::::::::::::::::::::::::::: |\\n * 5f | PUSH0 | 0 | |\\n * 5f | PUSH0 | 0 0 | |\\n * |\\n * ::: copy calldata to memory ::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 | |\\n * 5f | PUSH0 | 0 cds 0 0 | |\\n * 5f | PUSH0 | 0 0 cds 0 0 | |\\n * 37 | CALLDATACOPY | 0 0 | [0..cds): calldata |\\n * |\\n * ::: delegate call to the implementation contract :::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds 0 0 | [0..cds): calldata |\\n * 5f | PUSH0 | 0 cds 0 0 | [0..cds): calldata |\\n * 73 addr | PUSH20 addr | addr 0 cds 0 0 | [0..cds): calldata |\\n * 5a | GAS | gas addr 0 cds 0 0 | [0..cds): calldata |\\n * f4 | DELEGATECALL | success | [0..cds): calldata |\\n * |\\n * ::: copy return data to memory :::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success | [0..cds): calldata |\\n * 5f | PUSH0 | 0 rds success | [0..cds): calldata |\\n * 5f | PUSH0 | 0 0 rds success | [0..cds): calldata |\\n * 3e | RETURNDATACOPY | success | [0..rds): returndata |\\n * |\\n * 60 0x29 | PUSH1 0x29 | 0x29 success | [0..rds): returndata |\\n * 57 | JUMPI | | [0..rds): returndata |\\n * |\\n * ::: revert :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | | [0..rds): returndata |\\n * 3d | RETURNDATASIZE | rds | [0..rds): returndata |\\n * 5f | PUSH0 | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * --------------------------------------------------------------------------+\\n */\\n\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n instance := create(0, 0x0e, 0x36)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Deploys a deterministic PUSH0 clone of `implementation` with `salt`.\\n function cloneDeterministic_PUSH0(address implementation, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n instance := create2(0, 0x0e, 0x36, salt)\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the PUSH0 clone of `implementation`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash_PUSH0(address implementation) internal pure returns (bytes32 hash) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x24, 0x5af43d5f5f3e6029573d5ffd5b3d5ff3) // 16\\n mstore(0x14, implementation) // 20\\n mstore(0x00, 0x602d5f8160095f39f35f5f365f5f37365f73) // 9 + 9\\n hash := keccak256(0x0e, 0x36)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x24, 0)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic PUSH0 clone of `implementation`,\\n /// with `salt` by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress_PUSH0(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n bytes32 hash = initCodeHash_PUSH0(implementation);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* CLONES WITH IMMUTABLE ARGS OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Deploys a minimal proxy with `implementation`,\\n /// using immutable arguments encoded in `data`.\\n ///\\n /// Note: This implementation of CWIA differs from the original implementation.\\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\\n function clone(address implementation, bytes memory data) internal returns (address instance) {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n // The `creationSize` is `extraLength + 108`\\n // The `runSize` is `creationSize - 10`.\\n\\n /**\\n * ---------------------------------------------------------------------------------------------------+\\n * CREATION (10 bytes) |\\n * ---------------------------------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * ---------------------------------------------------------------------------------------------------|\\n * 61 runSize | PUSH2 runSize | r | |\\n * 3d | RETURNDATASIZE | 0 r | |\\n * 81 | DUP2 | r 0 r | |\\n * 60 offset | PUSH1 offset | o r 0 r | |\\n * 3d | RETURNDATASIZE | 0 o r 0 r | |\\n * 39 | CODECOPY | 0 r | [0..runSize): runtime code |\\n * f3 | RETURN | | [0..runSize): runtime code |\\n * ---------------------------------------------------------------------------------------------------|\\n * RUNTIME (98 bytes + extraLength) |\\n * ---------------------------------------------------------------------------------------------------|\\n * Opcode | Mnemonic | Stack | Memory |\\n * ---------------------------------------------------------------------------------------------------|\\n * |\\n * ::: if no calldata, emit event & return w/o `DELEGATECALL` ::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds | |\\n * 60 0x2c | PUSH1 0x2c | 0x2c cds | |\\n * 57 | JUMPI | | |\\n * 34 | CALLVALUE | cv | |\\n * 3d | RETURNDATASIZE | 0 cv | |\\n * 52 | MSTORE | | [0..0x20): callvalue |\\n * 7f sig | PUSH32 0x9e.. | sig | [0..0x20): callvalue |\\n * 59 | MSIZE | 0x20 sig | [0..0x20): callvalue |\\n * 3d | RETURNDATASIZE | 0 0x20 sig | [0..0x20): callvalue |\\n * a1 | LOG1 | | [0..0x20): callvalue |\\n * 00 | STOP | | [0..0x20): callvalue |\\n * 5b | JUMPDEST | | |\\n * |\\n * ::: copy calldata to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds | |\\n * 3d | RETURNDATASIZE | 0 cds | |\\n * 3d | RETURNDATASIZE | 0 0 cds | |\\n * 37 | CALLDATACOPY | | [0..cds): calldata |\\n * |\\n * ::: keep some values in stack :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 0 | [0..cds): calldata |\\n * 3d | RETURNDATASIZE | 0 0 0 0 | [0..cds): calldata |\\n * 61 extra | PUSH2 extra | e 0 0 0 0 | [0..cds): calldata |\\n * |\\n * ::: copy extra data to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 80 | DUP1 | e e 0 0 0 0 | [0..cds): calldata |\\n * 60 0x62 | PUSH1 0x62 | 0x62 e e 0 0 0 0 | [0..cds): calldata |\\n * 36 | CALLDATASIZE | cds 0x62 e e 0 0 0 0 | [0..cds): calldata |\\n * 39 | CODECOPY | e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * |\\n * ::: delegate call to the implementation contract ::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 36 | CALLDATASIZE | cds e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 01 | ADD | cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3d | RETURNDATASIZE | 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 73 addr | PUSH20 addr | addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 5a | GAS | gas addr 0 cds+e 0 0 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * f4 | DELEGATECALL | success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * |\\n * ::: copy return data to memory ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 3d | RETURNDATASIZE | rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3d | RETURNDATASIZE | rds rds success 0 0 | [0..cds): calldata, [cds..cds+e): extraData |\\n * 93 | SWAP4 | 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\\n * 80 | DUP1 | 0 0 rds success 0 rds | [0..cds): calldata, [cds..cds+e): extraData |\\n * 3e | RETURNDATACOPY | success 0 rds | [0..rds): returndata |\\n * |\\n * 60 0x60 | PUSH1 0x60 | 0x60 success 0 rds | [0..rds): returndata |\\n * 57 | JUMPI | 0 rds | [0..rds): returndata |\\n * |\\n * ::: revert ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * fd | REVERT | | [0..rds): returndata |\\n * |\\n * ::: return ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |\\n * 5b | JUMPDEST | 0 rds | [0..rds): returndata |\\n * f3 | RETURN | | [0..rds): returndata |\\n * ---------------------------------------------------------------------------------------------------+\\n */\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\\n // The actual EVM limit may be smaller and may change over time.\\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Create the instance.\\n instance := create(0, sub(data, 0x4c), add(extraLength, 0x6c))\\n\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Deploys a deterministic clone of `implementation`,\\n /// using immutable arguments encoded in `data`, with `salt`.\\n ///\\n /// Note: This implementation of CWIA differs from the original implementation.\\n /// If the calldata is empty, it will emit a `ReceiveETH(uint256)` event and skip the `DELEGATECALL`.\\n function cloneDeterministic(address implementation, bytes memory data, bytes32 salt)\\n internal\\n returns (address instance)\\n {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n // Do a out-of-gas revert if `extraLength` is too big. 0xffff - 0x62 + 0x01 = 0xff9e.\\n // The actual EVM limit may be smaller and may change over time.\\n sub(data, add(0x59, lt(extraLength, 0xff9e))),\\n or(shl(0x78, add(extraLength, 0x62)), 0xfd6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Create the instance.\\n instance := create2(0, sub(data, 0x4c), add(extraLength, 0x6c), salt)\\n\\n // If `instance` is zero, revert.\\n if iszero(instance) {\\n // Store the function selector of `DeploymentFailed()`.\\n mstore(0x00, 0x30116425)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Returns the initialization code hash of the clone of `implementation`\\n /// using immutable arguments encoded in `data`.\\n /// Used for mining vanity addresses with create2crunch.\\n function initCodeHash(address implementation, bytes memory data)\\n internal\\n pure\\n returns (bytes32 hash)\\n {\\n assembly {\\n // Compute the boundaries of the data and cache the memory slots around it.\\n let mBefore3 := mload(sub(data, 0x60))\\n let mBefore2 := mload(sub(data, 0x40))\\n let mBefore1 := mload(sub(data, 0x20))\\n let dataLength := mload(data)\\n let dataEnd := add(add(data, 0x20), dataLength)\\n let mAfter1 := mload(dataEnd)\\n\\n // Do a out-of-gas revert if `dataLength` is too big. 0xffff - 0x02 - 0x62 = 0xff9b.\\n // The actual EVM limit may be smaller and may change over time.\\n returndatacopy(returndatasize(), returndatasize(), gt(dataLength, 0xff9b))\\n\\n // +2 bytes for telling how much data there is appended to the call.\\n let extraLength := add(dataLength, 2)\\n\\n // Write the bytecode before the data.\\n mstore(data, 0x5af43d3d93803e606057fd5bf3)\\n // Write the address of the implementation.\\n mstore(sub(data, 0x0d), implementation)\\n // Write the rest of the bytecode.\\n mstore(\\n sub(data, 0x21),\\n or(shl(0x48, extraLength), 0x593da1005b363d3d373d3d3d3d610000806062363936013d73)\\n )\\n // `keccak256(\\\"ReceiveETH(uint256)\\\")`\\n mstore(\\n sub(data, 0x3a), 0x9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff\\n )\\n mstore(\\n sub(data, 0x5a),\\n or(shl(0x78, add(extraLength, 0x62)), 0x6100003d81600a3d39f336602c57343d527f)\\n )\\n mstore(dataEnd, shl(0xf0, extraLength))\\n\\n // Compute and store the bytecode hash.\\n hash := keccak256(sub(data, 0x4c), add(extraLength, 0x6c))\\n\\n // Restore the overwritten memory surrounding `data`.\\n mstore(dataEnd, mAfter1)\\n mstore(data, dataLength)\\n mstore(sub(data, 0x20), mBefore1)\\n mstore(sub(data, 0x40), mBefore2)\\n mstore(sub(data, 0x60), mBefore3)\\n }\\n }\\n\\n /// @dev Returns the address of the deterministic clone of\\n /// `implementation` using immutable arguments encoded in `data`, with `salt`, by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(\\n address implementation,\\n bytes memory data,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n bytes32 hash = initCodeHash(implementation, data);\\n predicted = predictDeterministicAddress(hash, salt, deployer);\\n }\\n\\n /*\\u00b4:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0\\u2022.*\\u2022\\u00b4.*:\\u02da.\\u00b0*.\\u02da\\u2022\\u00b4.\\u00b0:\\u00b0\\u2022.\\u00b0+.*\\u2022\\u00b4.*:*/\\n /* OTHER OPERATIONS */\\n /*.\\u2022\\u00b0:\\u00b0.\\u00b4+\\u02da.*\\u00b0.\\u02da:*.\\u00b4\\u2022*.+\\u00b0.\\u2022\\u00b0:\\u00b4*.\\u00b4\\u2022*.\\u2022\\u00b0.\\u2022\\u00b0:\\u00b0.\\u00b4:\\u2022\\u02da\\u00b0.*\\u00b0.\\u02da:*.\\u00b4+\\u00b0.\\u2022*/\\n\\n /// @dev Returns the address when a contract with initialization code hash,\\n /// `hash`, is deployed with `salt`, by `deployer`.\\n /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.\\n function predictDeterministicAddress(bytes32 hash, bytes32 salt, address deployer)\\n internal\\n pure\\n returns (address predicted)\\n {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // Compute and store the bytecode hash.\\n mstore8(0x00, 0xff) // Write the prefix.\\n mstore(0x35, hash)\\n mstore(0x01, shl(96, deployer))\\n mstore(0x15, salt)\\n predicted := keccak256(0x00, 0x55)\\n // Restore the part of the free memory pointer that has been overwritten.\\n mstore(0x35, 0)\\n }\\n }\\n\\n /// @dev Reverts if `salt` does not start with either the zero address or the caller.\\n function checkStartsWithCaller(bytes32 salt) internal view {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // If the salt does not start with the zero address or the caller.\\n if iszero(or(iszero(shr(96, salt)), eq(caller(), shr(96, salt)))) {\\n // Store the function selector of `SaltDoesNotStartWithCaller()`.\\n mstore(0x00, 0x2f634836)\\n // Revert with (offset, size).\\n revert(0x1c, 0x04)\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x159b64c65da9e6efe93b8df8c6bb1c7672a7511dcaba414aaa3e447f6d7065e6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Minimal proxy library.","version":1}}}}}} \ No newline at end of file diff --git a/artifacts/contracts/FCL/WrapperFCLWebAuthn.sol/WrapperFCLWebAuthn.dbg.json b/artifacts/contracts/FCL/WrapperFCLWebAuthn.sol/WrapperFCLWebAuthn.dbg.json deleted file mode 100644 index d05dd2b..0000000 --- a/artifacts/contracts/FCL/WrapperFCLWebAuthn.sol/WrapperFCLWebAuthn.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../../../build-info/fd068d5ca84930c6ffb69a4def64cf81.json" -} diff --git a/artifacts/contracts/FCL/WrapperFCLWebAuthn.sol/WrapperFCLWebAuthn.json b/artifacts/contracts/FCL/WrapperFCLWebAuthn.sol/WrapperFCLWebAuthn.json deleted file mode 100644 index 29f0912..0000000 --- a/artifacts/contracts/FCL/WrapperFCLWebAuthn.sol/WrapperFCLWebAuthn.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "WrapperFCLWebAuthn", - "sourceName": "contracts/FCL/WrapperFCLWebAuthn.sol", - "abi": [ - { - "inputs": [], - "name": "InvalidAuthenticatorData", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidClientData", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "authenticatorData", - "type": "bytes" - }, - { - "internalType": "bytes1", - "name": "authenticatorDataFlagMask", - "type": "bytes1" - }, - { - "internalType": "bytes", - "name": "clientData", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "clientChallenge", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "clientChallengeDataOffset", - "type": "uint256" - }, - { - "internalType": "uint256[2]", - "name": "rs", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "Q", - "type": "uint256[2]" - } - ], - "name": "checkSignature", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x611a3c61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80630d5efec91461003a575b600080fd5b61004d61004836600461179d565b610061565b604051901515815260200160405180910390f35b60006100748a8a8a8a8a8a8a8a8a610082565b9a9950505050505050505050565b6000806100958b8b8b8b8b8b8b8b6100b4565b905060006100a4828686610357565b9c9b505050505050505050505050565b60007fff000000000000000000000000000000000000000000000000000000000000008716878a8a60208181106100ed576100ed61187c565b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610151576040517ffc93479200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061017d8560405160200161016991815260200190565b6040516020818303038152906040526104b9565b90506000815167ffffffffffffffff81111561019b5761019b6118ab565b6040519080825280601f01601f1916602001820160405280156101c5576020820181803683370190505b50905080518589016020830137600081516020830120905080836040516020016101ef91906118da565b604051602081830303815290604052805190602001201461023c576040517febab5d2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000915061024e9050896020611938565b67ffffffffffffffff811115610266576102666118ab565b6040519080825280601f01601f191660200182016040528015610290576020820181803683370190505b509050888a60208301376000600288886040516102ae92919061194b565b602060405180830381855afa1580156102cb573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906102ee919061195b565b90508060208b0183015260028260405161030891906118da565b602060405180830381855afa158015610325573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610348919061195b565b9b9a5050505050505050505050565b60008235602084013581158061038d57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b80610396575080155b806103c157507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518110155b156103d1576000925050506104b2565b833560208501356103e28282610628565b6103f35760009450505050506104b2565b60006103fe846107a1565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828b09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518388099050600061045e86868585610825565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255103820815985050505050505050505b9392505050565b606081516000036104d857505060408051602081019091526000815290565b60006040518060600160405280604081526020016119c760409139905060006003845160026105079190611938565b6105119190611974565b61051c9060046119af565b67ffffffffffffffff811115610534576105346118ab565b6040519080825280601f01601f19166020018201604052801561055e576020820181803683370190505b509050600182016020820185865187015b808210156105ca576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f811685015184535060018301925061056f565b50506003865106600181146105e657600281146105f1576105f8565b6002820391506105f8565b6001820391505b508290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018252509392505050565b600082158061065657507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83145b8061065f575081155b8061068957507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82145b156106965750600061079b565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8208919091149150505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61081e57600080fd5b5192915050565b600080808060ff81808815801561083a575087155b1561084e57600096505050505050506112e6565b61089a7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d6112ee565b8092508193505050600189841c16600189851c1660011b015b806108d55760018403935060018a851c1660018a861c1660011b0190506108b3565b50600189841c16600189851c1660011b01955060018603610937577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603610946578a96508993505b60038603610955578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff111561123c577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080610c4057877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050611231565b60018103610c8f577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610c9e578e93508d92505b60038103610cad578593508492505b89610cc657509198506001975087965094506112319050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d88090893508061102a578361102a577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b82099a50507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050611231565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250610964565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6112b757600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b600080808086611305578585935093505050611343565b84611317578787935093505050611343565b61132688886001808a8a61134c565b929a509098509250905061133c88888484611611565b9350935050505b94509492505050565b6000806000808860000361136b57508492508391506001905080611604565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061161f846116c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61081e57600080fd5b60008083601f84011261175557600080fd5b50813567ffffffffffffffff81111561176d57600080fd5b60208301915083602082850101111561178557600080fd5b9250929050565b806040810183101561079b57600080fd5b60008060008060008060008060006101208a8c0312156117bc57600080fd5b893567ffffffffffffffff808211156117d457600080fd5b6117e08d838e01611743565b909b50995060208c013591507fff000000000000000000000000000000000000000000000000000000000000008216821461181a57600080fd5b90975060408b0135908082111561183057600080fd5b5061183d8c828d01611743565b90975095505060608a0135935060808a0135925061185e8b60a08c0161178c565b915061186d8b60e08c0161178c565b90509295985092959850929598565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000825160005b818110156118fb57602081860181015185830152016118e1565b506000920191825250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561079b5761079b611909565b8183823760009101908152919050565b60006020828403121561196d57600080fd5b5051919050565b6000826119aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761079b5761079b61190956fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa2646970667358221220a5a42b5a5048bdf6322d6fa3052df01e1a197bbb61722775e8f972389e441d9964736f6c63430008140033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80630d5efec91461003a575b600080fd5b61004d61004836600461179d565b610061565b604051901515815260200160405180910390f35b60006100748a8a8a8a8a8a8a8a8a610082565b9a9950505050505050505050565b6000806100958b8b8b8b8b8b8b8b6100b4565b905060006100a4828686610357565b9c9b505050505050505050505050565b60007fff000000000000000000000000000000000000000000000000000000000000008716878a8a60208181106100ed576100ed61187c565b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610151576040517ffc93479200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061017d8560405160200161016991815260200190565b6040516020818303038152906040526104b9565b90506000815167ffffffffffffffff81111561019b5761019b6118ab565b6040519080825280601f01601f1916602001820160405280156101c5576020820181803683370190505b50905080518589016020830137600081516020830120905080836040516020016101ef91906118da565b604051602081830303815290604052805190602001201461023c576040517febab5d2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000915061024e9050896020611938565b67ffffffffffffffff811115610266576102666118ab565b6040519080825280601f01601f191660200182016040528015610290576020820181803683370190505b509050888a60208301376000600288886040516102ae92919061194b565b602060405180830381855afa1580156102cb573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906102ee919061195b565b90508060208b0183015260028260405161030891906118da565b602060405180830381855afa158015610325573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610348919061195b565b9b9a5050505050505050505050565b60008235602084013581158061038d57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b80610396575080155b806103c157507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518110155b156103d1576000925050506104b2565b833560208501356103e28282610628565b6103f35760009450505050506104b2565b60006103fe846107a1565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828b09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518388099050600061045e86868585610825565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255103820815985050505050505050505b9392505050565b606081516000036104d857505060408051602081019091526000815290565b60006040518060600160405280604081526020016119c760409139905060006003845160026105079190611938565b6105119190611974565b61051c9060046119af565b67ffffffffffffffff811115610534576105346118ab565b6040519080825280601f01601f19166020018201604052801561055e576020820181803683370190505b509050600182016020820185865187015b808210156105ca576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f811685015184535060018301925061056f565b50506003865106600181146105e657600281146105f1576105f8565b6002820391506105f8565b6001820391505b508290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018252509392505050565b600082158061065657507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83145b8061065f575081155b8061068957507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82145b156106965750600061079b565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8208919091149150505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61081e57600080fd5b5192915050565b600080808060ff81808815801561083a575087155b1561084e57600096505050505050506112e6565b61089a7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d6112ee565b8092508193505050600189841c16600189851c1660011b015b806108d55760018403935060018a851c1660018a861c1660011b0190506108b3565b50600189841c16600189851c1660011b01955060018603610937577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603610946578a96508993505b60038603610955578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff111561123c577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080610c4057877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050611231565b60018103610c8f577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610c9e578e93508d92505b60038103610cad578593508492505b89610cc657509198506001975087965094506112319050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d88090893508061102a578361102a577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d0890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8260030992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b82099a50507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050611231565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250610964565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6112b757600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b600080808086611305578585935093505050611343565b84611317578787935093505050611343565b61132688886001808a8a61134c565b929a509098509250905061133c88888484611611565b9350935050505b94509492505050565b6000806000808860000361136b57508492508391506001905080611604565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061161f846116c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61081e57600080fd5b60008083601f84011261175557600080fd5b50813567ffffffffffffffff81111561176d57600080fd5b60208301915083602082850101111561178557600080fd5b9250929050565b806040810183101561079b57600080fd5b60008060008060008060008060006101208a8c0312156117bc57600080fd5b893567ffffffffffffffff808211156117d457600080fd5b6117e08d838e01611743565b909b50995060208c013591507fff000000000000000000000000000000000000000000000000000000000000008216821461181a57600080fd5b90975060408b0135908082111561183057600080fd5b5061183d8c828d01611743565b90975095505060608a0135935060808a0135925061185e8b60a08c0161178c565b915061186d8b60e08c0161178c565b90509295985092959850929598565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000825160005b818110156118fb57602081860181015185830152016118e1565b506000920191825250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561079b5761079b611909565b8183823760009101908152919050565b60006020828403121561196d57600080fd5b5051919050565b6000826119aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761079b5761079b61190956fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa2646970667358221220a5a42b5a5048bdf6322d6fa3052df01e1a197bbb61722775e8f972389e441d9964736f6c63430008140033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/artifacts/contracts/P256Signer.sol/P256Signer.dbg.json b/artifacts/contracts/P256Signer.sol/P256Signer.dbg.json index fd31369..2b23791 100644 --- a/artifacts/contracts/P256Signer.sol/P256Signer.dbg.json +++ b/artifacts/contracts/P256Signer.sol/P256Signer.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/fd068d5ca84930c6ffb69a4def64cf81.json" + "buildInfo": "../../build-info/d699b9a3d7351a481d985f908e577701.json" } diff --git a/artifacts/contracts/P256Signer.sol/P256Signer.json b/artifacts/contracts/P256Signer.sol/P256Signer.json index d7ecc31..afb0eda 100644 --- a/artifacts/contracts/P256Signer.sol/P256Signer.json +++ b/artifacts/contracts/P256Signer.sol/P256Signer.json @@ -13,6 +13,16 @@ "name": "AlreadyInitialized", "type": "error" }, + { + "inputs": [], + "name": "InvalidAuthenticatorData", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidClientData", + "type": "error" + }, { "inputs": [], "name": "InvalidHash", @@ -129,26 +139,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506000805460ff191660011790556107c18061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806320c13b0b1161005057806320c13b0b146100f4578063a56dfe4a14610107578063e4a301161461011057600080fd5b80630c55699c14610077578063158ef93e146100935780631626ba7e146100b0575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6000546100a09060ff1681565b604051901515815260200161008a565b6100c36100be366004610475565b610125565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161008a565b6100c36101023660046104bc565b61017a565b61008060025481565b61012361011e366004610516565b6101ae565b005b60006101528360405160200161013d91815260200190565b60405160208183030381529060405283610222565b507f1626ba7e0000000000000000000000000000000000000000000000000000000092915050565b60006101868383610222565b507f20c13b0b0000000000000000000000000000000000000000000000000000000092915050565b60005460ff16156101eb576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591909155600255565b6000828051906020012090506000806000808580602001905181019061024891906105a9565b9350935093509350600073__$d89787f8caa2dcaf364e9349db6aeaba37$__630d5efec9866001878a8888604051806040016040528060015481526020016002548152506040518863ffffffff1660e01b81526004016102ae97969594939291906106da565b602060405180830381865af41580156102cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ef9190610762565b905080610328576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561038457610384610332565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156103d1576103d1610332565b604052919050565b600067ffffffffffffffff8211156103f3576103f3610332565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261043057600080fd5b813561044361043e826103d9565b61038a565b81815284602083860101111561045857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561048857600080fd5b82359150602083013567ffffffffffffffff8111156104a657600080fd5b6104b28582860161041f565b9150509250929050565b600080604083850312156104cf57600080fd5b823567ffffffffffffffff808211156104e757600080fd5b6104f38683870161041f565b9350602085013591508082111561050957600080fd5b506104b28582860161041f565b6000806040838503121561052957600080fd5b50508035926020909101359150565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b600082601f83011261056d57600080fd5b815161057b61043e826103d9565b81815284602083860101111561059057600080fd5b6105a1826020830160208701610538565b949350505050565b60008060008060a085870312156105bf57600080fd5b845167ffffffffffffffff808211156105d757600080fd5b6105e38883890161055c565b95506020915081870151818111156105fa57600080fd5b61060689828a0161055c565b955050506040860151925086607f87011261062057600080fd5b610628610361565b8060a088018981111561063a57600080fd5b606089015b81811015610656578051845292840192840161063f565b505080935050505092959194509250565b6000815180845261067f816020860160208601610538565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8060005b60028110156106d45781518452602093840193909101906001016106b5565b50505050565b60006101208083526106ee8184018b610667565b90507fff000000000000000000000000000000000000000000000000000000000000008960f81b166020840152828103604084015261072d8189610667565b91505085606083015284608083015261074960a08301856106b1565b61075660e08301846106b1565b98975050505050505050565b60006020828403121561077457600080fd5b8151801515811461078457600080fd5b939250505056fea26469706673582212207cd1278d2c8b4857225fb653cc9b5ae2215dc6321928bc580a16e6fac9c293ec64736f6c63430008140033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c806320c13b0b1161005057806320c13b0b146100f4578063a56dfe4a14610107578063e4a301161461011057600080fd5b80630c55699c14610077578063158ef93e146100935780631626ba7e146100b0575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6000546100a09060ff1681565b604051901515815260200161008a565b6100c36100be366004610475565b610125565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161008a565b6100c36101023660046104bc565b61017a565b61008060025481565b61012361011e366004610516565b6101ae565b005b60006101528360405160200161013d91815260200190565b60405160208183030381529060405283610222565b507f1626ba7e0000000000000000000000000000000000000000000000000000000092915050565b60006101868383610222565b507f20c13b0b0000000000000000000000000000000000000000000000000000000092915050565b60005460ff16156101eb576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591909155600255565b6000828051906020012090506000806000808580602001905181019061024891906105a9565b9350935093509350600073__$d89787f8caa2dcaf364e9349db6aeaba37$__630d5efec9866001878a8888604051806040016040528060015481526020016002548152506040518863ffffffff1660e01b81526004016102ae97969594939291906106da565b602060405180830381865af41580156102cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ef9190610762565b905080610328576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561038457610384610332565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156103d1576103d1610332565b604052919050565b600067ffffffffffffffff8211156103f3576103f3610332565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261043057600080fd5b813561044361043e826103d9565b61038a565b81815284602083860101111561045857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561048857600080fd5b82359150602083013567ffffffffffffffff8111156104a657600080fd5b6104b28582860161041f565b9150509250929050565b600080604083850312156104cf57600080fd5b823567ffffffffffffffff808211156104e757600080fd5b6104f38683870161041f565b9350602085013591508082111561050957600080fd5b506104b28582860161041f565b6000806040838503121561052957600080fd5b50508035926020909101359150565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b600082601f83011261056d57600080fd5b815161057b61043e826103d9565b81815284602083860101111561059057600080fd5b6105a1826020830160208701610538565b949350505050565b60008060008060a085870312156105bf57600080fd5b845167ffffffffffffffff808211156105d757600080fd5b6105e38883890161055c565b95506020915081870151818111156105fa57600080fd5b61060689828a0161055c565b955050506040860151925086607f87011261062057600080fd5b610628610361565b8060a088018981111561063a57600080fd5b606089015b81811015610656578051845292840192840161063f565b505080935050505092959194509250565b6000815180845261067f816020860160208601610538565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8060005b60028110156106d45781518452602093840193909101906001016106b5565b50505050565b60006101208083526106ee8184018b610667565b90507fff000000000000000000000000000000000000000000000000000000000000008960f81b166020840152828103604084015261072d8189610667565b91505085606083015284608083015261074960a08301856106b1565b61075660e08301846106b1565b98975050505050505050565b60006020828403121561077457600080fd5b8151801515811461078457600080fd5b939250505056fea26469706673582212207cd1278d2c8b4857225fb653cc9b5ae2215dc6321928bc580a16e6fac9c293ec64736f6c63430008140033", - "linkReferences": { - "contracts/FCL/WrapperFCLWebAuthn.sol": { - "WrapperFCLWebAuthn": [ - { - "length": 20, - "start": 641 - } - ] - } - }, - "deployedLinkReferences": { - "contracts/FCL/WrapperFCLWebAuthn.sol": { - "WrapperFCLWebAuthn": [ - { - "length": 20, - "start": 596 - } - ] - } - } + "bytecode": "0x608060405234801561001057600080fd5b506000805460ff1916600117905561204b8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806320c13b0b1161005057806320c13b0b146100f4578063a56dfe4a14610107578063e4a301161461011057600080fd5b80630c55699c14610077578063158ef93e146100935780631626ba7e146100b0575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6000546100a09060ff1681565b604051901515815260200161008a565b6100c36100be366004611cb9565b610125565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161008a565b6100c3610102366004611d34565b61017c565b61008060025481565b61012361011e366004611e20565b6101b2565b005b60006101538460405160200161013d91815260200190565b6040516020818303038152906040528484610226565b507f1626ba7e000000000000000000000000000000000000000000000000000000009392505050565b6000610189848484610226565b507f20c13b0b000000000000000000000000000000000000000000000000000000009392505050565b60005460ff16156101ef576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591909155600255565b8251602084012082600061028061023d8380611e42565b7f010000000000000000000000000000000000000000000000000000000000000061026b6020870187611e42565b888860400135896060016001546002546102c1565b9050806102b9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000806102d48c8c8c8c8c8c8c8c6102f5565b905060006102e482878787610598565b9d9c50505050505050505050505050565b60007fff000000000000000000000000000000000000000000000000000000000000008716878a8a602081811061032e5761032e611ea7565b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610392576040517ffc93479200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006103be856040516020016103aa91815260200190565b6040516020818303038152906040526106f7565b90506000815167ffffffffffffffff8111156103dc576103dc611d05565b6040519080825280601f01601f191660200182016040528015610406576020820181803683370190505b50905080518589016020830137600081516020830120905080836040516020016104309190611ed6565b604051602081830303815290604052805190602001201461047d576040517febab5d2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000915061048f9050896020611f34565b67ffffffffffffffff8111156104a7576104a7611d05565b6040519080825280601f01601f1916602001820160405280156104d1576020820181803683370190505b509050888a60208301376000600288886040516104ef929190611f47565b602060405180830381855afa15801561050c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061052f9190611f57565b90508060208b018301526002826040516105499190611ed6565b602060405180830381855afa158015610566573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105899190611f57565b9b9a5050505050505050505050565b6000833560208501358115806105ce57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b806105d7575080155b8061060257507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518110155b15610612576000925050506106ef565b61061c8585610866565b61062b576000925050506106ef565b6000610636826109e0565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828a09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518386099050600061069689898585610a64565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516106e3877fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551611f70565b82081596505050505050505b949350505050565b6060815160000361071657505060408051602081019091526000815290565b6000604051806060016040528060408152602001611fd660409139905060006003845160026107459190611f34565b61074f9190611f83565b61075a906004611fbe565b67ffffffffffffffff81111561077257610772611d05565b6040519080825280601f01601f19166020018201604052801561079c576020820181803683370190505b509050600182016020820185865187015b80821015610808576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506107ad565b5050600386510660018114610824576002811461082f57610836565b600282039150610836565b6001820391505b508290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018252509392505050565b600082158015610874575081155b8061089e57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83145b806108c857507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82145b156108d5575060006109da565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8208919091149150505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa610a5d57600080fd5b5192915050565b600080808060ff818088158015610a79575087155b15610a8d57600096505050505050506106ef565b610ad97f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611561565b909250905081158015610aea575080155b15610b3c577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a089850600097505b600189841c16600189851c1660011b015b80610b6f5760018403935060018a851c1660018a861c1660011b019050610b4d565b50600189841c16600189851c1660011b01955060018603610bd1577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603610be0578a96508993505b60038603610bef578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11156114b1577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080610eda57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff039750505050506114a6565b60018103610f29577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610f38578e93508d92505b60038103610f47578593508492505b89610f6057509198506001975087965094506114a69050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d88090893508061129f578361129f577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a87098508985050505050506114a6565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250610bfe565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61152c57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099c9b505050505050505050505050565b6000808080866115785785859350935050506115e6565b8461158a5787879350935050506115e6565b858814801561159857508487145b156115b9576115aa88886001806115ef565b929a50909850925090506115d3565b6115c888886001808a8a611879565b929a50909850925090505b6115df88888484611b3e565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361189857508492508391506001905080611b31565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b6000806000611b4c84611bf3565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa610a5d57600080fd5b60008083601f840112611c8257600080fd5b50813567ffffffffffffffff811115611c9a57600080fd5b602083019150836020828501011115611cb257600080fd5b9250929050565b600080600060408486031215611cce57600080fd5b83359250602084013567ffffffffffffffff811115611cec57600080fd5b611cf886828701611c70565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060408486031215611d4957600080fd5b833567ffffffffffffffff80821115611d6157600080fd5b818601915086601f830112611d7557600080fd5b813581811115611d8757611d87611d05565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611dcd57611dcd611d05565b81604052828152896020848701011115611de657600080fd5b826020860160208301376000602084830101528097505050506020860135915080821115611e1357600080fd5b50611cf886828701611c70565b60008060408385031215611e3357600080fd5b50508035926020909101359150565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611e7757600080fd5b83018035915067ffffffffffffffff821115611e9257600080fd5b602001915036819003821315611cb257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000825160005b81811015611ef75760208186018101518583015201611edd565b506000920191825250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156109da576109da611f05565b8183823760009101908152919050565b600060208284031215611f6957600080fd5b5051919050565b818103818111156109da576109da611f05565b600082611fb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820281158282048414176109da576109da611f0556fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa264697066735822122010b19bcb302b393f0f07ede9ec3810838497a4931544263dc93726e735cb3b0e64736f6c63430008140033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c806320c13b0b1161005057806320c13b0b146100f4578063a56dfe4a14610107578063e4a301161461011057600080fd5b80630c55699c14610077578063158ef93e146100935780631626ba7e146100b0575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6000546100a09060ff1681565b604051901515815260200161008a565b6100c36100be366004611cb9565b610125565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161008a565b6100c3610102366004611d34565b61017c565b61008060025481565b61012361011e366004611e20565b6101b2565b005b60006101538460405160200161013d91815260200190565b6040516020818303038152906040528484610226565b507f1626ba7e000000000000000000000000000000000000000000000000000000009392505050565b6000610189848484610226565b507f20c13b0b000000000000000000000000000000000000000000000000000000009392505050565b60005460ff16156101ef576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591909155600255565b8251602084012082600061028061023d8380611e42565b7f010000000000000000000000000000000000000000000000000000000000000061026b6020870187611e42565b888860400135896060016001546002546102c1565b9050806102b9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000806102d48c8c8c8c8c8c8c8c6102f5565b905060006102e482878787610598565b9d9c50505050505050505050505050565b60007fff000000000000000000000000000000000000000000000000000000000000008716878a8a602081811061032e5761032e611ea7565b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610392576040517ffc93479200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006103be856040516020016103aa91815260200190565b6040516020818303038152906040526106f7565b90506000815167ffffffffffffffff8111156103dc576103dc611d05565b6040519080825280601f01601f191660200182016040528015610406576020820181803683370190505b50905080518589016020830137600081516020830120905080836040516020016104309190611ed6565b604051602081830303815290604052805190602001201461047d576040517febab5d2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000915061048f9050896020611f34565b67ffffffffffffffff8111156104a7576104a7611d05565b6040519080825280601f01601f1916602001820160405280156104d1576020820181803683370190505b509050888a60208301376000600288886040516104ef929190611f47565b602060405180830381855afa15801561050c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061052f9190611f57565b90508060208b018301526002826040516105499190611ed6565b602060405180830381855afa158015610566573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105899190611f57565b9b9a5050505050505050505050565b6000833560208501358115806105ce57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518210155b806105d7575080155b8061060257507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518110155b15610612576000925050506106ef565b61061c8585610866565b61062b576000925050506106ef565b6000610636826109e0565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828a09905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518386099050600061069689898585610a64565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516106e3877fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551611f70565b82081596505050505050505b949350505050565b6060815160000361071657505060408051602081019091526000815290565b6000604051806060016040528060408152602001611fd660409139905060006003845160026107459190611f34565b61074f9190611f83565b61075a906004611fbe565b67ffffffffffffffff81111561077257610772611d05565b6040519080825280601f01601f19166020018201604052801561079c576020820181803683370190505b509050600182016020820185865187015b80821015610808576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506107ad565b5050600386510660018114610824576002811461082f57610836565b600282039150610836565b6001820391505b508290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018252509392505050565b600082158015610874575081155b8061089e57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83145b806108c857507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82145b156108d5575060006109da565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8208919091149150505b92915050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa610a5d57600080fd5b5192915050565b600080808060ff818088158015610a79575087155b15610a8d57600096505050505050506106ef565b610ad97f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d611561565b909250905081158015610aea575080155b15610b3c577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a089850600097505b600189841c16600189851c1660011b015b80610b6f5760018403935060018a851c1660018a861c1660011b019050610b4d565b50600189841c16600189851c1660011b01955060018603610bd1577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603610be0578a96508993505b60038603610bef578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11156114b1577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080610eda57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff039750505050506114a6565b60018103610f29577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610f38578e93508d92505b60038103610f47578593508492505b89610f6057509198506001975087965094506114a69050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d88090893508061129f578361129f577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a87098508985050505050506114a6565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b600183039250610bfe565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61152c57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099c9b505050505050505050505050565b6000808080866115785785859350935050506115e6565b8461158a5787879350935050506115e6565b858814801561159857508487145b156115b9576115aa88886001806115ef565b929a50909850925090506115d3565b6115c888886001808a8a611879565b929a50909850925090505b6115df88888484611b3e565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361189857508492508391506001905080611b31565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b6000806000611b4c84611bf3565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa610a5d57600080fd5b60008083601f840112611c8257600080fd5b50813567ffffffffffffffff811115611c9a57600080fd5b602083019150836020828501011115611cb257600080fd5b9250929050565b600080600060408486031215611cce57600080fd5b83359250602084013567ffffffffffffffff811115611cec57600080fd5b611cf886828701611c70565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060408486031215611d4957600080fd5b833567ffffffffffffffff80821115611d6157600080fd5b818601915086601f830112611d7557600080fd5b813581811115611d8757611d87611d05565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611dcd57611dcd611d05565b81604052828152896020848701011115611de657600080fd5b826020860160208301376000602084830101528097505050506020860135915080821115611e1357600080fd5b50611cf886828701611c70565b60008060408385031215611e3357600080fd5b50508035926020909101359150565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611e7757600080fd5b83018035915067ffffffffffffffff821115611e9257600080fd5b602001915036819003821315611cb257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000825160005b81811015611ef75760208186018101518583015201611edd565b506000920191825250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156109da576109da611f05565b8183823760009101908152919050565b600060208284031215611f6957600080fd5b5051919050565b818103818111156109da576109da611f05565b600082611fb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820281158282048414176109da576109da611f0556fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa264697066735822122010b19bcb302b393f0f07ede9ec3810838497a4931544263dc93726e735cb3b0e64736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} } diff --git a/artifacts/contracts/P256SignerFactory.sol/P256SignerFactory.dbg.json b/artifacts/contracts/P256SignerFactory.sol/P256SignerFactory.dbg.json index fd31369..2b23791 100644 --- a/artifacts/contracts/P256SignerFactory.sol/P256SignerFactory.dbg.json +++ b/artifacts/contracts/P256SignerFactory.sol/P256SignerFactory.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/fd068d5ca84930c6ffb69a4def64cf81.json" + "buildInfo": "../../build-info/d699b9a3d7351a481d985f908e577701.json" } diff --git a/artifacts/contracts/P256SignerFactory.sol/P256SignerFactory.json b/artifacts/contracts/P256SignerFactory.sol/P256SignerFactory.json index 51207c0..f3db7b8 100644 --- a/artifacts/contracts/P256SignerFactory.sol/P256SignerFactory.json +++ b/artifacts/contracts/P256SignerFactory.sol/P256SignerFactory.json @@ -77,8 +77,8 @@ "type": "function" } ], - "bytecode": "0x60a060405234801561001057600080fd5b5060405161031a38038061031a83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161028a610090600039600081816040015260d7015261028a6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80635c60da1b1461003b5780639f7b45791461008b575b600080fd5b6100627f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b610062610099366004610232565b60008083836040516020016100b8929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006100fc7f0000000000000000000000000000000000000000000000000000000000000000836101db565b6040517fe4a30116000000000000000000000000000000000000000000000000000000008152600481018790526024810186905290915073ffffffffffffffffffffffffffffffffffffffff82169063e4a3011690604401600060405180830381600087803b15801561016e57600080fd5b505af1158015610182573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681528692508791507f33b61205835e3063eb8935cac4b29d7fc333ad80d6cb11893ba4758adf8cdde19060200160405180910390a3949350505050565b60006c5af43d3d93803e602a57fd5bf36021528260145273602c3d8160093d39f33d3d3d3d363d3d37363d73600052816035600c6000f59050806102275763301164256000526004601cfd5b600060215292915050565b6000806040838503121561024557600080fd5b5050803592602090910135915056fea2646970667358221220d58b58802d5c7747f06cdad3d5dae1daf849ad475c9f80c8a469c68e8b50b75264736f6c63430008140033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80635c60da1b1461003b5780639f7b45791461008b575b600080fd5b6100627f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b610062610099366004610232565b60008083836040516020016100b8929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006100fc7f0000000000000000000000000000000000000000000000000000000000000000836101db565b6040517fe4a30116000000000000000000000000000000000000000000000000000000008152600481018790526024810186905290915073ffffffffffffffffffffffffffffffffffffffff82169063e4a3011690604401600060405180830381600087803b15801561016e57600080fd5b505af1158015610182573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681528692508791507f33b61205835e3063eb8935cac4b29d7fc333ad80d6cb11893ba4758adf8cdde19060200160405180910390a3949350505050565b60006c5af43d3d93803e602a57fd5bf36021528260145273602c3d8160093d39f33d3d3d3d363d3d37363d73600052816035600c6000f59050806102275763301164256000526004601cfd5b600060215292915050565b6000806040838503121561024557600080fd5b5050803592602090910135915056fea2646970667358221220d58b58802d5c7747f06cdad3d5dae1daf849ad475c9f80c8a469c68e8b50b75264736f6c63430008140033", + "bytecode": "0x60a060405234801561001057600080fd5b5060405161031a38038061031a83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161028a610090600039600081816040015260d7015261028a6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80635c60da1b1461003b5780639f7b45791461008b575b600080fd5b6100627f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b610062610099366004610232565b60008083836040516020016100b8929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006100fc7f0000000000000000000000000000000000000000000000000000000000000000836101db565b6040517fe4a30116000000000000000000000000000000000000000000000000000000008152600481018790526024810186905290915073ffffffffffffffffffffffffffffffffffffffff82169063e4a3011690604401600060405180830381600087803b15801561016e57600080fd5b505af1158015610182573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681528692508791507f33b61205835e3063eb8935cac4b29d7fc333ad80d6cb11893ba4758adf8cdde19060200160405180910390a3949350505050565b60006c5af43d3d93803e602a57fd5bf36021528260145273602c3d8160093d39f33d3d3d3d363d3d37363d73600052816035600c6000f59050806102275763301164256000526004601cfd5b600060215292915050565b6000806040838503121561024557600080fd5b5050803592602090910135915056fea264697066735822122071f53aa036351be28c2415d8e5721596cc980c32c199aac9af70658e7c86902d64736f6c63430008140033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80635c60da1b1461003b5780639f7b45791461008b575b600080fd5b6100627f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b610062610099366004610232565b60008083836040516020016100b8929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006100fc7f0000000000000000000000000000000000000000000000000000000000000000836101db565b6040517fe4a30116000000000000000000000000000000000000000000000000000000008152600481018790526024810186905290915073ffffffffffffffffffffffffffffffffffffffff82169063e4a3011690604401600060405180830381600087803b15801561016e57600080fd5b505af1158015610182573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681528692508791507f33b61205835e3063eb8935cac4b29d7fc333ad80d6cb11893ba4758adf8cdde19060200160405180910390a3949350505050565b60006c5af43d3d93803e602a57fd5bf36021528260145273602c3d8160093d39f33d3d3d3d363d3d37363d73600052816035600c6000f59050806102275763301164256000526004601cfd5b600060215292915050565b6000806040838503121561024557600080fd5b5050803592602090910135915056fea264697066735822122071f53aa036351be28c2415d8e5721596cc980c32c199aac9af70658e7c86902d64736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/solady/src/utils/LibClone.sol/LibClone.dbg.json b/artifacts/solady/src/utils/LibClone.sol/LibClone.dbg.json index 43ce112..e493996 100644 --- a/artifacts/solady/src/utils/LibClone.sol/LibClone.dbg.json +++ b/artifacts/solady/src/utils/LibClone.sol/LibClone.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/fd068d5ca84930c6ffb69a4def64cf81.json" + "buildInfo": "../../../../build-info/d699b9a3d7351a481d985f908e577701.json" } diff --git a/lib/forge-std b/lib/forge-std index 155d547..87a2a0a 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit 155d547c449afa8715f538d69454b83944117811 +Subproject commit 87a2a0afc5fafd6297538a45a52ac19e71a84562 diff --git a/test/hardhat/safe.test.js b/test/hardhat/safe.test.js index c7a727a..94fa186 100644 --- a/test/hardhat/safe.test.js +++ b/test/hardhat/safe.test.js @@ -9,15 +9,7 @@ describe("Gnosis Safe", function () { it('should deploy a Safe, add a p256 signer and verify a signature with Webauthn', async () => { const signer = await ethers.getImpersonatedSigner('0xb908ca274f85c4732640aaf44a99543ab63c7626'); - const WrapperFCLWebAuthn = await ethers.getContractFactory("WrapperFCLWebAuthn"); - const wrapperFCLWebAuthn = await WrapperFCLWebAuthn.connect(signer).deploy(); - await wrapperFCLWebAuthn.waitForDeployment(); - - const P256SignerImplementationFactory = await ethers.getContractFactory("P256Signer", { - libraries: { - WrapperFCLWebAuthn: await wrapperFCLWebAuthn.getAddress() - } - }); + const P256SignerImplementationFactory = await ethers.getContractFactory("P256Signer"); const implementation = await P256SignerImplementationFactory.connect(signer).deploy(); await implementation.waitForDeployment();