Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save erikside/aad4c4907a95263291baae1ddfe0f134 to your computer and use it in GitHub Desktop.

Select an option

Save erikside/aad4c4907a95263291baae1ddfe0f134 to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.26+commit.8a97fa7a.js&optimize=false&runs=200&gist=
{
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {
revert(0, 0)
}
function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {
revert(0, 0)
}
function cleanup_t_uint256(value) -> cleaned {
cleaned := value
}
function validator_revert_t_uint256(value) {
if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }
}
function abi_decode_t_uint256(offset, end) -> value {
value := calldataload(offset)
validator_revert_t_uint256(value)
}
function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1 {
if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }
{
let offset := 0
value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)
}
{
let offset := 32
value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)
}
}
function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {
mstore(pos, cleanup_t_uint256(value))
}
function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart , value0) -> tail {
tail := add(headStart, 32)
abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))
}
function panic_error_0x11() {
mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)
mstore(4, 0x11)
revert(0, 0x24)
}
function checked_mul_t_uint256(x, y) -> product {
x := cleanup_t_uint256(x)
y := cleanup_t_uint256(y)
let product_raw := mul(x, y)
product := cleanup_t_uint256(product_raw)
// overflow, if x != 0 and y != product/x
if iszero(
or(
iszero(x),
eq(y, div(product, x))
)
) { panic_error_0x11() }
}
}
{
"id": "8924981611d200df0120921463af1a1c",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.25",
"solcLongVersion": "0.8.25+commit.b61c2a91",
"input": {
"language": "Yul",
"sources": {
".debugger/generated-sources/#utility.yul": {
"content": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n let product_raw := mul(x, y)\n product := cleanup_t_uint256(product_raw)\n\n // overflow, if x != 0 and y != product/x\n if iszero(\n or(\n iszero(x),\n eq(y, div(product, x))\n )\n ) { panic_error_0x11() }\n\n }\n\n}\n"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
},
"remappings": []
}
},
"output": {
"contracts": {
".debugger/generated-sources/#utility.yul": {
"object": {
"evm": {
"assembly": " /* \".debugger/generated-sources/#utility.yul\":0:2145 */\n stop\n",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "00",
"opcodes": "STOP ",
"sourceMap": "0:2145:0:-:0"
}
},
"abi": [
{
"payable": true,
"stateMutability": "payable",
"type": "fallback"
}
]
}
}
},
"errors": []
}
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "00",
"opcodes": "STOP ",
"sourceMap": "0:2145:0:-:0"
}
},
"abi": [
{
"payable": true,
"stateMutability": "payable",
"type": "fallback"
}
]
}
{
"accounts": {
"account{0}": "0x5B38Da6a701c568545dCfcB03FcB875f56beddC4"
},
"linkReferences": {
"ConvertLib": "<address>"
},
"transactions": [
{
"timestamp": 1717310298087,
"record": {
"value": "0",
"inputs": "()",
"parameters": [],
"type": "constructor",
"abi": "0x8a6aef97b8c57f261fa026dfef6c7565967ed9183868f366e1ae26d0fcef3eb0",
"contractName": "ConvertLib",
"bytecode": "60e0610033600b8282823980515f1a607314602757634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106032575f3560e01c806396e4ee3d146036575b5f80fd5b604560413660046069565b6057565b60405190815260200160405180910390f35b5f606082846088565b90505b92915050565b5f80604083850312156079575f80fd5b50508035926020909101359150565b8082028115828204841417606357634e487b7160e01b5f52601160045260245ffdfea2646970667358221220e0b88e07960471b8d3216c5887488fd52207db39235523b1a19739e145123bdf64736f6c63430008190033",
"from": "account{0}"
}
},
{
"timestamp": 1717310298227,
"record": {
"value": "0",
"inputs": "()",
"parameters": [],
"name": "",
"type": "constructor",
"abi": "0x1763330a29c9c5ee6c53e5757abbfcedae51803103bd53fbcb450be42134dfa0",
"contractName": "MetaCoin",
"bytecode": "6080604052348015600e575f80fd5b50325f90815260208190526040902061271090556102f78061002f5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c80637bd703e81461004357806390b98a1114610069578063f8b2cb4f1461008c575b5f80fd5b610056610051366004610228565b6100b4565b6040519081526020015b60405180910390f35b61007c610077366004610248565b610158565b6040519015158152602001610060565b61005661009a366004610228565b6001600160a01b03165f9081526020819052604090205490565b5f73__$c1e9661f796f9214b5c8076e394fd5a419$__6396e4ee3d6100ed846001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e084901b168152600481019190915260026024820152604401602060405180830381865af415801561012e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101529190610270565b92915050565b335f9081526020819052604081205482111561017557505f610152565b335f908152602081905260408120805484929061019390849061029b565b90915550506001600160a01b0383165f90815260208190526040812080548492906101bf9084906102ae565b90915550506040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b80356001600160a01b0381168114610223575f80fd5b919050565b5f60208284031215610238575f80fd5b6102418261020d565b9392505050565b5f8060408385031215610259575f80fd5b6102628361020d565b946020939093013593505050565b5f60208284031215610280575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561015257610152610287565b808201808211156101525761015261028756fea26469706673582212205fcf9fa0c59eb9bf755b29ef9ce40160348aeb4eb46cc30ae2c03fd2e5fbdb6d64736f6c63430008190033",
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": [
{
"length": 20,
"start": 230
}
]
}
},
"from": "account{0}"
}
},
{
"timestamp": 1717310353576,
"record": {
"value": "0",
"inputs": "(address,uint256)",
"parameters": [
"0xA7980f1456E182B794a05789d74C4c531a9D4547",
"100000000000"
],
"name": "sendCoin",
"type": "function",
"to": "created{1717310298227}",
"abi": "0x1763330a29c9c5ee6c53e5757abbfcedae51803103bd53fbcb450be42134dfa0",
"from": "account{0}"
}
},
{
"timestamp": 1717310372620,
"record": {
"value": "0",
"inputs": "(address,uint256)",
"parameters": [
"0xA7980f1456E182B794a05789d74C4c531a9D4547",
"100000000000"
],
"name": "sendCoin",
"type": "function",
"to": "created{1717310298227}",
"abi": "0x1763330a29c9c5ee6c53e5757abbfcedae51803103bd53fbcb450be42134dfa0",
"from": "account{0}"
}
},
{
"timestamp": 1717310389773,
"record": {
"value": "0",
"inputs": "()",
"parameters": [],
"name": "",
"type": "constructor",
"abi": "0xac7ee96d8322143cf19be5db3c8327ad1971b21b6b14f98c4818c4afed7db37a",
"contractName": "object",
"bytecode": "00",
"linkReferences": {},
"from": "account{0}"
}
}
],
"abis": {
"0x8a6aef97b8c57f261fa026dfef6c7565967ed9183868f366e1ae26d0fcef3eb0": [
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "conversionRate",
"type": "uint256"
}
],
"name": "convert",
"outputs": [
{
"internalType": "uint256",
"name": "convertedAmount",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"0x1763330a29c9c5ee6c53e5757abbfcedae51803103bd53fbcb450be42134dfa0": [
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "sendCoin",
"outputs": [
{
"internalType": "bool",
"name": "sufficient",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalanceInEth",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
"0xac7ee96d8322143cf19be5db3c8327ad1971b21b6b14f98c4818c4afed7db37a": [
{
"payable": true,
"stateMutability": "payable",
"type": "fallback"
}
]
}
}
{
"accounts": {
"account{0}": "0x5B38Da6a701c568545dCfcB03FcB875f56beddC4"
},
"linkReferences": {
"ConvertLib": "<address>"
},
"transactions": [
{
"timestamp": 1717310298087,
"record": {
"value": "0",
"inputs": "()",
"parameters": [],
"type": "constructor",
"abi": "0x8a6aef97b8c57f261fa026dfef6c7565967ed9183868f366e1ae26d0fcef3eb0",
"contractName": "ConvertLib",
"bytecode": "60e0610033600b8282823980515f1a607314602757634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106032575f3560e01c806396e4ee3d146036575b5f80fd5b604560413660046069565b6057565b60405190815260200160405180910390f35b5f606082846088565b90505b92915050565b5f80604083850312156079575f80fd5b50508035926020909101359150565b8082028115828204841417606357634e487b7160e01b5f52601160045260245ffdfea2646970667358221220e0b88e07960471b8d3216c5887488fd52207db39235523b1a19739e145123bdf64736f6c63430008190033",
"from": "account{0}"
}
},
{
"timestamp": 1717310298227,
"record": {
"value": "0",
"inputs": "()",
"parameters": [],
"name": "",
"type": "constructor",
"abi": "0x1763330a29c9c5ee6c53e5757abbfcedae51803103bd53fbcb450be42134dfa0",
"contractName": "MetaCoin",
"bytecode": "6080604052348015600e575f80fd5b50325f90815260208190526040902061271090556102f78061002f5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c80637bd703e81461004357806390b98a1114610069578063f8b2cb4f1461008c575b5f80fd5b610056610051366004610228565b6100b4565b6040519081526020015b60405180910390f35b61007c610077366004610248565b610158565b6040519015158152602001610060565b61005661009a366004610228565b6001600160a01b03165f9081526020819052604090205490565b5f73__$c1e9661f796f9214b5c8076e394fd5a419$__6396e4ee3d6100ed846001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e084901b168152600481019190915260026024820152604401602060405180830381865af415801561012e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101529190610270565b92915050565b335f9081526020819052604081205482111561017557505f610152565b335f908152602081905260408120805484929061019390849061029b565b90915550506001600160a01b0383165f90815260208190526040812080548492906101bf9084906102ae565b90915550506040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b80356001600160a01b0381168114610223575f80fd5b919050565b5f60208284031215610238575f80fd5b6102418261020d565b9392505050565b5f8060408385031215610259575f80fd5b6102628361020d565b946020939093013593505050565b5f60208284031215610280575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561015257610152610287565b808201808211156101525761015261028756fea26469706673582212205fcf9fa0c59eb9bf755b29ef9ce40160348aeb4eb46cc30ae2c03fd2e5fbdb6d64736f6c63430008190033",
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": [
{
"length": 20,
"start": 230
}
]
}
},
"from": "account{0}"
}
},
{
"timestamp": 1717310353576,
"record": {
"value": "0",
"inputs": "(address,uint256)",
"parameters": [
"0xA7980f1456E182B794a05789d74C4c531a9D4547",
"100000000000"
],
"name": "sendCoin",
"type": "function",
"to": "created{1717310298227}",
"abi": "0x1763330a29c9c5ee6c53e5757abbfcedae51803103bd53fbcb450be42134dfa0",
"from": "account{0}"
}
},
{
"timestamp": 1717310372620,
"record": {
"value": "0",
"inputs": "(address,uint256)",
"parameters": [
"0xA7980f1456E182B794a05789d74C4c531a9D4547",
"100000000000"
],
"name": "sendCoin",
"type": "function",
"to": "created{1717310298227}",
"abi": "0x1763330a29c9c5ee6c53e5757abbfcedae51803103bd53fbcb450be42134dfa0",
"from": "account{0}"
}
},
{
"timestamp": 1717310389773,
"record": {
"value": "0",
"inputs": "()",
"parameters": [],
"name": "",
"type": "constructor",
"abi": "0xac7ee96d8322143cf19be5db3c8327ad1971b21b6b14f98c4818c4afed7db37a",
"contractName": "object",
"bytecode": "00",
"linkReferences": {},
"from": "account{0}"
}
}
],
"abis": {
"0x8a6aef97b8c57f261fa026dfef6c7565967ed9183868f366e1ae26d0fcef3eb0": [
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "conversionRate",
"type": "uint256"
}
],
"name": "convert",
"outputs": [
{
"internalType": "uint256",
"name": "convertedAmount",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"0x1763330a29c9c5ee6c53e5757abbfcedae51803103bd53fbcb450be42134dfa0": [
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "sendCoin",
"outputs": [
{
"internalType": "bool",
"name": "sufficient",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalanceInEth",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
"0xac7ee96d8322143cf19be5db3c8327ad1971b21b6b14f98c4818c4afed7db37a": [
{
"payable": true,
"stateMutability": "payable",
"type": "fallback"
}
]
}
}
{
"name": "object",
"address": "0x7EF2e0048f5bAeDe046f6BF797943daF4ED8CB47",
"abi": [
{
"payable": true,
"stateMutability": "payable",
"type": "fallback"
}
],
"filePath": "Blank - 1/.debugger/generated-sources/#utility.yul",
"pinnedAt": 1717486018416
}
{
"overrides": [
{
"files": "*.sol",
"options": {
"printWidth": 80,
"tabWidth": 4,
"useTabs": false,
"singleQuote": false,
"bracketSpacing": false
}
},
{
"files": "*.yml",
"options": {}
},
{
"files": "*.yaml",
"options": {}
},
{
"files": "*.toml",
"options": {}
},
{
"files": "*.json",
"options": {}
},
{
"files": "*.js",
"options": {}
},
{
"files": "*.ts",
"options": {}
}
]
}
{
"db": {
"0490f0d98c06a6234cc374564f984580f33770d4605e5781451d4971d3235a2d": "0xf873a1205931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"937514b0e72ad8da6bb5e656f25334fb09e7018992ae794d5c237fbf27a5db15": "0x29e848935666e47c3c60d66d85e00e552c978943e87b57ef5fc17de427fe3f71",
"ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f": "0xf872a0399bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdbb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"dac9f9238909bae6bedf62a95a3ac503b5e6927b8243b9b44e0e335869bef325": "0xf8518080808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f80808080808080",
"6e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2": "0xf872a034a10bfd00977f54cc3450c9b25c9b3a502a089eba0097ba35fc33c4ea5fcb54b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"1db6a1394b96218e282fb52d559676dbecfba9a78146880e35ef38cc061dbf44": "0xf871a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e280808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f80808080808080",
"acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c": "0xf872a03fbe3e504ac4e35541bebad4d0e7574668e16fefa26cd4172f93e18b59ce9486b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"de2548e2521504daf92524b329dbb037a000ed381a8f810b8607e2f8832ada7d": "0xf891a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e280808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f808080a0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c808080",
"5f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c": "0xf872a036d82c545c22b72034803633d3dda2b28e89fb704f3c111355ac43e10612aedcb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"09cc43c2655ecf235e9ef7dbf5c6f27157eb9f6e2b53433a3f0f13301ca34450": "0xf8b1a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e280808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f808080a0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"69a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bd": "0xf872a0323d89d4ba0f8b56a459710de4b44820d73e93736cfc0667f35cdd5142b70f0db84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"7b184ca9e86ac8499d2cde865d80d191cbbeca4393fd2b74df5972f5426e0895": "0xf8d1a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e280808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f8080a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"0968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315": "0xf872a03c22adb6b75b7a618594eacef369bc4f0ec06380e8630fd7580f9bf0ea413ca8b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"b955e456c73a5460828b40c246ac4e09b60c899b969e7a9520783863649f104a": "0xf8f1a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f8080a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"70f09e0afc485ee4555a5c2bcb5380fe4745dfb619c97ce55ca368555f4c0358": "0xf872a03b9f0f05f155b5df3bbdd079fa47bedd6da0e32966c72f92264d98e80248858eb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"e628eda7692102d1123972b085e483fb81586793e6e4bb395f356f319785b924": "0xf90111a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f80a070f09e0afc485ee4555a5c2bcb5380fe4745dfb619c97ce55ca368555f4c0358a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"021eda8d86f1724d84a155e5e0227744e3fb2f570089a70ae65750d24410fe10": "0xf872a0209bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdbb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"35196d12c07e2405a02d095f74880568965618e95b50e64e8690594aa6bb5ea2": "0xf872a0207839edeb5b3ee9a2dee69954b24aeb3f91b8ff4c608efd90618351fe77152fb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"f4ae3d0d998ac3c8f5118c8ef3ce2ef3dc0440a900323177580df0f212f8b363": "0xf85180808080a035196d12c07e2405a02d095f74880568965618e95b50e64e8690594aa6bb5ea280808080a0021eda8d86f1724d84a155e5e0227744e3fb2f570089a70ae65750d24410fe1080808080808080",
"4b7be564e069212c8c0dd694ce21c7051e5cb7bbb527e3af73faf7e61de082c0": "0xf90111a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0f4ae3d0d998ac3c8f5118c8ef3ce2ef3dc0440a900323177580df0f212f8b36380a070f09e0afc485ee4555a5c2bcb5380fe4745dfb619c97ce55ca368555f4c0358a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515a": "0xf872a03aea7c8c479e9ff598fc761670d034e3eff2ebadb1e3769b349b2d1663d23913b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"1b83601c6f891d16b1422e65ed3cd47bcbe1342010db6168a0508de8597ac327": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0f4ae3d0d998ac3c8f5118c8ef3ce2ef3dc0440a900323177580df0f212f8b363a0c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515aa070f09e0afc485ee4555a5c2bcb5380fe4745dfb619c97ce55ca368555f4c0358a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"82f6e0ef9d3ec62e68c811432d52e6e0c907d604aed5a2a561d95e393f487d68": "0xf872a0209f0f05f155b5df3bbdd079fa47bedd6da0e32966c72f92264d98e80248858eb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"cdeaf028a7a2894d4778d6c412bfb95e81b23c2e6044f4c5d6de2ed8a50f78f3": "0xf872a020591967aed668a4b27645ff40c444892d91bf5951b382995d4d4f6ee3a2ce03b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"9d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797": "0xf85180a0cdeaf028a7a2894d4778d6c412bfb95e81b23c2e6044f4c5d6de2ed8a50f78f3808080808080808080a082f6e0ef9d3ec62e68c811432d52e6e0c907d604aed5a2a561d95e393f487d688080808080",
"0733321bda3c83f42aeeb32f8dcad18bb4f4c2b80fa60dee4b6eb25f0952524c": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0f4ae3d0d998ac3c8f5118c8ef3ce2ef3dc0440a900323177580df0f212f8b363a0c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515aa09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"0932e0165ad0cabdfe9d8fb6a70150033d789cd07caaf499c8a37141495499c3": "0xf872a020a258265696d227eef589fd6cd14671a82aa2963ec2214eb048fca5441c4a7eb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8": "0xf87180808080a035196d12c07e2405a02d095f74880568965618e95b50e64e8690594aa6bb5ea280808080a0021eda8d86f1724d84a155e5e0227744e3fb2f570089a70ae65750d24410fe10808080a00932e0165ad0cabdfe9d8fb6a70150033d789cd07caaf499c8a37141495499c3808080",
"a137d310a084b364dfbf0de1114f64e94253e42baa0297980c4a88db4e7d9aa8": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515aa09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"9aceb391e41ce30a6ee2c0c568b850f9fde2e425b767f72e7f4d9cc76e8271ec": "0xf872a020be3e504ac4e35541bebad4d0e7574668e16fefa26cd4172f93e18b59ce9486b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"090d9dec4c66aadc432a96de820eb6fb44489111b3b6f1f397cd9a44a0014882": "0xf872a0209ae219c4bbc2c5eaa1cd472f76bd0211bbf31053549dd7771cc573d3ed197fb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"819c926feb18dee3be8e9daa7ab62abe91febb2caceac5e8038b048d7a4bed0d": "0xf851808080808080808080808080a0090d9dec4c66aadc432a96de820eb6fb44489111b3b6f1f397cd9a44a00148828080a09aceb391e41ce30a6ee2c0c568b850f9fde2e425b767f72e7f4d9cc76e8271ec80",
"53ac286d5d31f0a7f768060b7f9f198956d75c903a698ae4fbb3dcc9f9d5e0b8": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515aa09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0819c926feb18dee3be8e9daa7ab62abe91febb2caceac5e8038b048d7a4bed0d80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"1a0e275dfddaeead8d1fa18c665c7e19b15dc769d3ede56c4a85377edc877110": "0xf8719f20e219c4bbc2c5eaa1cd472f76bd0211bbf31053549dd7771cc573d3ed197fb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"ff695f1ea854ce96ed9c761374f9cc42179fddef3c76a01c05f7f1bb19725ef8": "0xf8719f201e8c4eba798a431ca40726ca69bda8c7067f1690340e5b0a08d83d00d9cbb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"f96f3afee8124cd65bfb12ead5b9bd737c7def4cb7f7c71b82b00d5da23cd77c": "0xf85180808080a0ff695f1ea854ce96ed9c761374f9cc42179fddef3c76a01c05f7f1bb19725ef88080808080a01a0e275dfddaeead8d1fa18c665c7e19b15dc769d3ede56c4a85377edc877110808080808080",
"d8394fa4bbb65976fe11ee9de67bd6f0fb3fa3d7b36ee09f1421dae79b17b95f": "0xe219a0f96f3afee8124cd65bfb12ead5b9bd737c7def4cb7f7c71b82b00d5da23cd77c",
"853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a": "0xf851808080808080808080808080a0d8394fa4bbb65976fe11ee9de67bd6f0fb3fa3d7b36ee09f1421dae79b17b95f8080a09aceb391e41ce30a6ee2c0c568b850f9fde2e425b767f72e7f4d9cc76e8271ec80",
"29a7ea17591b34ca73ee13832a64db6d8565d9ab4dbafea03842fabe139016fa": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515aa09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"48e73baa24091198f9b69f9c7d27ba256fc19dddebf64448a7a0fd3df28d727d": "0xf872a020ea7c8c479e9ff598fc761670d034e3eff2ebadb1e3769b349b2d1663d23913b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"dc3d58bdcff5ea646a823bebe53ec4ab457ca425e952485f0da477b44fd7bacd": "0xf872a020e7c546eb582218cf94b848c36f3b058e2518876240ae6100c4ef23d38f3e07b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546bab": "0xf85180808080808080808080a048e73baa24091198f9b69f9c7d27ba256fc19dddebf64448a7a0fd3df28d727d80808080a0dc3d58bdcff5ea646a823bebe53ec4ab457ca425e952485f0da477b44fd7bacd80",
"c87ee106e21de6f375b1424af09b5235d42f0524163ba739aa52ff49cf6e0fb9": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"636297aa285a1279cd5a8ee616c77d6c8c3f4c26359f41ee8c6e7845fffad3a88a": "0x73d9145cce52d386f254917e481eb44e9943f391383014608060405260043610610034575f3560e01c806396e4ee3d14610038575b5f80fd5b610052600480360381019061004d91906100b4565b610068565b60405161005f9190610101565b60405180910390f35b5f81836100759190610147565b905092915050565b5f80fd5b5f819050919050565b61009381610081565b811461009d575f80fd5b50565b5f813590506100ae8161008a565b92915050565b5f80604083850312156100ca576100c961007d565b5b5f6100d7858286016100a0565b92505060206100e8858286016100a0565b9150509250929050565b6100fb81610081565b82525050565b5f6020820190506101145f8301846100f2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61015182610081565b915061015c83610081565b925082820261016a81610081565b915082820484148315176101815761018061011a565b5b509291505056fea26469706673582212206f9d8a461db4e2b455c9b182f5e4b1dfea31b610911328d6d1f706e0a0aceae064736f6c63430008190033",
"b662d91b6d1c2005e6ffaeb84eae979220786a02b6a3e450be1dcc6cc2336619": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0189056bc75e2d630b7002a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"8b44e23ebb9d28a8e51b5a0cf34bb8df501b731f6df5724e14435313220e93bc": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0b662d91b6d1c2005e6ffaeb84eae979220786a02b6a3e450be1dcc6cc2336619808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"57ec08b8f040499409fb0220f538477790d4f010c4bb51a8dbae5da3537a86a4": "0xf872a020d82c545c22b72034803633d3dda2b28e89fb704f3c111355ac43e10612aedcb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"a998835b79bfd79dc6bfd1e56c5a770a578baafe794e1af99f881dde61f57fec": "0xf869a0204b24eae4a02d3987ca887631704554f37941d36d88eba3861c6e365c7804a5b846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a06297aa285a1279cd5a8ee616c77d6c8c3f4c26359f41ee8c6e7845fffad3a88a",
"3fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d2": "0xf851808080808080a057ec08b8f040499409fb0220f538477790d4f010c4bb51a8dbae5da3537a86a480a0a998835b79bfd79dc6bfd1e56c5a770a578baafe794e1af99f881dde61f57fec8080808080808080",
"28d087150fcbc5aa6c357c632ef76b6df7032f3fa60b3e6e73a8cef911f681fd": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0b662d91b6d1c2005e6ffaeb84eae979220786a02b6a3e450be1dcc6cc2336619808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"389260d0fd2a3aa5387f54968117d0531f2bd6d11a3cd18e4c3b1375b5a1b7db": "0xf86ca020a40a9004224e397238839b469142c546607ee7a8b114ded86182fceae00e35b849f84780830247ffa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"e3f913408f0dfd8e15868bcf93871165450260cadaaeaee70349c19d8b9d2785": "0xf87180a0cdeaf028a7a2894d4778d6c412bfb95e81b23c2e6044f4c5d6de2ed8a50f78f3808080808080808080a082f6e0ef9d3ec62e68c811432d52e6e0c907d604aed5a2a561d95e393f487d688080a0389260d0fd2a3aa5387f54968117d0531f2bd6d11a3cd18e4c3b1375b5a1b7db8080",
"90beaedc808e8f299620267772dea32298cad8557484f57febff2f1b9b8fc8d5": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0b662d91b6d1c2005e6ffaeb84eae979220786a02b6a3e450be1dcc6cc2336619808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0e3f913408f0dfd8e15868bcf93871165450260cadaaeaee70349c19d8b9d2785a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"639297945f85b6359ddb0a32e648f2b85efe50a49289794e6ec69a18d3d2a74b45": "0x73d8b934580fce35a11b58c6d73adee468a2833fa83014608060405260043610610034575f3560e01c806396e4ee3d14610038575b5f80fd5b610052600480360381019061004d91906100b4565b610068565b60405161005f9190610101565b60405180910390f35b5f81836100759190610147565b905092915050565b5f80fd5b5f819050919050565b61009381610081565b811461009d575f80fd5b50565b5f813590506100ae8161008a565b92915050565b5f80604083850312156100ca576100c961007d565b5b5f6100d7858286016100a0565b92505060206100e8858286016100a0565b9150509250929050565b6100fb81610081565b82525050565b5f6020820190506101145f8301846100f2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61015182610081565b915061015c83610081565b925082820261016a81610081565b915082820484148315176101815761018061011a565b5b509291505056fea26469706673582212206f9d8a461db4e2b455c9b182f5e4b1dfea31b610911328d6d1f706e0a0aceae064736f6c63430008190033",
"da915a4ecf6a484c107337b1d01e36081be62d68e45ea4548135f53b4190ca85": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0289056bc75e2d6306e004a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"23c4fa83ba9bba509857a4645f15124b0865171cb340fe3d79ebfb61adce1494": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0da915a4ecf6a484c107337b1d01e36081be62d68e45ea4548135f53b4190ca85808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0e3f913408f0dfd8e15868bcf93871165450260cadaaeaee70349c19d8b9d2785a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"e826f0ffca73db2cab5364d81340504302ad42d375ebcff10ba3d3f001165278": "0xf869a0316b506e84fe0b6653198cc90a371af0f67345338c9c7ebc83779f1ac00e1bedb846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a09297945f85b6359ddb0a32e648f2b85efe50a49289794e6ec69a18d3d2a74b45",
"15089745910264cc2a1bf3c123d6a938ecd676cd766ded2eec9c8db23a21c5c3": "0xf90151a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0e826f0ffca73db2cab5364d81340504302ad42d375ebcff10ba3d3f00116527880a0da915a4ecf6a484c107337b1d01e36081be62d68e45ea4548135f53b4190ca85808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0e3f913408f0dfd8e15868bcf93871165450260cadaaeaee70349c19d8b9d2785a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"7977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e": "0xf86ca03af97556eedd035d0c1b80182155e5f5148b950fe7547a1253e2e74d703b365eb849f84780830247ffa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"d3aa21dc17128f08a8e5facd86f2b7292959286a7161d96ec44fe8615d256fbc": "0xf90171a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0e826f0ffca73db2cab5364d81340504302ad42d375ebcff10ba3d3f00116527880a0da915a4ecf6a484c107337b1d01e36081be62d68e45ea4548135f53b4190ca8580a07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0e3f913408f0dfd8e15868bcf93871165450260cadaaeaee70349c19d8b9d2785a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"6311781bdc6a7ff26aa80d6abbf688b9cb1a14b6d29125853c2eb13139f2c0a069": "0x608060405234801561000f575f80fd5b506004361061003f575f3560e01c80637bd703e81461004357806390b98a1114610073578063f8b2cb4f146100a3575b5f80fd5b61005d60048036038101906100589190610360565b6100d3565b60405161006a91906103a3565b60405180910390f35b61008d600480360381019061008891906103e6565b61015c565b60405161009a919061043e565b60405180910390f35b6100bd60048036038101906100b89190610360565b6102bd565b6040516100ca91906103a3565b60405180910390f35b5f73d8b934580fce35a11b58c6d73adee468a2833fa86396e4ee3d6100f7846102bd565b60026040518363ffffffff1660e01b81526004016101169291906104a8565b602060405180830381865af4158015610131573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061015591906104e3565b9050919050565b5f815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156101a9575f90506102b7565b815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546101f4919061053b565b92505081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610246919061056e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516102aa91906103a3565b60405180910390a3600190505b92915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61032f82610306565b9050919050565b61033f81610325565b8114610349575f80fd5b50565b5f8135905061035a81610336565b92915050565b5f6020828403121561037557610374610302565b5b5f6103828482850161034c565b91505092915050565b5f819050919050565b61039d8161038b565b82525050565b5f6020820190506103b65f830184610394565b92915050565b6103c58161038b565b81146103cf575f80fd5b50565b5f813590506103e0816103bc565b92915050565b5f80604083850312156103fc576103fb610302565b5b5f6104098582860161034c565b925050602061041a858286016103d2565b9150509250929050565b5f8115159050919050565b61043881610424565b82525050565b5f6020820190506104515f83018461042f565b92915050565b6104608161038b565b82525050565b5f819050919050565b5f819050919050565b5f61049261048d61048884610466565b61046f565b61038b565b9050919050565b6104a281610478565b82525050565b5f6040820190506104bb5f830185610457565b6104c86020830184610499565b9392505050565b5f815190506104dd816103bc565b92915050565b5f602082840312156104f8576104f7610302565b5b5f610505848285016104cf565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6105458261038b565b91506105508361038b565b92508282039050818111156105685761056761050e565b5b92915050565b5f6105788261038b565b91506105838361038b565b925082820190508082111561059b5761059a61050e565b5b9291505056fea2646970667358221220d1bc4f81c05cce3769cc157fc9df9c4113adc0bc3934e33d318fb615fcd3897f64736f6c63430008190033",
"4dc58639c15995a9615eabe64428f05b4f346ea0cfecc8df21468798358e30e5": "0xe6a1202f4efd012f30b85c3b205250c3dad4cd9208919ba8889723a8325ec6826f69e183822710",
"b4090dedd6d0cea63824bf66f08637bc54fbc4afc68b09222ea20bcecaaf0bc9": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0389056bc75e2d62faaed4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"57b315791ab8df758d2c9d4cab63244616f7798855acd26373ef7e5e1c1a5649": "0xf90171a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0e826f0ffca73db2cab5364d81340504302ad42d375ebcff10ba3d3f00116527880a0b4090dedd6d0cea63824bf66f08637bc54fbc4afc68b09222ea20bcecaaf0bc980a07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0e3f913408f0dfd8e15868bcf93871165450260cadaaeaee70349c19d8b9d2785a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"a308d196e1312490778a3f62ec26b1f0f926feee44904e779cb3c047a861ded5": "0xf869a0206b506e84fe0b6653198cc90a371af0f67345338c9c7ebc83779f1ac00e1bedb846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a09297945f85b6359ddb0a32e648f2b85efe50a49289794e6ec69a18d3d2a74b45",
"16c329554a054cde17fe78edb1f8f4cdb60e9f7084521a7e31c44917761aa2ed": "0xf869a020917ec45fb432cc574ffa91e7e62572b07d3038ae75c419484ae6d72c6caa8eb846f8440180a04dc58639c15995a9615eabe64428f05b4f346ea0cfecc8df21468798358e30e5a011781bdc6a7ff26aa80d6abbf688b9cb1a14b6d29125853c2eb13139f2c0a069",
"6543542bc8fe9eb3fcacf68927da8c642698a114020d253f12d3062f7b79f5c4": "0xf85180a0a308d196e1312490778a3f62ec26b1f0f926feee44904e779cb3c047a861ded5a016c329554a054cde17fe78edb1f8f4cdb60e9f7084521a7e31c44917761aa2ed8080808080808080808080808080",
"9755fd8b7a098c803d2e177dd5ece5ebe638489ec4db93f30992e2074910053b": "0xf90171a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a06543542bc8fe9eb3fcacf68927da8c642698a114020d253f12d3062f7b79f5c480a0b4090dedd6d0cea63824bf66f08637bc54fbc4afc68b09222ea20bcecaaf0bc980a07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0e3f913408f0dfd8e15868bcf93871165450260cadaaeaee70349c19d8b9d2785a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"5874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7": "0xf86ca03c76d49790cfa3f0c5e6fc28e31afd97efcab3ccef5b50ddc3276fdd9f50c730b849f8478083061898a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"b10aea71c749b1e7a8dedbd5e4913b1de13dc71e947f49c7b672c541c8b45254": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a06543542bc8fe9eb3fcacf68927da8c642698a114020d253f12d3062f7b79f5c480a0b4090dedd6d0cea63824bf66f08637bc54fbc4afc68b09222ea20bcecaaf0bc9a05874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7a07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0e3f913408f0dfd8e15868bcf93871165450260cadaaeaee70349c19d8b9d2785a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"7a4dd08c0e5fc2d6692e5ed116044da9945440f58f65b45fef2842e731fef559": "0xe6a1202f4efd012f30b85c3b205250c3dad4cd9208919ba8889723a8325ec6826f69e183822328",
"c1f171715e79adfff4de6b0ab83d9f74beab7ac9b6b2d8cf8adba798a59872fa": "0xe5a03f4efd012f30b85c3b205250c3dad4cd9208919ba8889723a8325ec6826f69e183822328",
"8390171609d5966f44691b17440fd834286f7bd45cc594581b82608e7b1e6c76": "0xe5a0360c5231d25d812a9c703372363aa635b605938d23760075ec7c89bae61a6f78838203e8",
"be23841316507c629ee4eac9adc509a46b63ac6bcc96ec48b7fe54942e48786a": "0xf8518080a0c1f171715e79adfff4de6b0ab83d9f74beab7ac9b6b2d8cf8adba798a59872fa808080a08390171609d5966f44691b17440fd834286f7bd45cc594581b82608e7b1e6c7680808080808080808080",
"85e65214071780c5ed15ba907cf26ff71ef036ddf8cfabe26495e780a2df0fb3": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0489056bc75e2d62f91688a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"dfb1dd2feedf00418aea416f831c024be4bb9ffa83ba147793d68a674439d3db": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a06543542bc8fe9eb3fcacf68927da8c642698a114020d253f12d3062f7b79f5c480a085e65214071780c5ed15ba907cf26ff71ef036ddf8cfabe26495e780a2df0fb3a05874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7a07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0e3f913408f0dfd8e15868bcf93871165450260cadaaeaee70349c19d8b9d2785a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"db7dbc1c0a14052619479ad38de2d210e1c0e7f531198c1fd05176020389caa4": "0xf869a020917ec45fb432cc574ffa91e7e62572b07d3038ae75c419484ae6d72c6caa8eb846f8440180a0be23841316507c629ee4eac9adc509a46b63ac6bcc96ec48b7fe54942e48786aa011781bdc6a7ff26aa80d6abbf688b9cb1a14b6d29125853c2eb13139f2c0a069",
"020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f28": "0xf85180a0a308d196e1312490778a3f62ec26b1f0f926feee44904e779cb3c047a861ded5a0db7dbc1c0a14052619479ad38de2d210e1c0e7f531198c1fd05176020389caa48080808080808080808080808080",
"df6d91df108694f59f47149b762ddf1846db2cd5e95149919454207912bdcb6c": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f2880a085e65214071780c5ed15ba907cf26ff71ef036ddf8cfabe26495e780a2df0fb3a05874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7a07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0e3f913408f0dfd8e15868bcf93871165450260cadaaeaee70349c19d8b9d2785a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"bdd9ed0add6f0074d07a03046da2fef61bbe0de7d43487b17a83741decf5738a": "0xf86ca020a40a9004224e397238839b469142c546607ee7a8b114ded86182fceae00e35b849f8478083031425a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"2adb2adfd2f4cb2c6c0cb148d713a9a171d258f56767e9fd1b4ff21ee9fef9bb": "0xf87180a0cdeaf028a7a2894d4778d6c412bfb95e81b23c2e6044f4c5d6de2ed8a50f78f3808080808080808080a082f6e0ef9d3ec62e68c811432d52e6e0c907d604aed5a2a561d95e393f487d688080a0bdd9ed0add6f0074d07a03046da2fef61bbe0de7d43487b17a83741decf5738a8080",
"20ae4886fc95c44b7309307d99f90585148622fd9aa8edbeeaa77b74868708e8": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f2880a085e65214071780c5ed15ba907cf26ff71ef036ddf8cfabe26495e780a2df0fb3a05874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7a07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba02adb2adfd2f4cb2c6c0cb148d713a9a171d258f56767e9fd1b4ff21ee9fef9bba069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"19ff4ed016f33c51c6f1100da09097dab4f8ba78ce48b49224c305a782d325eb": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0589056bc75e2d62f858d2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"224662bcc6688a7d2c12b555f78b1e903d7716ba43ad3e2e07cb9d3b094b16d6": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f2880a019ff4ed016f33c51c6f1100da09097dab4f8ba78ce48b49224c305a782d325eba05874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7a07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba02adb2adfd2f4cb2c6c0cb148d713a9a171d258f56767e9fd1b4ff21ee9fef9bba069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"36364018b91f49fe74f8d5f94b50186b0b905ecab882a5eac3d36c3111e91735": "0xf86ca03af97556eedd035d0c1b80182155e5f5148b950fe7547a1253e2e74d703b365eb849f847808302a6daa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"91336f8731ba733874a7cd9fd9dce0ce11ae1b8957887808de82b7fe2faa54e5": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f2880a019ff4ed016f33c51c6f1100da09097dab4f8ba78ce48b49224c305a782d325eba05874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7a036364018b91f49fe74f8d5f94b50186b0b905ecab882a5eac3d36c3111e9173580a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba02adb2adfd2f4cb2c6c0cb148d713a9a171d258f56767e9fd1b4ff21ee9fef9bba069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"f7c4b037e5844f3dd72296e6f91e011b031863a3d0d1edcddf28f082ce3d7c13": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0589056bc75e2d62f836f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"f102ecc0945a7cb65bb90a16489b336e1988f8e1fe8d120cc2f4d70498812148": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f2880a0f7c4b037e5844f3dd72296e6f91e011b031863a3d0d1edcddf28f082ce3d7c13a05874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7a07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba02adb2adfd2f4cb2c6c0cb148d713a9a171d258f56767e9fd1b4ff21ee9fef9bba069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"5f70759560bb8eb1c16f93c4d4f615cb8a8843adb3be31b7c6f60385747758d8": "0xf86ca03af97556eedd035d0c1b80182155e5f5148b950fe7547a1253e2e74d703b365eb849f847808302b7c7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"ad77c0f870f873ba6d0aee2a5e319f8a3a6e80d6ab06f54010685cb97f9a500b": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f2880a0f7c4b037e5844f3dd72296e6f91e011b031863a3d0d1edcddf28f082ce3d7c13a05874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7a05f70759560bb8eb1c16f93c4d4f615cb8a8843adb3be31b7c6f60385747758d880a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba02adb2adfd2f4cb2c6c0cb148d713a9a171d258f56767e9fd1b4ff21ee9fef9bba069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"e04d433d87578d969c6f19ac5732979223662fb40ece6878b2a354215a0865f7": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0589056bc75e2d62f867fca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"d497211ccc0d7364569ff87fc96fe3e5de610f6514e8a227c95df2c513c21669": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f2880a0e04d433d87578d969c6f19ac5732979223662fb40ece6878b2a354215a0865f7a05874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7a07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba02adb2adfd2f4cb2c6c0cb148d713a9a171d258f56767e9fd1b4ff21ee9fef9bba069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"15c51ed8bb79fd83d196dd35e1237c8127cb784b2db841706c2cf6e62ee7235f": "0xf86ca03af97556eedd035d0c1b80182155e5f5148b950fe7547a1253e2e74d703b365eb849f8478083029f45a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"08d6a4dee2296710316cc8cca18d81e9ae199bc6871b24a32f22ce4d2db72574": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f2880a0e04d433d87578d969c6f19ac5732979223662fb40ece6878b2a354215a0865f7a05874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7a015c51ed8bb79fd83d196dd35e1237c8127cb784b2db841706c2cf6e62ee7235f80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba02adb2adfd2f4cb2c6c0cb148d713a9a171d258f56767e9fd1b4ff21ee9fef9bba069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"1d1f9ec634d1b2c555c8d3141a68d579983ae7ce73dc0deda06314b4944facb2": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0589056bc75e2d62f7786ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"b589183c27518255b8421908ccc2c33d4a364ca5b2a5091f34eb1aa3ee2038e9": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f2880a01d1f9ec634d1b2c555c8d3141a68d579983ae7ce73dc0deda06314b4944facb2a05874999de023f21d583ba77bb95ca659e0f0b9fe1317b908b00c0439604c51c7a07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba02adb2adfd2f4cb2c6c0cb148d713a9a171d258f56767e9fd1b4ff21ee9fef9bba069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"935e8294222240aa87885b9db41dc8d20a65aafd82071cf25ae5fc7f2755e82a": "0xf86ca02076d49790cfa3f0c5e6fc28e31afd97efcab3ccef5b50ddc3276fdd9f50c730b849f8478083061898a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"8887a6198ef7bd601ea60b83c73afc95548e16f13864927fea759b5db6cd96c8": "0xf869a0203eb9561c111b66e2e104f0d3d5a93d2ab29a0833e7e156ec18f70e526f89bcb846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"3f1b645dfd770e85efc7aaeedbcf6dd69814182da05fbfc200aa1f576a13c1ca": "0xf851808080808080a08887a6198ef7bd601ea60b83c73afc95548e16f13864927fea759b5db6cd96c88080808080a0935e8294222240aa87885b9db41dc8d20a65aafd82071cf25ae5fc7f2755e82a80808080",
"c2357d3d865d2940e8ff09b475596a5d7a70308c0dbbf847478ced60b9b16829": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f2880a01d1f9ec634d1b2c555c8d3141a68d579983ae7ce73dc0deda06314b4944facb2a03f1b645dfd770e85efc7aaeedbcf6dd69814182da05fbfc200aa1f576a13c1caa07977fd8d4bd0428c8b25db70948186004c992cf9b4fbb55ef6f4f4d8c2de228e80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba02adb2adfd2f4cb2c6c0cb148d713a9a171d258f56767e9fd1b4ff21ee9fef9bba069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280",
"ebe3fac72039e05615521ec4edebb0d3849cdb5f974961ee9919f811a0da7807": "0xf86ca03af97556eedd035d0c1b80182155e5f5148b950fe7547a1253e2e74d703b365eb849f847808303170da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"29e848935666e47c3c60d66d85e00e552c978943e87b57ef5fc17de427fe3f71": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0020cf58d43187185459ea9139ded99a9266ca9d08a18beebe00f483a95f47f2880a01d1f9ec634d1b2c555c8d3141a68d579983ae7ce73dc0deda06314b4944facb2a03f1b645dfd770e85efc7aaeedbcf6dd69814182da05fbfc200aa1f576a13c1caa0ebe3fac72039e05615521ec4edebb0d3849cdb5f974961ee9919f811a0da780780a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba02adb2adfd2f4cb2c6c0cb148d713a9a171d258f56767e9fd1b4ff21ee9fef9bba069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a03fd67c372b7718a79aeb403334848359816053ce648bd65b3a04528840a7a9d280"
},
"blocks": [
"0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940e9281e9c6a0808672eaba6bd1220e144c9bb07aa00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008080837a12008084665ec04580a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0",
"0xf904a4f90239a048fcebc513018d2f9d27e9b30c7d94dd406fbfa0724e92decc294fa40717c3a7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948945a1288dc78a6d8952a92c77aee6730b414778a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800183029f998084665ec0ba80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f90263b9026002f9025c0180010783029f998080b9020b6101be61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c806396e4ee3d14610038575b5f80fd5b610052600480360381019061004d91906100b4565b610068565b60405161005f9190610101565b60405180910390f35b5f81836100759190610147565b905092915050565b5f80fd5b5f819050919050565b61009381610081565b811461009d575f80fd5b50565b5f813590506100ae8161008a565b92915050565b5f80604083850312156100ca576100c961007d565b5b5f6100d7858286016100a0565b92505060206100e8858286016100a0565b9150509250929050565b6100fb81610081565b82525050565b5f6020820190506101145f8301846100f2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61015182610081565b915061015c83610081565b925082820261016a81610081565b915082820484148315176101815761018061011a565b5b509291505056fea26469706673582212206f9d8a461db4e2b455c9b182f5e4b1dfea31b610911328d6d1f706e0a0aceae064736f6c63430008190033c001a0482d5ebc5e18119d927ad6d2094aa031088b64dba5eccc517532cc2c78747217a06c323e25c278fdb4a40d7387b9ef55a01823e9f97d6c365ce3d1f52461b06213c0c0",
"0xf904a4f90239a05d0b6482c03cd0aab8cad0337ca1b1fdcfb57876116eaffa762a9e2f8b49564da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479494d76e24f818426ae84aa404140e8d5f60e10e7ea00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800283029f998084665ec12a80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f90263b9026002f9025c0101010783029f998080b9020b6101be61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c806396e4ee3d14610038575b5f80fd5b610052600480360381019061004d91906100b4565b610068565b60405161005f9190610101565b60405180910390f35b5f81836100759190610147565b905092915050565b5f80fd5b5f819050919050565b61009381610081565b811461009d575f80fd5b50565b5f813590506100ae8161008a565b92915050565b5f80604083850312156100ca576100c961007d565b5b5f6100d7858286016100a0565b92505060206100e8858286016100a0565b9150509250929050565b6100fb81610081565b82525050565b5f6020820190506101145f8301846100f2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61015182610081565b915061015c83610081565b925082820261016a81610081565b915082820484148315176101815761018061011a565b5b509291505056fea26469706673582212206f9d8a461db4e2b455c9b182f5e4b1dfea31b610911328d6d1f706e0a0aceae064736f6c63430008190033c080a0210e2fb1a128d535070f1430cd36ac9c6659f72c7e4139ba8b86aad6873757e6a0784b81633b9c80210f2f467d4969ed2b438bec780a04290d11a79f660e6fa743c0c0",
"0xf908cff90239a0abd873362eb8d3d6a4facf326bcc0292f6183a1e70b70e77d0c08b07f0d5abbda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940e9281e9c6a0808672eaba6bd1220e144c9bb07aa00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008003830702af8084665ec12a80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9068eb9068b02f9068701020107830702af8080b906366080604052348015600e575f80fd5b506127105f803273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506105d78061005f5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c80637bd703e81461004357806390b98a1114610073578063f8b2cb4f146100a3575b5f80fd5b61005d60048036038101906100589190610360565b6100d3565b60405161006a91906103a3565b60405180910390f35b61008d600480360381019061008891906103e6565b61015c565b60405161009a919061043e565b60405180910390f35b6100bd60048036038101906100b89190610360565b6102bd565b6040516100ca91906103a3565b60405180910390f35b5f73d8b934580fce35a11b58c6d73adee468a2833fa86396e4ee3d6100f7846102bd565b60026040518363ffffffff1660e01b81526004016101169291906104a8565b602060405180830381865af4158015610131573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061015591906104e3565b9050919050565b5f815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156101a9575f90506102b7565b815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546101f4919061053b565b92505081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610246919061056e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516102aa91906103a3565b60405180910390a3600190505b92915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61032f82610306565b9050919050565b61033f81610325565b8114610349575f80fd5b50565b5f8135905061035a81610336565b92915050565b5f6020828403121561037557610374610302565b5b5f6103828482850161034c565b91505092915050565b5f819050919050565b61039d8161038b565b82525050565b5f6020820190506103b65f830184610394565b92915050565b6103c58161038b565b81146103cf575f80fd5b50565b5f813590506103e0816103bc565b92915050565b5f80604083850312156103fc576103fb610302565b5b5f6104098582860161034c565b925050602061041a858286016103d2565b9150509250929050565b5f8115159050919050565b61043881610424565b82525050565b5f6020820190506104515f83018461042f565b92915050565b6104608161038b565b82525050565b5f819050919050565b5f819050919050565b5f61049261048d61048884610466565b61046f565b61038b565b9050919050565b6104a281610478565b82525050565b5f6040820190506104bb5f830185610457565b6104c86020830184610499565b9392505050565b5f815190506104dd816103bc565b92915050565b5f602082840312156104f8576104f7610302565b5b5f610505848285016104cf565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6105458261038b565b91506105508361038b565b92508282039050818111156105685761056761050e565b5b92915050565b5f6105788261038b565b91506105838361038b565b925082820190508082111561059b5761059a61050e565b5b9291505056fea2646970667358221220d1bc4f81c05cce3769cc157fc9df9c4113adc0bc3934e33d318fb615fcd3897f64736f6c63430008190033c080a0f0c16df04d480eb0dd20ffc55ea680e33b831d417686df0c95d8e820cb5a736ca050fb39df9fb0d7e4c6e357c74c16a520a1dd3866fbc8ebc65159e747bccf7519c0c0",
"0xf902ebf90238a01bac9efc0b6e75320512b1b2d147eafe690e5d5924ea862cb8cc78f5b3617174a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948945a1288dc78a6d8952a92c77aee6730b414778a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800482eac68084665ec15680a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa02f8a70103010782eac694f8e81d47203a594245e36c48e151709f0c19fbe880b84490b98a11000000000000000000000000e583557a141d335b9634bed3d937777c508d69d000000000000000000000000000000000000000000000000000000000000003e8c001a088dc18476a21c82f120f94b36b721015a0dc061a830802f0856d5e9320f4a273a054a344f4e2fea6776fee939699fecaefaede2ced2489134e53ab784c84a4b7edc0c0",
"0xf90292f90238a0500466e845d6c90c706a343df6726c84bf17b2855bdb0d12614538904ea80d3fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479494d76e24f818426ae84aa404140e8d5f60e10e7ea00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800582ee1d8084665ec1af80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f853b85102f84e0104010782ee1d808000c001a0c33f89617a6430d450c94334b03a7297fd6c305c91b1712442a2114715d92a96a0081e6665271dc7825ac7f450daec965169e326314eaa95e5b00049d237437edcc0c0"
],
"latestBlockNumber": "0x5"
}
{
"db": {
"0490f0d98c06a6234cc374564f984580f33770d4605e5781451d4971d3235a2d": "0xf873a1205931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f": "0xf872a0399bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdbb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"dac9f9238909bae6bedf62a95a3ac503b5e6927b8243b9b44e0e335869bef325": "0xf8518080808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f80808080808080",
"6e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2": "0xf872a034a10bfd00977f54cc3450c9b25c9b3a502a089eba0097ba35fc33c4ea5fcb54b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"1db6a1394b96218e282fb52d559676dbecfba9a78146880e35ef38cc061dbf44": "0xf871a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e280808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f80808080808080",
"acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c": "0xf872a03fbe3e504ac4e35541bebad4d0e7574668e16fefa26cd4172f93e18b59ce9486b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"de2548e2521504daf92524b329dbb037a000ed381a8f810b8607e2f8832ada7d": "0xf891a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e280808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f808080a0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c808080",
"5f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c": "0xf872a036d82c545c22b72034803633d3dda2b28e89fb704f3c111355ac43e10612aedcb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"09cc43c2655ecf235e9ef7dbf5c6f27157eb9f6e2b53433a3f0f13301ca34450": "0xf8b1a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e280808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f808080a0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"69a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bd": "0xf872a0323d89d4ba0f8b56a459710de4b44820d73e93736cfc0667f35cdd5142b70f0db84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"7b184ca9e86ac8499d2cde865d80d191cbbeca4393fd2b74df5972f5426e0895": "0xf8d1a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e280808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f8080a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"0968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315": "0xf872a03c22adb6b75b7a618594eacef369bc4f0ec06380e8630fd7580f9bf0ea413ca8b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"b955e456c73a5460828b40c246ac4e09b60c899b969e7a9520783863649f104a": "0xf8f1a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f8080a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"70f09e0afc485ee4555a5c2bcb5380fe4745dfb619c97ce55ca368555f4c0358": "0xf872a03b9f0f05f155b5df3bbdd079fa47bedd6da0e32966c72f92264d98e80248858eb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"e628eda7692102d1123972b085e483fb81586793e6e4bb395f356f319785b924": "0xf90111a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0b57eae55d1d898a1388d3065de9102d0f6ade3423b29be2482e1626394acd99f80a070f09e0afc485ee4555a5c2bcb5380fe4745dfb619c97ce55ca368555f4c0358a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"021eda8d86f1724d84a155e5e0227744e3fb2f570089a70ae65750d24410fe10": "0xf872a0209bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdbb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"35196d12c07e2405a02d095f74880568965618e95b50e64e8690594aa6bb5ea2": "0xf872a0207839edeb5b3ee9a2dee69954b24aeb3f91b8ff4c608efd90618351fe77152fb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"f4ae3d0d998ac3c8f5118c8ef3ce2ef3dc0440a900323177580df0f212f8b363": "0xf85180808080a035196d12c07e2405a02d095f74880568965618e95b50e64e8690594aa6bb5ea280808080a0021eda8d86f1724d84a155e5e0227744e3fb2f570089a70ae65750d24410fe1080808080808080",
"4b7be564e069212c8c0dd694ce21c7051e5cb7bbb527e3af73faf7e61de082c0": "0xf90111a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0f4ae3d0d998ac3c8f5118c8ef3ce2ef3dc0440a900323177580df0f212f8b36380a070f09e0afc485ee4555a5c2bcb5380fe4745dfb619c97ce55ca368555f4c0358a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515a": "0xf872a03aea7c8c479e9ff598fc761670d034e3eff2ebadb1e3769b349b2d1663d23913b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"1b83601c6f891d16b1422e65ed3cd47bcbe1342010db6168a0508de8597ac327": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0f4ae3d0d998ac3c8f5118c8ef3ce2ef3dc0440a900323177580df0f212f8b363a0c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515aa070f09e0afc485ee4555a5c2bcb5380fe4745dfb619c97ce55ca368555f4c0358a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"82f6e0ef9d3ec62e68c811432d52e6e0c907d604aed5a2a561d95e393f487d68": "0xf872a0209f0f05f155b5df3bbdd079fa47bedd6da0e32966c72f92264d98e80248858eb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"cdeaf028a7a2894d4778d6c412bfb95e81b23c2e6044f4c5d6de2ed8a50f78f3": "0xf872a020591967aed668a4b27645ff40c444892d91bf5951b382995d4d4f6ee3a2ce03b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"9d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797": "0xf85180a0cdeaf028a7a2894d4778d6c412bfb95e81b23c2e6044f4c5d6de2ed8a50f78f3808080808080808080a082f6e0ef9d3ec62e68c811432d52e6e0c907d604aed5a2a561d95e393f487d688080808080",
"0733321bda3c83f42aeeb32f8dcad18bb4f4c2b80fa60dee4b6eb25f0952524c": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0f4ae3d0d998ac3c8f5118c8ef3ce2ef3dc0440a900323177580df0f212f8b363a0c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515aa09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"0932e0165ad0cabdfe9d8fb6a70150033d789cd07caaf499c8a37141495499c3": "0xf872a020a258265696d227eef589fd6cd14671a82aa2963ec2214eb048fca5441c4a7eb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8": "0xf87180808080a035196d12c07e2405a02d095f74880568965618e95b50e64e8690594aa6bb5ea280808080a0021eda8d86f1724d84a155e5e0227744e3fb2f570089a70ae65750d24410fe10808080a00932e0165ad0cabdfe9d8fb6a70150033d789cd07caaf499c8a37141495499c3808080",
"a137d310a084b364dfbf0de1114f64e94253e42baa0297980c4a88db4e7d9aa8": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515aa09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0acc98ed24983a10e645870d5b47d42f6a1c47d94ac9165221722626a99b3660c80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"9aceb391e41ce30a6ee2c0c568b850f9fde2e425b767f72e7f4d9cc76e8271ec": "0xf872a020be3e504ac4e35541bebad4d0e7574668e16fefa26cd4172f93e18b59ce9486b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"090d9dec4c66aadc432a96de820eb6fb44489111b3b6f1f397cd9a44a0014882": "0xf872a0209ae219c4bbc2c5eaa1cd472f76bd0211bbf31053549dd7771cc573d3ed197fb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"819c926feb18dee3be8e9daa7ab62abe91febb2caceac5e8038b048d7a4bed0d": "0xf851808080808080808080808080a0090d9dec4c66aadc432a96de820eb6fb44489111b3b6f1f397cd9a44a00148828080a09aceb391e41ce30a6ee2c0c568b850f9fde2e425b767f72e7f4d9cc76e8271ec80",
"53ac286d5d31f0a7f768060b7f9f198956d75c903a698ae4fbb3dcc9f9d5e0b8": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515aa09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0819c926feb18dee3be8e9daa7ab62abe91febb2caceac5e8038b048d7a4bed0d80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"1a0e275dfddaeead8d1fa18c665c7e19b15dc769d3ede56c4a85377edc877110": "0xf8719f20e219c4bbc2c5eaa1cd472f76bd0211bbf31053549dd7771cc573d3ed197fb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"ff695f1ea854ce96ed9c761374f9cc42179fddef3c76a01c05f7f1bb19725ef8": "0xf8719f201e8c4eba798a431ca40726ca69bda8c7067f1690340e5b0a08d83d00d9cbb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"f96f3afee8124cd65bfb12ead5b9bd737c7def4cb7f7c71b82b00d5da23cd77c": "0xf85180808080a0ff695f1ea854ce96ed9c761374f9cc42179fddef3c76a01c05f7f1bb19725ef88080808080a01a0e275dfddaeead8d1fa18c665c7e19b15dc769d3ede56c4a85377edc877110808080808080",
"d8394fa4bbb65976fe11ee9de67bd6f0fb3fa3d7b36ee09f1421dae79b17b95f": "0xe219a0f96f3afee8124cd65bfb12ead5b9bd737c7def4cb7f7c71b82b00d5da23cd77c",
"853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a": "0xf851808080808080808080808080a0d8394fa4bbb65976fe11ee9de67bd6f0fb3fa3d7b36ee09f1421dae79b17b95f8080a09aceb391e41ce30a6ee2c0c568b850f9fde2e425b767f72e7f4d9cc76e8271ec80",
"29a7ea17591b34ca73ee13832a64db6d8565d9ab4dbafea03842fabe139016fa": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0c3165ef5b21e80c163531f807c25789fef8810eda00ae7ca5ced381ff9a9515aa09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"48e73baa24091198f9b69f9c7d27ba256fc19dddebf64448a7a0fd3df28d727d": "0xf872a020ea7c8c479e9ff598fc761670d034e3eff2ebadb1e3769b349b2d1663d23913b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"dc3d58bdcff5ea646a823bebe53ec4ab457ca425e952485f0da477b44fd7bacd": "0xf872a020e7c546eb582218cf94b848c36f3b058e2518876240ae6100c4ef23d38f3e07b84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546bab": "0xf85180808080808080808080a048e73baa24091198f9b69f9c7d27ba256fc19dddebf64448a7a0fd3df28d727d80808080a0dc3d58bdcff5ea646a823bebe53ec4ab457ca425e952485f0da477b44fd7bacd80",
"c87ee106e21de6f375b1424af09b5235d42f0524163ba739aa52ff49cf6e0fb9": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a0ac59032c139346dba6925ea119f110bc037a945991f7349e218edbe12d6d43e9808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"638dad0fff78ed6608bf0de05be34e00d5e50a9fdcaec72dc1701a917c0d469ea5": "0x73d9145cce52d386f254917e481eb44e9943f3913830146080604052600436106032575f3560e01c806396e4ee3d146036575b5f80fd5b604560413660046069565b6057565b60405190815260200160405180910390f35b5f606082846088565b90505b92915050565b5f80604083850312156079575f80fd5b50508035926020909101359150565b8082028115828204841417606357634e487b7160e01b5f52601160045260245ffdfea2646970667358221220e0b88e07960471b8d3216c5887488fd52207db39235523b1a19739e145123bdf64736f6c63430008190033",
"8073332e2458dbf026e027ba490435527d329f6c70743e4efff09a1c4065f035": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0189056bc75e2d630ce2a6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"3ac661394a2ac53763531eb01faa8786b87669ed85a468d945e1837f626bd99f": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a08073332e2458dbf026e027ba490435527d329f6c70743e4efff09a1c4065f035808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a05f1ef1b2e89b5ed4e71249e76600493c718bc6c6030189bfab281c7b85389a2c80",
"57ec08b8f040499409fb0220f538477790d4f010c4bb51a8dbae5da3537a86a4": "0xf872a020d82c545c22b72034803633d3dda2b28e89fb704f3c111355ac43e10612aedcb84ff84d8089056bc75e2d63100000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"fff9dec45d1ac41e60289b3f9043328fc00fb05e63bdf2a403131d7e6a8a8725": "0xf869a0204b24eae4a02d3987ca887631704554f37941d36d88eba3861c6e365c7804a5b846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a08dad0fff78ed6608bf0de05be34e00d5e50a9fdcaec72dc1701a917c0d469ea5",
"ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac1": "0xf851808080808080a057ec08b8f040499409fb0220f538477790d4f010c4bb51a8dbae5da3537a86a480a0fff9dec45d1ac41e60289b3f9043328fc00fb05e63bdf2a403131d7e6a8a87258080808080808080",
"68510620b181d7d567734cfef232625508e9d4f82166d4a8b9ec6431f5687410": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a08073332e2458dbf026e027ba490435527d329f6c70743e4efff09a1c4065f035808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba09d1b5f3c8944300dda9eec33376308282aa06c11d3fdc640669ce5e506edb797a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"6ca326110e109028a5a7602ac674fec10a1251e207a9ea425aa66663de841c6d": "0xf86ca020a40a9004224e397238839b469142c546607ee7a8b114ded86182fceae00e35b849f8478083018eada056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"14c02dd35ac2a351ec2eb91ff69773a0357dbe7731fff7c8766d2fdb086befc9": "0xf87180a0cdeaf028a7a2894d4778d6c412bfb95e81b23c2e6044f4c5d6de2ed8a50f78f3808080808080808080a082f6e0ef9d3ec62e68c811432d52e6e0c907d604aed5a2a561d95e393f487d688080a06ca326110e109028a5a7602ac674fec10a1251e207a9ea425aa66663de841c6d8080",
"79bf163b56a1eb19447b95b62713a7638f13a127a5e74d0f08b74b812fef1189": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a08073332e2458dbf026e027ba490435527d329f6c70743e4efff09a1c4065f035808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba014c02dd35ac2a351ec2eb91ff69773a0357dbe7731fff7c8766d2fdb086befc9a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"6334a11ec2a99772c77dca6242471adc67b5b7d869ddf0a0b81da0197852a34c66": "0x608060405234801561000f575f80fd5b506004361061003f575f3560e01c80637bd703e81461004357806390b98a1114610069578063f8b2cb4f1461008c575b5f80fd5b610056610051366004610228565b6100b4565b6040519081526020015b60405180910390f35b61007c610077366004610248565b610158565b6040519015158152602001610060565b61005661009a366004610228565b6001600160a01b03165f9081526020819052604090205490565b5f73d9145cce52d386f254917e481eb44e9943f391386396e4ee3d6100ed846001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e084901b168152600481019190915260026024820152604401602060405180830381865af415801561012e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101529190610270565b92915050565b335f9081526020819052604081205482111561017557505f610152565b335f908152602081905260408120805484929061019390849061029b565b90915550506001600160a01b0383165f90815260208190526040812080548492906101bf9084906102ae565b90915550506040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b80356001600160a01b0381168114610223575f80fd5b919050565b5f60208284031215610238575f80fd5b6102418261020d565b9392505050565b5f8060408385031215610259575f80fd5b6102628361020d565b946020939093013593505050565b5f60208284031215610280575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561015257610152610287565b808201808211156101525761015261028756fea26469706673582212205fcf9fa0c59eb9bf755b29ef9ce40160348aeb4eb46cc30ae2c03fd2e5fbdb6d64736f6c63430008190033",
"4dc58639c15995a9615eabe64428f05b4f346ea0cfecc8df21468798358e30e5": "0xe6a1202f4efd012f30b85c3b205250c3dad4cd9208919ba8889723a8325ec6826f69e183822710",
"92bc0896bcfc53371cf15b4029040e43bdb04276b240e0196931636b15160d63": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0289056bc75e2d6305904ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"adcd355760126a806c32516a565b8dd9377f6af43405782e462fd24e578c0b77": "0xf90131a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da5315808080a092bc0896bcfc53371cf15b4029040e43bdb04276b240e0196931636b15160d63808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba014c02dd35ac2a351ec2eb91ff69773a0357dbe7731fff7c8766d2fdb086befc9a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d94": "0xf869a0316b506e84fe0b6653198cc90a371af0f67345338c9c7ebc83779f1ac00e1bedb846f8440180a04dc58639c15995a9615eabe64428f05b4f346ea0cfecc8df21468798358e30e5a034a11ec2a99772c77dca6242471adc67b5b7d869ddf0a0b81da0197852a34c66",
"84dcfcd080847bfb3f969a776ffbd5edc6060aeb9fb1bab0babd8e10ef46e9b9": "0xf90151a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a092bc0896bcfc53371cf15b4029040e43bdb04276b240e0196931636b15160d63808080a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba014c02dd35ac2a351ec2eb91ff69773a0357dbe7731fff7c8766d2fdb086befc9a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"e3e86feef00b21f617149015cc74453e9e8c140340f6f1d7c29ede1145582673": "0xf86ca03af97556eedd035d0c1b80182155e5f5148b950fe7547a1253e2e74d703b365eb849f847808303a92da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"7270ea4e7e21088e0b9c4f8d4e5a7ce7cc78e927f9e50cc1c0b138f6783dfcbd": "0xf90171a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a092bc0896bcfc53371cf15b4029040e43bdb04276b240e0196931636b15160d6380a0e3e86feef00b21f617149015cc74453e9e8c140340f6f1d7c29ede114558267380a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba014c02dd35ac2a351ec2eb91ff69773a0357dbe7731fff7c8766d2fdb086befc9a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"6f839b38fc672fa74739034d6ec10a5f77649b68da17aa8d992320345696d843": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0389056bc75e2d6304d322a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"ea58bd5a2f6e31e42f7c9c9c0d48b2e172f9ffe4dff33d107cbee1695b09ef48": "0xf90171a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a06f839b38fc672fa74739034d6ec10a5f77649b68da17aa8d992320345696d84380a0e3e86feef00b21f617149015cc74453e9e8c140340f6f1d7c29ede114558267380a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba014c02dd35ac2a351ec2eb91ff69773a0357dbe7731fff7c8766d2fdb086befc9a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"5ce37ab15ff5503bafdb37d371c6f813dbc3298937cbccfb9b815b7f2b19ebad": "0xf86ba03c76d49790cfa3f0c5e6fc28e31afd97efcab3ccef5b50ddc3276fdd9f50c730b848f84680825e95a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"4d104e807cc8c21726f4e9b7ca4a0e8a38c8d1881ac2a3e015129c74e93c0655": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a06f839b38fc672fa74739034d6ec10a5f77649b68da17aa8d992320345696d843a05ce37ab15ff5503bafdb37d371c6f813dbc3298937cbccfb9b815b7f2b19ebada0e3e86feef00b21f617149015cc74453e9e8c140340f6f1d7c29ede114558267380a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba014c02dd35ac2a351ec2eb91ff69773a0357dbe7731fff7c8766d2fdb086befc9a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"18d8e8307a665fea25e3b7e83159ad13d1c5452d650a4d172074d518e993f7e3": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0489056bc75e2d630415f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"724b3a4dfd8fb811819713ebe27ab4b21a33f08e630077f4187ad26101356801": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a018d8e8307a665fea25e3b7e83159ad13d1c5452d650a4d172074d518e993f7e3a05ce37ab15ff5503bafdb37d371c6f813dbc3298937cbccfb9b815b7f2b19ebada0e3e86feef00b21f617149015cc74453e9e8c140340f6f1d7c29ede114558267380a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba014c02dd35ac2a351ec2eb91ff69773a0357dbe7731fff7c8766d2fdb086befc9a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"8bfa4a3966cd6d0da39785b282b28a12a8ffcef09ce4df65605c9c345ce7ad21": "0xf86ca020a40a9004224e397238839b469142c546607ee7a8b114ded86182fceae00e35b849f847808301ed42a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"dd3b2cbc8f0b9d1df2bbb4ac84996d0cbcbbdb28c818a56c65699e8d873336b2": "0xf87180a0cdeaf028a7a2894d4778d6c412bfb95e81b23c2e6044f4c5d6de2ed8a50f78f3808080808080808080a082f6e0ef9d3ec62e68c811432d52e6e0c907d604aed5a2a561d95e393f487d688080a08bfa4a3966cd6d0da39785b282b28a12a8ffcef09ce4df65605c9c345ce7ad218080",
"69fc633a0518df11e49bfac4f4409b7be56731bb79bf782bf0b710498b0062f3": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a018d8e8307a665fea25e3b7e83159ad13d1c5452d650a4d172074d518e993f7e3a05ce37ab15ff5503bafdb37d371c6f813dbc3298937cbccfb9b815b7f2b19ebada0e3e86feef00b21f617149015cc74453e9e8c140340f6f1d7c29ede114558267380a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0dd3b2cbc8f0b9d1df2bbb4ac84996d0cbcbbdb28c818a56c65699e8d873336b2a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"d981890568afa0bc1fa59b30979ab8d248c1318ab26be4d5554b51c98a1bfa90": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0589056bc75e2d630277dca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"decea797c7ce4ebbe8492679daf59eec5d5558bfece13caa349aa66d7e261d6e": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a0d981890568afa0bc1fa59b30979ab8d248c1318ab26be4d5554b51c98a1bfa90a05ce37ab15ff5503bafdb37d371c6f813dbc3298937cbccfb9b815b7f2b19ebada0e3e86feef00b21f617149015cc74453e9e8c140340f6f1d7c29ede114558267380a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0dd3b2cbc8f0b9d1df2bbb4ac84996d0cbcbbdb28c818a56c65699e8d873336b2a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"ad53af34e5d1ced45781b9fd9a82a2bead7e2901b4a6984418461796bcc86f3f": "0xf86ba02076d49790cfa3f0c5e6fc28e31afd97efcab3ccef5b50ddc3276fdd9f50c730b848f84680825e95a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"8887a6198ef7bd601ea60b83c73afc95548e16f13864927fea759b5db6cd96c8": "0xf869a0203eb9561c111b66e2e104f0d3d5a93d2ab29a0833e7e156ec18f70e526f89bcb846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"50796983c71465a305a6cdce36a597793c46e5045274e598d0c7713cc6d7b63e": "0xf851808080808080a08887a6198ef7bd601ea60b83c73afc95548e16f13864927fea759b5db6cd96c88080808080a0ad53af34e5d1ced45781b9fd9a82a2bead7e2901b4a6984418461796bcc86f3f80808080",
"f9b34ad03b5f929e8de64ac384ce8f7c8c1b49104d9e2f71cea68ccba01675fc": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a0d981890568afa0bc1fa59b30979ab8d248c1318ab26be4d5554b51c98a1bfa90a050796983c71465a305a6cdce36a597793c46e5045274e598d0c7713cc6d7b63ea0e3e86feef00b21f617149015cc74453e9e8c140340f6f1d7c29ede114558267380a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0dd3b2cbc8f0b9d1df2bbb4ac84996d0cbcbbdb28c818a56c65699e8d873336b2a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"f289036cd315f1ce6298d5ceabbe22222182c7172c54636ecee0ca7c95ec89bd": "0xf86ca03af97556eedd035d0c1b80182155e5f5148b950fe7547a1253e2e74d703b365eb849f847808304783ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"c8ada75bc4bb009ba613edb3b8392c59679d8e9662169c6582d0a5e562544c63": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a0d981890568afa0bc1fa59b30979ab8d248c1318ab26be4d5554b51c98a1bfa90a050796983c71465a305a6cdce36a597793c46e5045274e598d0c7713cc6d7b63ea0f289036cd315f1ce6298d5ceabbe22222182c7172c54636ecee0ca7c95ec89bd80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0dd3b2cbc8f0b9d1df2bbb4ac84996d0cbcbbdb28c818a56c65699e8d873336b2a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"63c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470": "0x",
"63527c06175df504cd52504a5adf47a90a614745c75de669844e19c8ed8586a47c": "0x73da0bab807633f07f013f94dd0e6a4f96f8742b5330146080604052600436106032575f3560e01c806396e4ee3d146036575b5f80fd5b604560413660046069565b6057565b60405190815260200160405180910390f35b5f606082846088565b90505b92915050565b5f80604083850312156079575f80fd5b50508035926020909101359150565b8082028115828204841417606357634e487b7160e01b5f52601160045260245ffdfea2646970667358221220e0b88e07960471b8d3216c5887488fd52207db39235523b1a19739e145123bdf64736f6c63430008190033",
"cc60a010187387de847a130223df65ae889c460263a67f7a10662b936e401a80": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0689056bc75e2d62ff5a82a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"ba4ee865393760a090b88d30b7d0d963536e743abe5a8e5d305e4ae7618014f0": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a0cc60a010187387de847a130223df65ae889c460263a67f7a10662b936e401a80a050796983c71465a305a6cdce36a597793c46e5045274e598d0c7713cc6d7b63ea0f289036cd315f1ce6298d5ceabbe22222182c7172c54636ecee0ca7c95ec89bd80a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0dd3b2cbc8f0b9d1df2bbb4ac84996d0cbcbbdb28c818a56c65699e8d873336b2a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"cdb6f5bb3da32482ff57289cb569b11d3d10b780101c4ee02c7c335f768f624e": "0xf86ca020f97556eedd035d0c1b80182155e5f5148b950fe7547a1253e2e74d703b365eb849f847808304783ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"655bab3a6010c073524bfb0aac3d839b349efbe12d41ac8b513b405095f22c4e": "0xf869a020060db0e8007f6a33d0cd123a1329b55000121522b0ce023c4f879110bb9cffb846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0527c06175df504cd52504a5adf47a90a614745c75de669844e19c8ed8586a47c",
"a910996a096c0db79313d9daeb8fe6320708cf084663b3dd877d07efa3c12368": "0xf851808080a0655bab3a6010c073524bfb0aac3d839b349efbe12d41ac8b513b405095f22c4e808080808080a0cdb6f5bb3da32482ff57289cb569b11d3d10b780101c4ee02c7c335f768f624e808080808080",
"df02f179aa005aa50938d9a624e4bb274da62e1a785ebfb8dba278a5a228ba9d": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a0cc60a010187387de847a130223df65ae889c460263a67f7a10662b936e401a80a050796983c71465a305a6cdce36a597793c46e5045274e598d0c7713cc6d7b63ea0a910996a096c0db79313d9daeb8fe6320708cf084663b3dd877d07efa3c1236880a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0dd3b2cbc8f0b9d1df2bbb4ac84996d0cbcbbdb28c818a56c65699e8d873336b2a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"511a49f0e4a2132dc20a4c895ebf8b6b4e2850b5574dd9d7faea4a2d677f6291": "0xf86ca02076d49790cfa3f0c5e6fc28e31afd97efcab3ccef5b50ddc3276fdd9f50c730b849f847808301ed42a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"9be0fd45d81d5b54e29e327e6456da0f23a433bb1313397b9eca4eba42ecb61a": "0xf851808080808080a08887a6198ef7bd601ea60b83c73afc95548e16f13864927fea759b5db6cd96c88080808080a0511a49f0e4a2132dc20a4c895ebf8b6b4e2850b5574dd9d7faea4a2d677f629180808080",
"19635e5175086c3c33900c9a7e5784cb50dd802e95553a07b8672945b6abd140": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a0cc60a010187387de847a130223df65ae889c460263a67f7a10662b936e401a80a09be0fd45d81d5b54e29e327e6456da0f23a433bb1313397b9eca4eba42ecb61aa0a910996a096c0db79313d9daeb8fe6320708cf084663b3dd877d07efa3c1236880a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0dd3b2cbc8f0b9d1df2bbb4ac84996d0cbcbbdb28c818a56c65699e8d873336b2a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"6377f3604ac7913ef87ee8c7f57efcd7000a32e00e54c1a12d5a03d2fdaafcf941": "0x73358aa13c52544eccef6b0add0f801012adad5ee330146080604052600436106032575f3560e01c806396e4ee3d146036575b5f80fd5b604560413660046069565b6057565b60405190815260200160405180910390f35b5f606082846088565b90505b92915050565b5f80604083850312156079575f80fd5b50508035926020909101359150565b8082028115828204841417606357634e487b7160e01b5f52601160045260245ffdfea2646970667358221220e0b88e07960471b8d3216c5887488fd52207db39235523b1a19739e145123bdf64736f6c63430008190033",
"6dacee247922dc2c98a4cfb2ce0d2968e681c49bc8f27efa956c2edd0cfc691c": "0xf872a03931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229b84ff84d0789056bc75e2d62fc3d28a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"13a9fc26527c31de905f2cd36f29c9a7143cabb6a7712caee417c2bc91624d08": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a0f50fdb2681a65acbecdfddb8e4ff9da21b954ab1ace9f6ac22edcfee2d401d9480a06dacee247922dc2c98a4cfb2ce0d2968e681c49bc8f27efa956c2edd0cfc691ca09be0fd45d81d5b54e29e327e6456da0f23a433bb1313397b9eca4eba42ecb61aa0a910996a096c0db79313d9daeb8fe6320708cf084663b3dd877d07efa3c1236880a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0dd3b2cbc8f0b9d1df2bbb4ac84996d0cbcbbdb28c818a56c65699e8d873336b2a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"d465e79f57a858e7bc5bc02b8769a8bf26e34c6915048026076f4b8a012bcde3": "0xf869a0206b506e84fe0b6653198cc90a371af0f67345338c9c7ebc83779f1ac00e1bedb846f8440180a04dc58639c15995a9615eabe64428f05b4f346ea0cfecc8df21468798358e30e5a034a11ec2a99772c77dca6242471adc67b5b7d869ddf0a0b81da0197852a34c66",
"1e7bce60cbf88d45aeed2c84373a82d9aa7434d7c1a0de414bf3956e7f3c7a53": "0xf869a020a64cb0f1024deae6b2ed2e5c095b847015c82936dc27285c82dbcf4924d235b846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a077f3604ac7913ef87ee8c7f57efcd7000a32e00e54c1a12d5a03d2fdaafcf941",
"7eeaa92615960c070f0dc5ec0cd4c5c9928f69a398547bd6814c9845d17e7bc1": "0xf85180a0d465e79f57a858e7bc5bc02b8769a8bf26e34c6915048026076f4b8a012bcde38080808080a01e7bce60cbf88d45aeed2c84373a82d9aa7434d7c1a0de414bf3956e7f3c7a53808080808080808080",
"93f26d84864e6a5dfa604de1d70203839e768c4be9848ec0f8d0c337c2b2bae3": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a07eeaa92615960c070f0dc5ec0cd4c5c9928f69a398547bd6814c9845d17e7bc180a06dacee247922dc2c98a4cfb2ce0d2968e681c49bc8f27efa956c2edd0cfc691ca09be0fd45d81d5b54e29e327e6456da0f23a433bb1313397b9eca4eba42ecb61aa0a910996a096c0db79313d9daeb8fe6320708cf084663b3dd877d07efa3c1236880a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba0dd3b2cbc8f0b9d1df2bbb4ac84996d0cbcbbdb28c818a56c65699e8d873336b2a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180",
"645f49b2708275d8b9fa05536f9fd6430c6e7e373e8bb1dcc4705e7f9bc25eb7": "0xf86ca020a40a9004224e397238839b469142c546607ee7a8b114ded86182fceae00e35b849f8478083037befa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"11285b0c33e3233eb8a7ea302b78b90da7e66e7a7d47010454d9689b69a21b09": "0xf87180a0cdeaf028a7a2894d4778d6c412bfb95e81b23c2e6044f4c5d6de2ed8a50f78f3808080808080808080a082f6e0ef9d3ec62e68c811432d52e6e0c907d604aed5a2a561d95e393f487d688080a0645f49b2708275d8b9fa05536f9fd6430c6e7e373e8bb1dcc4705e7f9bc25eb78080",
"85bd3c2d631a8fe8d8189c5e362608447b20147d1a104a6e7973f638479222f6": "0xf90191a06e94ede82e8c381d422f010130a4c2ed35805be58e6783d800fbb37d000090e2a00968480c83b67f0eb2cafc1df82dbf6dcac0811f36fbd405f20c46f158da531580a07eeaa92615960c070f0dc5ec0cd4c5c9928f69a398547bd6814c9845d17e7bc180a06dacee247922dc2c98a4cfb2ce0d2968e681c49bc8f27efa956c2edd0cfc691ca09be0fd45d81d5b54e29e327e6456da0f23a433bb1313397b9eca4eba42ecb61aa0a910996a096c0db79313d9daeb8fe6320708cf084663b3dd877d07efa3c1236880a0aff16a3ca0d6e3544a2d4deb40842cebaf9325e6a98f2d6edc4cdce5d853e5d8a0bff66d9133cff6e91fe1878473b09aee9458c323efa078340d914a82de546baba011285b0c33e3233eb8a7ea302b78b90da7e66e7a7d47010454d9689b69a21b09a069a571829b9b6f89efb0b65e66e59e5a26b2eb72cdfce949e0aec5e0037357bda0853082590f798e998c021e6cf314a77c9a9fa6321048ad84cd12210b7aca706a80a0ba10cb647249ad696881701b56502fdea5967c79600b6fe8994c577093d3bac180"
},
"blocks": [
"0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940e9281e9c6a0808672eaba6bd1220e144c9bb07aa00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008080837a12008084665c135880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0",
"0xf903acf90239a05c36facf77a1072807832a28c9b9573b14dc57d30aedbc7829625c8e7044ad09a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948945a1288dc78a6d8952a92c77aee6730b414778a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080018301ca7b8084665c135a80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9016bb9016802f90164018001078301ca7b8080b9011360e0610033600b8282823980515f1a607314602757634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106032575f3560e01c806396e4ee3d146036575b5f80fd5b604560413660046069565b6057565b60405190815260200160405180910390f35b5f606082846088565b90505b92915050565b5f80604083850312156079575f80fd5b50508035926020909101359150565b8082028115828204841417606357634e487b7160e01b5f52601160045260245ffdfea2646970667358221220e0b88e07960471b8d3216c5887488fd52207db39235523b1a19739e145123bdf64736f6c63430008190033c001a048e02d2a6636ab0f45d507a03047f1027ea3e25eaebe9026a9ab286c5d5076f8a06ced8acd8d969b7bad3d11b8e0e8400b67b66137acdf7a9d83a174567a436b5cc0c0",
"0xf905bef90239a0780c8c7a3b566fd8d6c28cd68095940f86ae681a40d87326582ee797cf723fe0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479494d76e24f818426ae84aa404140e8d5f60e10e7ea00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008002830435c18084665c135a80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9037db9037a02f9037601010107830435c18080b903266080604052348015600e575f80fd5b50325f90815260208190526040902061271090556102f78061002f5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c80637bd703e81461004357806390b98a1114610069578063f8b2cb4f1461008c575b5f80fd5b610056610051366004610228565b6100b4565b6040519081526020015b60405180910390f35b61007c610077366004610248565b610158565b6040519015158152602001610060565b61005661009a366004610228565b6001600160a01b03165f9081526020819052604090205490565b5f73d9145cce52d386f254917e481eb44e9943f391386396e4ee3d6100ed846001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e084901b168152600481019190915260026024820152604401602060405180830381865af415801561012e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101529190610270565b92915050565b335f9081526020819052604081205482111561017557505f610152565b335f908152602081905260408120805484929061019390849061029b565b90915550506001600160a01b0383165f90815260208190526040812080548492906101bf9084906102ae565b90915550506040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b80356001600160a01b0381168114610223575f80fd5b919050565b5f60208284031215610238575f80fd5b6102418261020d565b9392505050565b5f8060408385031215610259575f80fd5b6102628361020d565b946020939093013593505050565b5f60208284031215610280575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561015257610152610287565b808201808211156101525761015261028756fea26469706673582212205fcf9fa0c59eb9bf755b29ef9ce40160348aeb4eb46cc30ae2c03fd2e5fbdb6d64736f6c63430008190033c001a06f7a82e25d69568d302ba652a20e010f1a941a1f11aa103c7da25c86f034ed139fb0ebfecff66bae5df47ad63e28afd627901b46b50562ed8afb942d86cda3dac0c0",
"0xf902ebf90238a0ae26f2c5b9a1190885d08b218d562be0c517be54105f39d4ab21cc96db14a2fba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940e9281e9c6a0808672eaba6bd1220e144c9bb07aa00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008003826cc58084665c139180a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa02f8a701020107826cc594d8b934580fce35a11b58c6d73adee468a2833fa880b84490b98a11000000000000000000000000a7980f1456e182b794a05789d74c4c531a9d4547000000000000000000000000000000000000000000000000000000174876e800c001a0e52941c5899afff8c550b93ee0a0ad5a6169c7bf58f41304e1480d3f00768dd2a03ba6edae45a75f1eefe14e01bff64df37c1b8099231061df7d4447642e1aced2c0c0",
"0xf902ebf90238a098c8f6efbdbaeddbd37a7374c2f85e49ed1a7f6f1d8f1573b2d332b235f2c5d0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948945a1288dc78a6d8952a92c77aee6730b414778a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004826cc58084665c13a480a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa02f8a701030107826cc594d8b934580fce35a11b58c6d73adee468a2833fa880b84490b98a11000000000000000000000000a7980f1456e182b794a05789d74c4c531a9d4547000000000000000000000000000000000000000000000000000000174876e800c001a0f6037983a695d2efbf3c8f0e7b68f068dece7e1c70028ef9d5cbcf7da304495ea0651286012fcac44013de603e4863e6f1cd66af8340618b6d880325956039fc62c0c0",
"0xf90292f90238a07ac53acffd5ae4baebdbe7b79897175f0986a2d6ac39f4b4973514033f9c1ce0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479494d76e24f818426ae84aa404140e8d5f60e10e7ea00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800582ee1d8084665c13b580a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f853b85102f84e0104010782ee1d808000c001a0c33f89617a6430d450c94334b03a7297fd6c305c91b1712442a2114715d92a96a0081e6665271dc7825ac7f450daec965169e326314eaa95e5b00049d237437edcc0c0",
"0xf903acf90239a0c36265a97af080f930174f14eff6445ce0696d2dc1532c99904d7d9cf0a8dc1ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940e9281e9c6a0808672eaba6bd1220e144c9bb07aa00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080068301ca7b8084665c13de80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9016bb9016802f90164010501078301ca7b8080b9011360e0610033600b8282823980515f1a607314602757634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106032575f3560e01c806396e4ee3d146036575b5f80fd5b604560413660046069565b6057565b60405190815260200160405180910390f35b5f606082846088565b90505b92915050565b5f80604083850312156079575f80fd5b50508035926020909101359150565b8082028115828204841417606357634e487b7160e01b5f52601160045260245ffdfea2646970667358221220e0b88e07960471b8d3216c5887488fd52207db39235523b1a19739e145123bdf64736f6c63430008190033c001a0e659ff321eb0376f3083b72c01c6fbf7762dac56a077159ebac3a83f665d71e4a00a6ce2802116faeebca74af22d63d48865eb0875073258c112f32fff215e202ac0c0",
"0xf903acf90239a07eb7e927004eb47da1ec172b218b5567b803e9e8763a1fa3c63e0c8a508626e6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948945a1288dc78a6d8952a92c77aee6730b414778a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008007832dc6c08084665c13ec80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000001a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9016bb9016802f9016401060107832dc6c08080b9011360e0610033600b8282823980515f1a607314602757634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106032575f3560e01c806396e4ee3d146036575b5f80fd5b604560413660046069565b6057565b60405190815260200160405180910390f35b5f606082846088565b90505b92915050565b5f80604083850312156079575f80fd5b50508035926020909101359150565b8082028115828204841417606357634e487b7160e01b5f52601160045260245ffdfea2646970667358221220e0b88e07960471b8d3216c5887488fd52207db39235523b1a19739e145123bdf64736f6c63430008190033c080a0b80bd81a2386c54a83bfc20c1e8289a1958841d4ef7893be292fa636e131e3d1a0463f6158e5d1dbfa268f81a7dab13a6f121ac57abb0c45bfe8c78080fda4ba00c0c0"
],
"latestBlockNumber": "0x7"
}
const ConvertLib = artifacts.require("ConvertLib");
const MetaCoin = artifacts.require("MetaCoin");
module.exports = function(deployer) {
deployer.deploy(ConvertLib);
deployer.link(ConvertLib, MetaCoin);
deployer.deploy(MetaCoin);
};
// this line is added to create a gist. Empty file is not allowed.
[package]
name = "Examples"
version = "0.0.0"
[addresses]
hello_blockchain = "0xcafe"
[dependencies]
AptosFramework = { git = "https://github.com/aptos-labs/aptos-core.git", subdir = "aptos-move/framework/aptos-framework/", rev = "testnet" }
oRzrCwYAAAAMAQAMAgwSAx4gBD4EBUIoB2rVAQi/AkAG/wIKEIkDVgrfAxUM9ANfDdMEBAAAAQEBAgEDAQQBBQAGBgAABwgABQgHAAMOBAEGAQAJAAEAAAoCAwACDwQEAAQQBgAAAREGCAEGAxIJAwEGBAcFBwEFAQgCAgwIAgABAwMFCAIHCAEBBgwBCAABCwMBCQACBwsDAQkACQAHbWVzc2FnZQdhY2NvdW50BWVycm9yBWV2ZW50BnNpZ25lcgZzdHJpbmcSTWVzc2FnZUNoYW5nZUV2ZW50DU1lc3NhZ2VIb2xkZXIGU3RyaW5nC2dldF9tZXNzYWdlC3NldF9tZXNzYWdlDGZyb21fbWVzc2FnZQp0b19tZXNzYWdlFW1lc3NhZ2VfY2hhbmdlX2V2ZW50cwtFdmVudEhhbmRsZQlub3RfZm91bmQKYWRkcmVzc19vZhBuZXdfZXZlbnRfaGFuZGxlCmVtaXRfZXZlbnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADK/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAwgAAAAAAAAAABJhcHRvczo6bWV0YWRhdGFfdjFCAQAAAAAAAAAAC0VOT19NRVNTQUdFG1RoZXJlIGlzIG5vIG1lc3NhZ2UgcHJlc2VudAABC2dldF9tZXNzYWdlAQEAAAICCwgCDAgCAQICAAgCDQsDAQgAAAEAAQEDDAoAKQEEBAUHBwARAicLACsBEAAUAgEBBAEBBSAOABEDDAIKAikBIAQODgALAQ4AOAASAS0BBR8LAioBDAQKBBAAFAwDCgQPAQsDCgESADgBCwELBA8AFQIBAAEBAA==
CEV4YW1wbGVzAQAAAAAAAAAAQEJGREYzOEExOEIzQzNGODczQkJCMUYzRTQ5NTcyQjMyQjg3Q0I2Qjk5NTM0ODc0OTREMDlBQjhDNjRFMzEyN0S7AR+LCAAAAAAAAv9Fzc0OwiAMB/A7T0E46+bZxIMHfQmzmA66QcZXKJtLjO8uZDOGC21///YRQU4wYsc8OOQXLm4ruGiRBFswkQm+Nk9NeYKxByiVkAipYxqtDc/eBjlJDWZzq4QBK1QY0Sv00lR7jTnQPZUTr5CmIt98NLkmdM6Rzm1bSj33jQyuhYqPFnravzIkbAoQB05zr0yqwW3kwoLt8Fu8+39dEgmXyjNS9pgF/7AvRlK1hPQAAAABB21lc3NhZ2WWBR+LCAAAAAAAAv+VVVtv2jAUfudXnLYSSqpodNI0TaZUuwitL90eureqskxyAhHBZrYDRVP++xzngpMQ2uYBE/vkO993bt6IKEsRVpimgi5SEa7DFUs4IRtUii0R/o3APJlCUDoiBKUUctreU8mSY29Ty4Qvj5tsq4WisWQb3Au5JoSFoci4PmOBOyzOR5MJuSB3EpXIZIjW3qBnoYaHkuS9SCOUsGIK1nioKBdPJYJAyYaQR7sGXQNqRHOzWI+KgF0JmRfLPeNRireVqx/W0B7clTC54XdrCDb8ThB0vrIsIym2gbEREh22sRQb+iplLc7b5CWByWQCf1ZoHCQKuKiVwtbwNDSsTSi40jD/9Zs+zB8fv/2cE8g+f4IZ3ExLkKunXYL7Z/t/my3SJIQ447BEXXPwWBRJAsWv2fC7lICFf7PEHHVSdRTNlEKpLzx8SZRWty2zO4vuB2CrjhAuNI1N0USew9n3pw3Y9XghjOmeLlOxYOlJtA8VczdYlTYTF3mwCpWrsCxUI83WeTBUVb6FelVwihoqSFoQMuEugU1LlFGkIvbGlYkjLonBuxgIk4Pn+44zW+Nih1SLBjIYpNbpimDooNsudYQIx325SVeDXXOU1sbP/eY1B0wVdogVcTOE67TQVcl+Bq2U002mz0Zn2gN1287AXY/7XuqaaX9cTQncJLpU7Y2Ndxj+vB234NR06CfDpdfPiDsNQrE9nM5d3pE9TNEEoKc1d1vl6kmj0nVMjfnXm5eP/vNQG3GDTUPG6ZmO8t/YNO9plqHrhpBQItNI66KIhaSlonZ1nOAbQNPxmY6/eIvL++LaDOB7c29eFtOoN9uc2HdHpw+z2RtQ3XQ6s6/ZrYjno3z0H7LouYDSBwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEOQXB0b3NGcmFtZXdvcmsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQtBcHRvc1N0ZGxpYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCk1vdmVTdGRsaWIA
module hello_blockchain::message {
use std::error;
use std::signer;
use std::string;
use aptos_framework::account;
use aptos_framework::event;
//:!:>resource
struct MessageHolder has key {
message: string::String,
message_change_events: event::EventHandle<MessageChangeEvent>,
}
//<:!:resource
struct MessageChangeEvent has drop, store {
from_message: string::String,
to_message: string::String,
}
/// There is no message present
const ENO_MESSAGE: u64 = 0;
#[view]
public fun get_message(addr: address): string::String acquires MessageHolder {
assert!(exists<MessageHolder>(addr), error::not_found(ENO_MESSAGE));
*&borrow_global<MessageHolder>(addr).message
}
public entry fun set_message(account: signer, message: string::String)
acquires MessageHolder {
let account_addr = signer::address_of(&account);
if (!exists<MessageHolder>(account_addr)) {
move_to(&account, MessageHolder {
message,
message_change_events: account::new_event_handle<MessageChangeEvent>(&account),
})
} else {
let old_message_holder = borrow_global_mut<MessageHolder>(account_addr);
let from_message = *&old_message_holder.message;
event::emit_event(&mut old_message_holder.message_change_events, MessageChangeEvent {
from_message,
to_message: copy message,
});
old_message_holder.message = message;
}
}
#[test(account = @0x1)]
public entry fun sender_can_set_message(account: signer) acquires MessageHolder {
let addr = signer::address_of(&account);
aptos_framework::account::create_account_for_test(addr);
set_message(account, string::utf8(b"Hello, Blockchain"));
assert!(
get_message(addr) == string::utf8(b"Hello, Blockchain"),
ENO_MESSAGE
);
}
}
#[test_only]
module hello_blockchain::message_tests {
use std::signer;
use std::unit_test;
use std::vector;
use std::string;
use hello_blockchain::message;
fun get_account(): signer {
vector::pop_back(&mut unit_test::create_signers_for_testing(1))
}
#[test]
public entry fun sender_can_set_message() {
let account = get_account();
let addr = signer::address_of(&account);
aptos_framework::account::create_account_for_test(addr);
message::set_message(account, string::utf8(b"Hello, Blockchain"));
assert!(
message::get_message(addr) == string::utf8(b"Hello, Blockchain"),
0
);
}
}
[package]
name = "hello_prover"
version = "0.0.0"
[dependencies]
AptosFramework = { git = "https://github.com/aptos-labs/aptos-core.git", subdir = "aptos-move/framework/aptos-framework/", rev = "main" }
[addresses]
DGhlbGxvX3Byb3ZlcgEAAAAAAAAAAEA2RDQyMEYxNTZFMTY5Qjg4MzRDNDVBRTdEQjBEMDk1RkFGQTUwQzE1MjY1RjI0NzlERDY4NjE3RUJBOEJCREUyrgEfiwgAAAAAAAL/RY7NCsIwEITveYqQszaeBQ9efIlSJE3WNrT5YTetB/Hd3WilLCy7zDfDtNnYyQzQiWgCyItUI8xzumdMK6ASvMinWIVTw6OEaB1kiA6i9UCduOaS6IbsfiacGHzJwZdvUimZzlrzOy59Y1PQpsLH2fS0nTYhNAyog6Sldx6r8ScFbqAf/+CN3392IKwVD8ZHJd/czDiHQFRrCfEBw3kR1tsAAAABBXByb3ZlrgEfiwgAAAAAAAL/TY5NCsMgEIX3OcUsE7KICaGLlBygpyhtM0LAqvhThOLd608VH+gwb3gf7y0OyxCIW5dtk0p8EL4dBFHLQTKr595tYC/rkP7/MWqawI1zXd24RAuVEgpObpAfeKSr79LQEl+Z2ECQa6tQQ3iWGdj3yLy2sdjj8RTK6BslpUtDOCn0LgZJ60alVE+GavoCrnUquIlm7x64GVtCvvsBpG8H+ywBAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ5BcHRvc0ZyYW1ld29yawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABC0FwdG9zU3RkbGliAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEKTW92ZVN0ZGxpYgA=
oRzrCwYAAAAGAQACAwIKBQwDBw8WCCUgDEUyAAAAAQABAAACAAAAAQMABXByb3ZlCWFib3J0c0lmMAVwbHVzMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAAAEHCwAGAAAAAAAAAAAhBAYGAAAAAAAAAAAnAgEAAAABBAsABgIAAAAAAAAAFgIA
module 0x42::prove {
fun plus1(x: u64): u64 {
// x+1
x+2 // error intended
}
spec plus1 {
ensures result == x+1;
}
fun abortsIf0(x: u64) {
if (x == 0) {
abort(0)
};
}
spec abortsIf0 {
aborts_if x == 0;
}
}
[package]
name = "MarketPlace"
version = "0.0.1"
[dependencies]
AptosFramework = { git = "https://github.com/aptos-labs/aptos-core.git", subdir = "aptos-move/framework/aptos-framework/", rev = "devnet" }
AptosToken = { git = "https://github.com/aptos-labs/aptos-core.git", subdir = "aptos-move/framework/aptos-token/", rev = "devnet" }
[addresses]
std = "0x1"
marketplace = "_"

Aptos NFT Marketplace Example

NOTE: THIS IS AN EXAMPLE AND HAS NOT BEEN FULLY AUDITED. THESE CONTRACTS ARE FOR COLLECTING FEEDBACK FROM OUR BUILDERS. ONCE WE ARE CONFIDENT THAT IT IS BENEFICIAL TO THE TOKEN ECOSYSTEM, WE WILL ADD IT TO the 0x3::aptos-token PACKAGE.

Introduction

The package contains two parts:

  • marketplace utility functions: these contracts specify the basic function and data structures for building a fixed-price marketplace and the auction house. The two contracts are: (1) marketplace_bid_utils and (2) marketplace_listing_utils
  • example marketplace contracts: these contracts show two examples of building a marketplace leveraging the marketplace utility functions.

Design principles

We want to have a minimal required example to improve the liquidity of the token ecosystem

  • Provide a unified Listing so that the same listing can be used across different marketplaces and aggregators.
  • Provide a unified buy and bid functions so that people can buy or bid for listed NFT across different marketplaces
  • Provide unified events so that downstream applications can have a clear overview of what is happening in the token ecosystem across all marketplaces

We want app developers to be creative with how they run their marketplace and auction house.

  • We separate the listing, buy and bid from other business logic to put them in utility functions.
  • We only provide example marketplace contracts for demonstration. Each marketplace is supposed to deploy its own contracts to its account. They decide how to charge the fee and how to select the bids that win the auction.

Design Choices

We also made the following design choices when we implemented the marketplace utility contracts. Any feedback on these choices is highly appreciated and helps the community.

  • Escrow-less listing: the seller can keep their tokens in their token stores and use the token (eg: show in the wallet, use the token, etc) before their token is sold.
  • The seller can choose who owns their listings. The listing can be stored under a marketplace account or stored under sellers' accounts. If the seller wants to work with a particular marketplace, they can give the listing to the marketplace to store after creating the listing. The marketplace can then decide how to expose the listing to the buyers. If the seller stores the listing under their own account, anyone can buy from these listings and these listings can be aggregated by aggregators.
  • Bidders have to lock their coins during the auction and can only withdraw the coin after the auction expires. Bidder can only increase their bid while the auction is still active. This ensures the bid is valid and the bidder cannot withdraw the coin while the auction is still active.

FAQ:

Why not store the token in the listing to guarantee the token exists?

We want to achieve two goals here, first, the token exists in the owner's token store before it is sold. second, the listed token should be available for transfer.

It is important to keep the token in the token store so that downstream apps, indexer, wallets can easily know the tokens owned by an account. The owner of the token can then use these listed tokens before the token is sold, as a listing can exist for a long time.

To check whether the listed token is available, there are many ways to handle this problem. For example, tracking the lister's token store events or using an indexer to verify if the owner still has the listed tokens. The marketplace can cancel the listing if the token balance is not enough.

Meanwhile, we will enhance the token store in our token standard to provide options to lock the token so that these tokens cannot be transferred out during the locking period.

How to support new features in this marketplace?

We will continuously collect new common features from the community and add them to the contracts in a backward-compatible way.

What is the plan for this package?

We plan to have these contracts in the move-example and collect the feedbacks from community. Once we have gone through enough iterations and be confident that it is beneficial to the token ecosystem, we will propose it to include them in the 0x3 aptos-token package.

/// This is an example demonstrating how to use marketplace_bid_utils and market_place_listing_utils to build an auction house
/// The basic flow can be found in test test_listing_one_and_two_bids
/// For more detailed description, check readme
module marketplace::marketplace_auction_example {
use aptos_framework::account;
use aptos_framework::coin;
use aptos_framework::event::{Self, EventHandle};
use aptos_framework::timestamp;
use aptos_std::simple_map::{Self, SimpleMap};
use aptos_std::table::{Self, Table};
use aptos_token::token::{Self, TokenId};
use marketplace::marketplace_bid_utils::{Self as bid, BidId, create_bid_id};
use marketplace::marketplace_listing_utils::{Self as listing, Listing, ListingEvent};
use std::error;
use std::signer;
use std::string::String;
use std::vector;
use aptos_framework::guid;
use aptos_token::property_map;
//
// Errors
//
/// Expiration time is invalid
const EINVALID_EXPIRATION_TIME: u64 = 1;
/// Start time is invalid
const EINVALID_START_TIME: u64 = 2;
/// Auction doesn't exist
const EAUCTION_NOT_EXIST: u64 = 3;
/// Bid increase less than minimal incremental
const EBID_INCREASE_TOO_SMALL: u64 = 4;
/// Auction ended
const EAUCTION_ENDED: u64 = 5;
/// Minimal incremental should be bigger than 0
const EBID_MIN_INCREMENTAL_IS_ZERO: u64 = 6;
/// Bid not found
const EBID_NOT_FOUND_FOR_AUCTION: u64 = 7;
/// Reserved operation for auction house owner
const EONLY_AUCTION_HOUSE_OWNER_CAN_PERFORM_THIS_OPERATION: u64 = 8;
/// Auction not ended
const EAUCTION_NOT_ENDED: u64 = 9;
/// Bid with same price exists for this auction
const EBID_WITH_SAME_PRICE_EXISTS: u64 = 10;
/// Bid not match the bid_id in the auction
const EBID_NOT_MATCH_ID_IN_AUCTION: u64 = 11;
/// Auction has zero bids
const EAUCION_HAS_ZERO_BIDS: u64 = 12;
/// Auction highest bid is zero
const EAUCTION_HIGHEST_BID_ZERO: u64 = 13;
struct AuctionHouseConfig has key {
market_fee_numerator: u64,
market_fee_denominator: u64,
fee_address: address,
}
struct Auctions<phantom CoinType> has key {
cur_auction_id: u64, // this is used to generate next auction_id
all_active_auctions: Table<u64, Auction<CoinType>>,
listing_event: EventHandle<ListingEvent>,
bid_event: EventHandle<BidEvent>,
cancel_bid_events: EventHandle<CancelBidEvent>
}
struct BidEvent has copy, drop, store {
market_address: address,
bid_id: BidId,
offer_price: u64,
expiration_sec: u64,
}
struct CancelBidEvent has copy, drop, store {
market_address: address,
bid_id: BidId,
}
struct Auction<phantom CoinType> has drop, store {
listing: Listing<CoinType>,
bids: SimpleMap<u64, BidId>, // mapping between the price and BidId
offer_numbers: vector<u64>, // the prices recorded for all the bids
}
public entry fun initialize_auction_house(
account: &signer,
market_fee_numerator: u64,
market_fee_denominator: u64,
fee_address: address,
) {
move_to(
account,
AuctionHouseConfig {
market_fee_denominator,
market_fee_numerator,
fee_address,
}
);
}
public entry fun initialize_auction<CoinType>(account: &signer) {
move_to(
account,
Auctions<CoinType> {
cur_auction_id: 0,
all_active_auctions: table::new(),
listing_event: account::new_event_handle<ListingEvent>(account),
bid_event: account::new_event_handle<BidEvent>(account),
cancel_bid_events: account::new_event_handle<CancelBidEvent>(account),
}
);
}
public fun generate_auction_data<CoinType>(
owner: &signer,
token_id: TokenId,
amount: u64,
min_price: u64,
start_sec: u64, // specify when the auction starts
expiration_sec: u64, // specify when the auction ends
withdraw_expiration_sec: u64,
): Auction<CoinType> {
let sec = timestamp::now_seconds();
assert!(sec <= start_sec, error::invalid_argument(EINVALID_START_TIME));
assert!(start_sec < expiration_sec, error::invalid_argument(EINVALID_EXPIRATION_TIME));
let listing = listing::create_listing<CoinType>(
owner,
token_id,
amount,
min_price,
false,
start_sec,
expiration_sec,
withdraw_expiration_sec,
vector<String>[],
vector<vector<u8>>[],
vector<String>[],
);
Auction<CoinType>{
listing,
bids: simple_map::create(),
offer_numbers: vector::empty(),
}
}
public entry fun create_auction<CoinType>(
owner: &signer,
creator: address,
collection_name: String,
token_name: String,
property_version: u64,
amount: u64,
min_price: u64,
start_sec: u64, // specify when the auction starts
expiration_sec: u64, // specify when the auction ends
withdraw_expiration_sec: u64, // specify deadline of token withdraw
) acquires Auctions {
let token_id = token::create_token_id_raw(creator, collection_name, token_name, property_version);
create_auction_with_token_id<CoinType>(
owner,
token_id,
amount,
min_price,
start_sec,
expiration_sec,
withdraw_expiration_sec,
);
}
public fun create_auction_with_token_id<CoinType>(
owner: &signer,
token_id: TokenId,
amount: u64,
min_price: u64,
start_sec: u64, // specify when the auction starts
listing_expiration_sec: u64, // specify when the auction ends
withdraw_expiration_sec: u64, // specify deadline of token withdraw
): u64 acquires Auctions {
let auction = generate_auction_data<CoinType>(
owner,
token_id,
amount,
min_price,
start_sec,
listing_expiration_sec,
withdraw_expiration_sec, // allow time to withdraw
);
// initialized coin store when listing
if (!coin::is_account_registered<CoinType>(signer::address_of(owner))) {
coin::register<CoinType>(owner);
};
let auctions = borrow_global_mut<Auctions<CoinType>>(@marketplace);
event::emit_event<ListingEvent>(
&mut auctions.listing_event,
listing::create_listing_event(
listing::get_listing_id(&auction.listing),
token_id,
amount,
min_price,
false,
start_sec,
listing_expiration_sec,
listing_expiration_sec + 50,
@marketplace,
property_map::empty(),
),
);
let next_id = auctions.cur_auction_id + 1;
*(&mut auctions.cur_auction_id) = next_id;
table::add(&mut auctions.all_active_auctions, next_id, auction);
next_id
}
public entry fun bid<CoinType>(
bidder: &signer,
creator: address,
collection_name: String,
token_name: String,
property_version: u64,
token_amount:u64,
offer_price: u64,
auction_id: u64,
withdraw_expiration_sec: u64,
) acquires Auctions {
// create bid and store it under the user account
let token_id = token::create_token_id_raw(creator, collection_name, token_name, property_version);
create_bid_with_token_id<CoinType>(bidder, token_id, token_amount, offer_price, auction_id, withdraw_expiration_sec);
}
/// Allow the bid to increase the coin for an existing bid
public entry fun increase_bid<CoinType>(
bidder: &signer,
price_delta: u64,
auction_id: u64,
) acquires Auctions {
let auctions = borrow_global_mut<Auctions<CoinType>>(@marketplace);
assert!(table::contains(&mut auctions.all_active_auctions, auction_id), error::not_found(EAUCTION_NOT_EXIST));
let auction = table::borrow_mut(&mut auctions.all_active_auctions, auction_id);
let listing_id = listing::get_listing_id<CoinType>(&auction.listing);
let bid_id = bid::create_bid_id(signer::address_of(bidder), listing_id);
increase_bid_price<CoinType>(
bidder,
bid_id,
price_delta,
auction_id,
)
}
/// Increase the offered price for an existing bid
/// The new price should not be same as any existing offered price
public fun increase_bid_price<CoinType>(
bidder: &signer,
bid_id: BidId,
price_delta: u64,
auction_id: u64,
) acquires Auctions {
let auctions = borrow_global_mut<Auctions<CoinType>>(@marketplace);
assert!(table::contains(&mut auctions.all_active_auctions, auction_id), error::not_found(EAUCTION_NOT_EXIST));
let auction = table::borrow_mut(&mut auctions.all_active_auctions, auction_id);
// get the listing info
// auction is still active
let now = timestamp::now_seconds();
assert!(now <= listing::get_listing_expiration<CoinType>(&auction.listing), error::invalid_argument(EAUCTION_ENDED));
// assert new offer_price is not duplicate price
let (old_price, _) = bid::get_bid_info<CoinType>(bid_id);
let new_offer_price = old_price + price_delta;
// check if same price exists previously, only bid with a different price can enter the auction
assert!(!simple_map::contains_key(&auction.bids, &new_offer_price), error::already_exists(EBID_WITH_SAME_PRICE_EXISTS));
bid::increase_bid(
bidder,
bid_id,
price_delta,
&auction.listing
);
}
public fun create_bid_with_token_id<CoinType>(
bidder: &signer,
token_id: TokenId,
token_amount:u64,
offer_price: u64,
auction_id: u64,
withdraw_expiration_sec: u64,
): BidId acquires Auctions {
let auctions = borrow_global_mut<Auctions<CoinType>>(@marketplace);
assert!(table::contains(&mut auctions.all_active_auctions, auction_id), error::not_found(EAUCTION_NOT_EXIST));
let auction = table::borrow_mut(&mut auctions.all_active_auctions, auction_id);
// initialize token store when bidding
token::initialize_token_store(bidder);
// get the listing info
// auction is still active
let now = timestamp::now_seconds();
assert!(now <= listing::get_listing_expiration<CoinType>(&auction.listing), error::invalid_argument(EAUCTION_ENDED));
// check if same price exists previously, only bid with a different price can enter the auction
assert!(!simple_map::contains_key(&auction.bids, &offer_price), error::already_exists(EBID_WITH_SAME_PRICE_EXISTS));
// allow participant to withdraw coin 60 secs after auction ends, configurable by each marketplace
let bid_id = bid::bid<CoinType>(
bidder,
token_id,
token_amount,
offer_price * token_amount,
&auction.listing,
withdraw_expiration_sec,
vector<String>[],
vector<vector<u8>>[],
vector<String>[],
);
event::emit_event<BidEvent>(
&mut auctions.bid_event,
BidEvent {
market_address: @marketplace,
bid_id,
offer_price,
expiration_sec: withdraw_expiration_sec,
},
);
// store the bid for this auction, only higher bid can enter the auction.
simple_map::add(&mut auction.bids, offer_price, bid_id);
vector::push_back(&mut auction.offer_numbers, offer_price);
bid_id
}
/// Auction house owner can remove auction from inventory
public fun remove_auction<CoinType>(account: &signer, auction_id: u64): Auction<CoinType> acquires Auctions {
assert!(signer::address_of(account) == @marketplace, error::permission_denied(EONLY_AUCTION_HOUSE_OWNER_CAN_PERFORM_THIS_OPERATION));
let auctions = borrow_global_mut<Auctions<CoinType>>(@marketplace);
table::remove(&mut auctions.all_active_auctions, auction_id)
}
/// Complete the auction, select the highest bid from existing bids and execute the bid against the listing
public entry fun complete_auction<CoinType>(account: &signer, auction_id: u64) acquires Auctions, AuctionHouseConfig {
assert!(signer::address_of(account) == @marketplace, error::permission_denied(EONLY_AUCTION_HOUSE_OWNER_CAN_PERFORM_THIS_OPERATION));
let auctions = borrow_global_mut<Auctions<CoinType>>(@marketplace);
assert!(table::contains(&auctions.all_active_auctions, auction_id), error::not_found(EAUCTION_NOT_EXIST));
let auction = table::borrow_mut(&mut auctions.all_active_auctions, auction_id);
let expiration_time = listing::get_listing_expiration<CoinType>(&auction.listing);
let now = timestamp::now_seconds();
assert!(now >= expiration_time, error::invalid_state(EAUCTION_NOT_ENDED));
let config = borrow_global<AuctionHouseConfig>(@marketplace);
let auction = remove_auction<CoinType>(account, auction_id);
let highest_bid_id = find_highest_bid(&auction);
let Auction {
listing,
bids,
offer_numbers: _,
} = auction;
if ( simple_map::length(&bids) > 0) {
// get the bid corresponding to highest price
bid::execute_listing_bid<CoinType>(
highest_bid_id,
listing,
config.fee_address,
config.market_fee_numerator,
config.market_fee_denominator,
);
};
}
/// The same function exists in the marketplace bid utils.
/// Have this function here is to make the marketplace feature complete since the marketplace contract should also
/// allow users an entry function to withdraw coin
public entry fun withdraw_coin_from_bid<CoinType>(
bidder: &signer,
lister_addr: address,
listing_creation_number: u64,
) {
bid::withdraw_coin_from_bid<CoinType>(bidder, lister_addr, listing_creation_number);
}
/// bidder can remove their bid from the auction so that the bid won't participate in auction
/// This doesn't withdraw the actual coin from the bid
public entry fun cancel_bid_in_auction<CoinType>(
bidder: &signer,
auction_id: u64,
) acquires Auctions {
let auctions = borrow_global_mut<Auctions<CoinType>>(@marketplace);
assert!(table::contains(&auctions.all_active_auctions, auction_id), error::not_found(EAUCTION_NOT_EXIST));
let auction = table::borrow_mut(&mut auctions.all_active_auctions, auction_id);
let now = timestamp::now_seconds();
assert!(now < listing::get_listing_expiration<CoinType>(&auction.listing), error::invalid_argument(EAUCTION_ENDED));
let listing_id = listing::get_listing_id<CoinType>(&auction.listing);
let bidder_address = signer::address_of(bidder);
let bid_id = create_bid_id(bidder_address, listing_id);
let (offer_price, _) = bid::get_bid_info<CoinType>(bid_id);
assert!(simple_map::contains_key(&mut auction.bids, &offer_price), error::not_found(EBID_NOT_FOUND_FOR_AUCTION));
assert!(
*simple_map::borrow(&mut auction.bids, &offer_price) == bid_id,
error::permission_denied(EBID_NOT_MATCH_ID_IN_AUCTION)
);
simple_map::remove(&mut auction.bids, &offer_price);
let (found, index) = vector::index_of(&mut auction.offer_numbers, &offer_price);
assert!(found, error::not_found(EBID_NOT_FOUND_FOR_AUCTION));
vector::swap_remove(&mut auction.offer_numbers, index);
event::emit_event<CancelBidEvent>(
&mut auctions.cancel_bid_events,
CancelBidEvent {
market_address: @marketplace,
bid_id,
},
);
}
/// Get the listing id corresponding to a auction
public fun get_auction_listing_id<CoinType>(auction_id: u64): guid::ID acquires Auctions {
let auctions = borrow_global_mut<Auctions<CoinType>>(@marketplace);
assert!(table::contains(&auctions.all_active_auctions, auction_id), error::not_found(EAUCTION_NOT_EXIST));
let auction = table::borrow_mut(&mut auctions.all_active_auctions, auction_id);
listing::get_listing_id<CoinType>(&auction.listing)
}
fun find_highest_bid<CoinType>(auction: &Auction<CoinType>): BidId {
assert!(simple_map::length(&auction.bids) > 0, error::invalid_state(EAUCION_HAS_ZERO_BIDS));
let highest_price = 0;
let ind = 0;
while (ind < vector::length(&auction.offer_numbers)) {
let price = *vector::borrow(&auction.offer_numbers, ind);
if (price > highest_price) {
highest_price = price;
};
ind = ind + 1;
};
assert!(highest_price > 0, error::invalid_state(EAUCTION_HIGHEST_BID_ZERO));
*simple_map::borrow(&auction.bids, &highest_price)
}
#[test(lister = @marketplace, bidder_a = @0xBB, bidder_b = @0xBA, framework = @0x1, house = @marketplace, fee_account = @0xa)]
public fun test_listing_one_and_two_bids(
lister: signer,
bidder_a: signer,
bidder_b: signer,
framework: signer,
house: signer,
fee_account: signer,
) acquires Auctions, AuctionHouseConfig {
use aptos_framework::coin;
use aptos_framework::account;
timestamp::set_time_has_started_for_testing(&framework);
timestamp::update_global_time_for_test(1);
account::create_account_for_test(signer::address_of(&lister));
account::create_account_for_test(signer::address_of(&bidder_a));
account::create_account_for_test(signer::address_of(&bidder_b));
account::create_account_for_test(signer::address_of(&framework));
account::create_account_for_test(signer::address_of(&fee_account));
// setup the auction house global fee config and config for each coin type
initialize_auction_house(
&house,
1,
100,
signer::address_of(&fee_account)
);
initialize_auction<coin::FakeMoney>(&house);
// owner creats a listing
let token_id = token::create_collection_and_token(
&lister,
2,
2,
2,
vector<String>[],
vector<vector<u8>>[],
vector<String>[],
vector<bool>[false, false, false],
vector<bool>[false, false, false, false, true],
);
let (creator, collection, name, version) = token::get_token_id_fields(&token_id);
create_auction<coin::FakeMoney>(
&lister,
creator,
collection,
name,
version,
1,
1,
1,
2,
2 + 10,
);
timestamp::update_global_time_for_test(1000000);
coin::create_fake_money(&framework, &bidder_a, 1000);
coin::register<coin::FakeMoney>(&bidder_b);
coin::register<coin::FakeMoney>(&fee_account);
coin::transfer<coin::FakeMoney>(&framework, signer::address_of(&bidder_a), 500);
coin::transfer<coin::FakeMoney>(&framework, signer::address_of(&bidder_b), 500);
bid<coin::FakeMoney>(
&bidder_a,
creator,
collection,
name,
version,
1,
100,
1,
1 + 10,
);
bid<coin::FakeMoney>(
&bidder_b,
creator,
collection,
name,
version,
1,
300,
1,
1 + 10,
);
timestamp::update_global_time_for_test(3000000);
complete_auction<coin::FakeMoney>(&house, 1);
// highest bidder bidder B get the token
assert!(token::balance_of(signer::address_of(&bidder_b), token_id) == 1, 1);
assert!(token::balance_of(signer::address_of(&bidder_a), token_id) == 0, 1);
// 3 coin is paid for market fee and remaining is 297
assert!(coin::balance<coin::FakeMoney>(signer::address_of(&lister)) == 297, 1);
}
#[test(lister = @marketplace, bidder_a = @0xBB, framework = @0x1, house = @marketplace)]
public fun test_cancel_bid(
lister: signer,
bidder_a: signer,
framework: signer,
house: signer,
) acquires Auctions {
use aptos_framework::coin;
use aptos_framework::account;
timestamp::set_time_has_started_for_testing(&framework);
timestamp::update_global_time_for_test(1);
account::create_account_for_test(signer::address_of(&lister));
account::create_account_for_test(signer::address_of(&bidder_a));
account::create_account_for_test(signer::address_of(&framework));
// setup the auction house global fee config and config for each coin type
initialize_auction_house(
&house,
1,
100,
signer::address_of(&house)
);
initialize_auction<coin::FakeMoney>(&house);
// owner creats a listing
let token_id = token::create_collection_and_token(
&lister,
2,
2,
2,
vector<String>[],
vector<vector<u8>>[],
vector<String>[],
vector<bool>[false, false, false],
vector<bool>[false, false, false, false, true],
);
let auction_id = create_auction_with_token_id<coin::FakeMoney>(
&lister,
token_id,
1,
1,
12,
20,
20 + 50,
);
coin::create_fake_money(&framework, &bidder_a, 1000);
coin::transfer<coin::FakeMoney>(&framework, signer::address_of(&bidder_a), 500);
timestamp::update_global_time_for_test(12000000);
create_bid_with_token_id<coin::FakeMoney>(
&bidder_a,
token_id,
1,
100,
auction_id,
20 + 50,
);
// bid_id_creation_number should be shown to users to allow them cancel the bid
cancel_bid_in_auction<coin::FakeMoney>(&bidder_a, auction_id);
let auction = table::borrow(
&borrow_global<Auctions<coin::FakeMoney>>(signer::address_of(&house)).all_active_auctions,
auction_id
);
assert!(simple_map::length(&auction.bids) == 0, 1);
timestamp::update_global_time_for_test(300000000);
let listing_id = get_auction_listing_id<coin::FakeMoney>(auction_id);
withdraw_coin_from_bid<coin::FakeMoney>(
&bidder_a,
guid::id_creator_address(&listing_id),
guid::id_creation_num(&listing_id)
);
}
}
/// An marketplace library providing basic function for buy and bid
/// To see how to use the library, please check the two example contract in the same folder
module marketplace::marketplace_bid_utils {
use aptos_framework::account;
use aptos_framework::coin::{Self, Coin};
use aptos_framework::event::{Self, EventHandle};
use aptos_framework::timestamp;
use aptos_std::guid::{Self, ID};
use aptos_std::table::{Self, Table};
use aptos_token::token::{Self, TokenId};
use marketplace::marketplace_listing_utils::{Self as listing_util, Listing, create_listing_id_raw};
use std::signer;
use std::error;
use std::string::String;
use aptos_token::property_map::{Self, PropertyMap};
//
// Errors
//
/// No sufficient fund to bid
const ENO_SUFFICIENT_FUND: u64 = 1;
/// Token ID doesn't match
const ETOKEN_ID_NOT_MATCH: u64 = 2;
/// Listing expired
const ELISTING_EXPIRED: u64 = 3;
/// Listing hasn't started yet
const ELISTING_NOT_STARTED: u64 = 4;
/// Token amount doesn't match
const ETOKEN_AMOUNT_NOT_MATCH: u64 = 5;
/// Bid doesn't exist
const EBID_NOT_EXIST: u64 = 6;
/// Cannot withdraw fund before bid expiration time
const ECANNOT_DRAW_FUND_BEFORE_EXPIRATION_TIME: u64 = 7;
/// Listing Id doesn't match
const ELISTING_ID_NOT_MATCH: u64 = 8;
/// The bidder has already bid for the same listing
const EBID_ID_EXISTS: u64 = 9;
/// Buy from non-instant sale listing
const EBUY_NON_INSTANT_SALE_LISTING: u64 = 10;
/// Cannot buy from expired listing
const EBUY_FROM_EXPIRED_LISTING: u64 = 11;
/// Cannot buy from a listing that hasn't started
const EBUY_FROM_NOT_STARTED_LISTING: u64 = 12;
/// hold the bid info and coin at user account
struct Bid<phantom CoinType> has store {
id: BidId,
coin: Coin<CoinType>,
offer_price: u64,
expiration_sec: u64,
config: PropertyMap,
}
/// This is the BidId used dedup the bid from the same signer for a listing
struct BidId has copy, drop, store {
bidder: address,
listing_id: ID,
}
/// store all the bids by the user
struct BidRecords<phantom CoinType> has key {
records: Table<BidId, Bid<CoinType>>,
bid_event: EventHandle<BidEvent<CoinType>>,
withdraw_bid_event: EventHandle<WithdrawBidEvent<CoinType>>,
order_executed_event: EventHandle<OrderExecutedEvent<CoinType>>,
increase_bid_event: EventHandle<IncreaseBidEvent<CoinType>>,
}
struct BidEvent<phantom CoinType> has copy, drop, store {
offer_price: u64,
bid_id: BidId,
expiration_sec: u64,
}
struct IncreaseBidEvent<phantom CoinType> has copy, drop, store {
new_price: u64,
bid_id: BidId,
}
struct WithdrawBidEvent<phantom CoinType> has copy, drop, store {
bid_id: BidId,
}
struct OrderExecutedEvent<phantom CoinType> has copy, drop, store {
buyer: address,
lister_address: address,
listing_creation_number: u64,
executed_price: u64,
market_place_address: address,
}
//
// entry functions
//
/// Allow buyer to directly buy from a listing directly listed under an account without paying any fee
public entry fun buy_from_owner_with_fee<CoinType>(
buyer: &signer,
lister_address: address,
listing_creation_number: u64,
market_fee_address: address,
fee_numerator: u64,
fee_denominator: u64,
) acquires BidRecords {
let entry = listing_util::remove_listing<CoinType>(lister_address, listing_creation_number);
buy_from_listing_with_fee<CoinType>(buyer, entry, market_fee_address, fee_numerator, fee_denominator);
}
/// Bidder can withdraw the bid after the bid expires to get the coin back and store them in the coinstore
public entry fun withdraw_coin_from_bid<CoinType>(
bidder: &signer,
lister_addr: address,
listing_creation_number: u64,
) acquires BidRecords {
let bidder_address = signer::address_of(bidder);
let listing_id = create_listing_id_raw(lister_addr, listing_creation_number);
let bid_id = create_bid_id(bidder_address, listing_id);
let bid_records = borrow_global_mut<BidRecords<CoinType>>(bidder_address);
assert!(table::contains(&bid_records.records, bid_id), error::not_found(EBID_NOT_EXIST));
let bid = table::remove(&mut bid_records.records, bid_id);
assert!(timestamp::now_seconds() > bid.expiration_sec, error::permission_denied(ECANNOT_DRAW_FUND_BEFORE_EXPIRATION_TIME));
coin::deposit(bidder_address, clear_bid(bid));
event::emit_event<WithdrawBidEvent<CoinType>>(
&mut bid_records.withdraw_bid_event,
WithdrawBidEvent<CoinType> {
bid_id
},
);
}
//
// public functions
//
/// Buy from listings. This can be called by marketplace contracts with their own fee config and stored Listing
public fun buy_from_listing_with_fee<CoinType>(
buyer: &signer,
entry: Listing<CoinType>,
market_fund_address: address,
fee_numerator: u64,
fee_denominator: u64,
) acquires BidRecords {
// assert the listing is active
let (
id,
token_id,
listed_amount,
min_price,
instant_sale,
start_sec,
expiration_sec,
withdraw_cap,
_,
) = listing_util::destroy_listing(entry);
let now = timestamp::now_seconds();
assert!(now > start_sec, error::invalid_argument(EBUY_FROM_NOT_STARTED_LISTING));
assert!(now < expiration_sec, error::invalid_argument(EBUY_FROM_EXPIRED_LISTING));
// listing is instant sale
assert!(instant_sale, error::invalid_argument(EBUY_NON_INSTANT_SALE_LISTING));
// assert the buyer has sufficient balance
let buyer_addr = signer::address_of(buyer);
let required_balance = min_price * listed_amount;
// check bidder has sufficient balance
assert!(coin::balance<CoinType>(buyer_addr) >= required_balance, error::invalid_argument(ENO_SUFFICIENT_FUND));
initialize_bid_records<CoinType>(buyer);
// swap the coin and token
let token = token::withdraw_with_capability(
withdraw_cap
);
token::deposit_token(buyer, token);
let coins = coin::withdraw<CoinType>(buyer, required_balance);
// deduct royalty fee from the transactions
let royalty = token::get_royalty(token_id);
let royalty_payee = token::get_royalty_payee(&royalty);
let royalty_coin = deduct_fee<CoinType>(
&mut coins,
token::get_royalty_numerator(&royalty),
token::get_royalty_denominator(&royalty)
);
coin::deposit(royalty_payee, royalty_coin);
// deduct marketplace fee
let market_fee = deduct_fee<CoinType>(&mut coins, fee_numerator, fee_denominator);
coin::deposit(market_fund_address, market_fee);
// give the remaining to the seller
let token_owner = guid::id_creator_address(&id);
coin::deposit(token_owner, coins);
emit_order_executed_event<CoinType>(
buyer_addr,
token_owner,
guid::id_creation_num(&id),
min_price,
market_fund_address,
);
}
public fun initialize_bid_records<CoinType>(bidder: &signer) {
let owner_addr = signer::address_of(bidder);
if (!exists<BidRecords<CoinType>>(owner_addr)) {
move_to(
bidder,
BidRecords<CoinType> {
records: table::new(),
bid_event: account::new_event_handle<BidEvent<CoinType>>(bidder),
withdraw_bid_event: account::new_event_handle<WithdrawBidEvent<CoinType>>(bidder),
increase_bid_event: account::new_event_handle<IncreaseBidEvent<CoinType>>(bidder),
order_executed_event: account::new_event_handle<OrderExecutedEvent<CoinType>>(bidder),
}
);
};
}
/// withdraw the coin and store them in bid struct and return a global unique bid id
public fun bid<CoinType>(
bidder: &signer,
token_id: TokenId,
token_amount:u64,
offer_price: u64,
entry: &Listing<CoinType>,
expiration_sec: u64,
keys: vector<String>,
values: vector<vector<u8>>,
types: vector<String>,
): BidId acquires BidRecords {
initialize_bid_records<CoinType>(bidder);
let bidder_address = signer::address_of(bidder);
// check the bid is legit for the listing
let total_coin_amount = offer_price * token_amount; // the total coin offerred by the bidder
// check bidder has sufficient balance
assert!(coin::balance<CoinType>(bidder_address) >= total_coin_amount, error::invalid_argument(ENO_SUFFICIENT_FUND));
assert_bid_parameters(token_id, total_coin_amount, token_amount, entry, timestamp::now_seconds());
// assert the bid_id not exist in the bid records
initialize_bid_records<CoinType>(bidder);
let bid_records = borrow_global_mut<BidRecords<CoinType>>(bidder_address);
let bid_id = create_bid_id(bidder_address, listing_util::get_listing_id(entry));
assert!(!table::contains(&bid_records.records, bid_id), error::already_exists(EBID_ID_EXISTS));
// withdraw the coin and store them in escrow to ensure the fund is avaliable until expiration_sec
let coin = coin::withdraw<CoinType>(bidder, total_coin_amount);
let bid = Bid<CoinType> {
id: bid_id,
coin,
offer_price,
expiration_sec,
config: property_map::new(keys, values, types),
};
table::add(&mut bid_records.records, bid_id, bid);
event::emit_event<BidEvent<CoinType>>(
&mut bid_records.bid_event,
BidEvent<CoinType> {
offer_price,
bid_id,
expiration_sec,
},
);
// opt-in direct transfer to receive token without signer
token::opt_in_direct_transfer(bidder, true);
bid_id
}
/// Allow the bid to increase the coin for an existing bid
public fun increase_bid<CoinType>(
bidder: &signer,
bid_id: BidId,
price_delta: u64,
entry: &Listing<CoinType>,
) acquires BidRecords {
let bidder_address = signer::address_of(bidder);
let bid_records = borrow_global_mut<BidRecords<CoinType>>(bidder_address);
assert!(table::contains(&bid_records.records, bid_id), error::not_found(EBID_NOT_EXIST));
let listing_id = listing_util::get_listing_id(entry);
assert!(bid_id.listing_id == listing_id, error::invalid_argument(ELISTING_ID_NOT_MATCH));
// check the bid is legit for the listing
let token_amount = listing_util::get_listing_token_amount(entry);
let added_amount = price_delta * token_amount;
// check bidder has sufficient balance
assert!(coin::balance<CoinType>(bidder_address) >= added_amount, error::invalid_argument(ENO_SUFFICIENT_FUND));
// add coin to the bid and update its info
let added_coin = coin::withdraw<CoinType>(bidder, added_amount);
let bid = table::borrow_mut(&mut bid_records.records, bid_id);
bid.offer_price = bid.offer_price + price_delta;
coin::merge(&mut bid.coin, added_coin);
event::emit_event<IncreaseBidEvent<CoinType>>(
&mut bid_records.increase_bid_event,
IncreaseBidEvent<CoinType> {
new_price: bid.offer_price,
bid_id,
},
);
}
/// execute a bid to a listing, no signer required to perform this function
/// pay fee to 3rd party based on a percentage
/// deduct royalty and send to the payee account
/// only the listing owner can execute the bid
public fun execute_listing_bid<CoinType>(
bid_id: BidId,
entry: Listing<CoinType>,
market_fund_address: address,
fee_numerator: u64,
fee_denominator: u64,
) acquires BidRecords {
let bid_records = &mut borrow_global_mut<BidRecords<CoinType>>(bid_id.bidder).records;
assert!(table::contains(bid_records, bid_id), error::not_found(EBID_NOT_EXIST));
let bid = table::borrow(bid_records, bid_id);
let (
id,
token_id,
listed_amount,
min_price,
_,
_,
expiration_sec,
withdraw_cap,
_,
) = listing_util::destroy_listing(entry);
let coin_owner = bid.id.bidder;
// validate offerred amount and price
let min_total = min_price * listed_amount;
assert!(coin::value(&bid.coin) >= min_total, error::invalid_argument(ENO_SUFFICIENT_FUND));
// validate expiration time
let now = timestamp::now_seconds();
assert!(now >= expiration_sec, error::invalid_argument(ELISTING_EXPIRED));
//listing_id matches
assert!(id == bid.id.listing_id, error::invalid_argument(ELISTING_ID_NOT_MATCH));
// transfer coin and token
let token = token::withdraw_with_capability(
withdraw_cap
);
token::direct_deposit_with_opt_in(coin_owner, token);
let bid_mut = table::remove(bid_records, bid_id);
let offer_price = bid_mut.offer_price;
let coins = clear_bid(bid_mut);
// deduct royalty fee from the transactions
let royalty = token::get_royalty(token_id);
let royalty_payee = token::get_royalty_payee(&royalty);
let royalty_coin = deduct_fee<CoinType>(
&mut coins,
token::get_royalty_numerator(&royalty),
token::get_royalty_denominator(&royalty)
);
coin::deposit(royalty_payee, royalty_coin);
// deduct marketplace fee
let market_fee = deduct_fee<CoinType>(&mut coins, fee_numerator, fee_denominator);
coin::deposit(market_fund_address, market_fee);
// give the remaining to the seller
let token_owner = guid::id_creator_address(&id);
coin::deposit(token_owner, coins);
emit_order_executed_event<CoinType>(
coin_owner,
token_owner,
guid::id_creation_num(&id),
offer_price,
market_fund_address,
);
}
/// validate if bid is legit for a listing.
public fun assert_bid_parameters<CoinType>(
token_id: TokenId,
offer_price: u64,
token_amount: u64,
entry: &Listing<CoinType>,
bid_time: u64,
) {
// validate token_id match
assert!(token_id == listing_util::get_listing_token_id(entry), error::invalid_argument(ETOKEN_ID_NOT_MATCH));
// validate offerred amount and price
let listed_amount = listing_util::get_listing_token_amount(entry);
let min_total = listing_util::get_listing_min_price(entry) * listed_amount;
let total_coin_amount = offer_price * token_amount;
assert!(total_coin_amount >= min_total, ENO_SUFFICIENT_FUND);
assert!(token_amount == listed_amount, ETOKEN_AMOUNT_NOT_MATCH);
assert!(bid_time >= listing_util::get_listing_start(entry), error::invalid_argument(ELISTING_NOT_STARTED));
assert!(bid_time <= listing_util::get_listing_expiration(entry), error::invalid_argument(ELISTING_EXPIRED));
}
public fun get_bid_info<CoinType>(
bid_id: BidId
): (u64, u64) acquires BidRecords {
let bid_records = &mut borrow_global_mut<BidRecords<CoinType>>(bid_id.bidder).records;
assert!(table::contains(bid_records, bid_id), error::not_found(EBID_NOT_EXIST));
let bid = table::borrow(bid_records, bid_id);
(bid.offer_price, bid.expiration_sec)
}
/// internal function for assigned a global unique id for a listing
public fun create_bid_id(bidder: address, listing_id: ID): BidId {
BidId {
bidder,
listing_id,
}
}
/// get bidder address from BidId
public fun get_bid_id_address(bid_id: &BidId): address {
bid_id.bidder
}
/// get bidder listing id from BidId
public fun get_bid_id_listing_id(bid_id: &BidId): ID {
bid_id.listing_id
}
//
// Private or friend functions
//
/// destruct the bid struct and extract coins
fun clear_bid<CoinType>(bid: Bid<CoinType>): Coin<CoinType> {
let Bid {
id: _,
coin,
offer_price: _,
expiration_sec: _,
config: _
} = bid;
coin
}
fun emit_order_executed_event<CoinType>(
buyer: address,
lister_address: address,
listing_creation_number: u64,
executed_price: u64,
market_place_address: address,
) acquires BidRecords {
let records = borrow_global_mut<BidRecords<CoinType>>(buyer);
event::emit_event<OrderExecutedEvent<CoinType>>(
&mut records.order_executed_event,
OrderExecutedEvent<CoinType> {
buyer,
lister_address,
listing_creation_number,
executed_price,
market_place_address,
},
);
}
fun deduct_fee<CoinType>(
total_coin: &mut Coin<CoinType>,
fee_numerator: u64,
fee_denominator: u64
): Coin<CoinType> {
let value = coin::value(total_coin);
let fee = if (fee_denominator == 0) {
0
} else {
value * fee_numerator/ fee_denominator
};
coin::extract(total_coin, fee)
}
#[test_only]
public fun test_aution_setup(
owner: &signer,
bidder_a: &signer,
aptos_framework: &signer,
use_wrong_coin_amount: bool,
use_wrong_token_amount: bool,
): (BidId, Listing<coin::FakeMoney>) acquires BidRecords {
timestamp::set_time_has_started_for_testing(aptos_framework);
timestamp::update_global_time_for_test(11000000);
account::create_account_for_test(signer::address_of(owner));
account::create_account_for_test(signer::address_of(bidder_a));
account::create_account_for_test(signer::address_of(aptos_framework));
// owner creats a listing
let token_id = token:: create_collection_and_token(
owner,
2,
2,
2,
vector<String>[],
vector<vector<u8>>[],
vector<String>[],
vector<bool>[false, false, false],
vector<bool>[false, false, false, false, false],
);
let entry = listing_util::create_listing<coin::FakeMoney>(
owner,
token_id,
1,
2,
false,
0,
100,
200,
vector<String>[],
vector<vector<u8>>[],
vector<String>[],
);
coin::create_fake_money(aptos_framework, bidder_a, 100);
coin::transfer<coin::FakeMoney>(aptos_framework, signer::address_of(bidder_a), 100);
//assert!(signer::address_of(&owner) == @0x1, 1);
token::initialize_token_store(bidder_a);
coin::register<coin::FakeMoney>(owner);
let token_amount = if (use_wrong_token_amount) { 10 } else {1};
let offered_price = if (use_wrong_coin_amount) {1} else {10};
let bid_1 = bid<coin::FakeMoney>(
bidder_a,
token_id,
token_amount,
offered_price,
&entry,
100000001,
vector<String>[],
vector<vector<u8>>[],
vector<String>[],
);
(bid_1, entry)
}
#[test(owner = @0xFE, bidder_a = @0xBC, aptos_framework = @aptos_framework)]
public fun test_successful(
owner: signer,
bidder_a: signer,
aptos_framework: signer
) acquires BidRecords {
let (bid_id, entry) = test_aution_setup(
&owner,
&bidder_a,
&aptos_framework,
false,
false,
);
let lister = listing_util::get_listing_creator(&entry);
timestamp::update_global_time_for_test(100000000);
execute_listing_bid(bid_id, entry,@aptos_framework, 10, 100);
// listing owner get paid with a deduction of market fee
// 1 * 10 - (1 * 10) * (10 / 100)
assert!(coin::balance<coin::FakeMoney>(lister) == 9, 1);
}
#[test(owner = @marketplace, bidder_a = @0xBB, aptos_framework = @aptos_framework)]
#[expected_failure(abort_code = 1, location = marketplace::marketplace_bid_utils)]
public fun test_wrong_coin_amount(
owner: signer,
bidder_a: signer,
aptos_framework: signer
) acquires BidRecords {
let (bid_id, entry) = test_aution_setup(
&owner,
&bidder_a,
&aptos_framework,
true,
false,
);
timestamp::update_global_time_for_test(100000000);
execute_listing_bid(bid_id, entry, @aptos_framework, 0, 1);
}
#[test(owner = @marketplace, bidder_a = @0xBB, aptos_framework = @aptos_framework)]
#[expected_failure(abort_code = 5, location = marketplace::marketplace_bid_utils)]
public fun test_wrong_token_amount(
owner: signer,
bidder_a: signer,
aptos_framework: signer
) acquires BidRecords {
let (bid_id, entry) = test_aution_setup(
&owner,
&bidder_a,
&aptos_framework,
false,
true,
);
timestamp::update_global_time_for_test(100000000);
execute_listing_bid(bid_id, entry, @aptos_framework, 0, 1);
}
#[test(owner = @marketplace, bidder_a = @0xBB, aptos_framework = @aptos_framework)]
public fun test_increase_bid(
owner: signer,
bidder_a: signer,
aptos_framework: signer
) acquires BidRecords {
let (bid_id, entry) = test_aution_setup(
&owner,
&bidder_a,
&aptos_framework,
false,
false,
);
increase_bid(&bidder_a, bid_id, 10, &entry);
assert!(coin::balance<coin::FakeMoney>(signer::address_of(&bidder_a)) == 80, 1);
}
#[test_only]
public fun test_instant_sale_setup(
owner: &signer,
buyer: &signer,
aptos_framework: &signer,
start_sec: u64,
end_sec: u64,
): (Listing<coin::FakeMoney>, TokenId) {
timestamp::set_time_has_started_for_testing(aptos_framework);
account::create_account_for_test(signer::address_of(owner));
account::create_account_for_test(signer::address_of(buyer));
account::create_account_for_test(signer::address_of(aptos_framework));
// owner creats a listing
let token_id = token::create_collection_and_token(
owner,
2,
2,
2,
vector<String>[],
vector<vector<u8>>[],
vector<String>[],
vector<bool>[false, false, false],
vector<bool>[false, false, false, false, false],
);
let entry = listing_util::create_listing<coin::FakeMoney>(
owner,
token_id,
1,
100,
true,
start_sec,
end_sec,
end_sec + 1, // token transfer happens immedidately after buying
vector<String>[],
vector<vector<u8>>[],
vector<String>[],
);
coin::create_fake_money(aptos_framework, buyer, 100);
coin::transfer<coin::FakeMoney>(aptos_framework, signer::address_of(buyer), 100);
//assert!(signer::address_of(&owner) == @0x1, 1);
token::initialize_token_store(buyer);
coin::register<coin::FakeMoney>(owner);
(entry, token_id)
}
#[test(owner = @marketplace, buyer = @0xBB, framework = @aptos_framework, market = @0x33)]
fun test_buy_successful(
owner: &signer,
buyer: &signer,
framework: &signer,
market: &signer,
) acquires BidRecords {
account::create_account_for_test(signer::address_of(market));
coin::register<coin::FakeMoney>(market);
let (entry, token_id) = test_instant_sale_setup(owner, buyer, framework, 1, 10);
timestamp::update_global_time_for_test(2000000);
let owner_addr = signer::address_of(owner);
let buyer_addr = signer::address_of(buyer);
buy_from_listing_with_fee(
buyer,
entry,
signer::address_of(market),
1,
100,
);
// assert the token and coin are transferred as expected
assert!(token::balance_of(owner_addr, token_id) == 1, 1);
assert!(token::balance_of(buyer_addr, token_id) == 1, 1);
assert!(coin::balance<coin::FakeMoney>(buyer_addr) == 0, 1);
// 1 % is paid as market fee
assert!(coin::balance<coin::FakeMoney>(owner_addr) == 99, 1);
}
#[test(owner = @0x12, buyer = @0x34, framework = @aptos_framework)]
#[expected_failure(abort_code = 65538, location = aptos_framework::timestamp)]
fun test_buy_before_start(
owner: &signer,
buyer: &signer,
framework: &signer,
) acquires BidRecords {
let (entry, _) = test_instant_sale_setup(owner, buyer, framework, 1, 10);
timestamp::update_global_time_for_test(0);
buy_from_listing_with_fee(
buyer,
entry,
signer::address_of(framework),
1,
100,
);
}
#[test(owner = @0x12, buyer = @0x34, framework = @aptos_framework)]
#[expected_failure(abort_code = 65547, location = marketplace::marketplace_bid_utils)]
fun test_buy_after_expire(
owner: &signer,
buyer: &signer,
framework: &signer,
) acquires BidRecords {
let (entry, _) = test_instant_sale_setup(owner, buyer, framework, 1, 10);
timestamp::update_global_time_for_test(30000000);
buy_from_listing_with_fee(
buyer,
entry,
signer::address_of(framework),
1,
100,
);
}
#[test(owner = @marketplace, bidder_a = @0xBB, framework = @aptos_framework, buyer = @0xee)]
#[expected_failure(abort_code = 65546, location = marketplace::marketplace_bid_utils)]
fun test_buy_from_auction_listing(
owner: &signer,
bidder_a: &signer,
framework: &signer,
buyer: &signer,
) acquires BidRecords {
let (_, entry) = test_aution_setup(
owner,
bidder_a,
framework,
false,
false,
);
buy_from_listing_with_fee(
buyer,
entry,
signer::address_of(framework),
1,
100,
);
}
}
/// This is an example demonstrating how to use marketplace_bid_utils and market_place_listing_utils to build an auction house
/// This example shows how to build a decentralized marketplace where listing are stored under owner's account
/// Note: the buyer can buy from any listing that is stored under owners' account
/// For more detailed description, check readme
module marketplace::marketplace_instant_sale_example {
use std::string::String;
use aptos_std::table::Table;
use marketplace::marketplace_listing_utils::{Self as listing_utils, Listing};
use marketplace::marketplace_bid_utils::{Self as bid_utils};
use aptos_framework::guid::ID;
struct Config has key {
market_fee_numerator: u64,
market_fee_denominator: u64,
fee_address: address,
}
public entry fun initialize_market(
account: &signer,
market_fee_numerator: u64,
market_fee_denominator: u64,
fee_address: address,
) {
move_to(
account,
Config {
market_fee_denominator,
market_fee_numerator,
fee_address,
}
);
}
struct Listings<phantom CoinType> has key {
all_active_Listings: Table<ID, Listing<CoinType>>,
}
public entry fun creat_listing<CoinType>(
owner: &signer,
creator: address,
collection_name: String,
token_name: String,
property_version: u64,
amount: u64,
min_price: u64,
start_sec: u64,
expiration_sec: u64,
withdraw_expiration_sec: u64,
) {
listing_utils::direct_listing<CoinType>(
owner,
creator,
collection_name,
token_name,
property_version,
amount,
min_price,
true,
start_sec,
expiration_sec,
withdraw_expiration_sec,
);
}
public entry fun buy_listing<CoinType>(
buyer: &signer,
lister_address: address,
listing_creation_number: u64,
) acquires Config {
// charge fee for the aggregator
let config = borrow_global<Config>(@marketplace);
// buy the token from owner directly
bid_utils::buy_from_owner_with_fee<CoinType>(
buyer,
lister_address,
listing_creation_number,
config.fee_address,
config.market_fee_numerator,
config.market_fee_denominator,
);
}
}
/// An marketplace library providing basic function for listing NFTs
/// To see how to use the library, please check the two example contract in the same folder
module marketplace::marketplace_listing_utils {
use std::error;
use std::signer;
use std::string::String;
use aptos_framework::account;
use aptos_framework::event::{Self, EventHandle};
use aptos_std::table::{Self, Table};
use aptos_std::guid::{Self, ID};
use aptos_token::token::{Self, TokenId, WithdrawCapability};
use aptos_token::property_map::{Self, PropertyMap};
friend marketplace::marketplace_bid_utils;
//
// Errors
//
/// Not enough token to list
const EOWNER_NOT_HAVING_ENOUGH_TOKEN: u64 = 1;
/// Listing doesn't exist
const ELISTING_NOT_EXIST:u64 = 2;
/// Withdraw time should be longer than listing time
const EWITHDRAW_EXPIRE_TIME_SHORT_THAN_LISTING_TIME: u64 = 3;
/// Start time should be less than expire time
const ESTART_TIME_LARGER_THAN_EXPIRE_TIME: u64 = 4;
/// Listing zero token
const ELISTING_ZERO_TOKEN: u64 = 5;
/// immutable struct for recording listing info.
struct Listing<phantom CoinType> has drop, store {
id: ID,
token_id: TokenId,
amount: u64,
min_price: u64,
instant_sale: bool, // true for marketplace and false for auction
start_sec: u64, // timestamp in secs for the listing starting time
expiration_sec: u64, // timestamp in secs for the listing expiration time
withdraw_cap: WithdrawCapability,
config: PropertyMap,
}
struct ListingEvent has copy, drop, store {
id: ID,
token_id: TokenId,
amount: u64,
min_price: u64,
instant_sale: bool,
start_sec: u64,
expiration_sec: u64,
withdraw_sec: u64,
market_address: address,
config: PropertyMap,
}
struct CancelListingEvent has copy, drop, store {
id: ID,
market_address: address,
}
/// store listings on the owner's account
struct ListingRecords<phantom CoinType> has key {
records: Table<ID, Listing<CoinType>>,
listing_event: EventHandle<ListingEvent>,
cancel_listing_event: EventHandle<CancelListingEvent>,
}
//
// entry functions
//
/// creator uses this function to directly list token for sale under their own accounts
public entry fun direct_listing<CoinType>(
owner: &signer,
creator: address,
collection_name: String,
token_name: String,
property_version: u64,
amount: u64,
min_price: u64,
instant_sale: bool, // indicate if this listing is for sale or for auction
start_sec: u64,
expiration_sec: u64,
withdraw_expiration_sec: u64,
) acquires ListingRecords {
let token_id = token::create_token_id_raw(creator, collection_name, token_name, property_version);
create_list_under_user_account<CoinType>(
owner,
token_id,
amount,
min_price,
instant_sale,
start_sec,
expiration_sec,
withdraw_expiration_sec,
);
}
/// remove a listing for the direct listing records
public entry fun cancel_direct_listing<CoinType>(
owner: &signer,
listing_id_creation_number: u64
) acquires ListingRecords {
let listing_id = guid::create_id(signer::address_of(owner), listing_id_creation_number);
let owner_addr = signer::address_of(owner);
let records = borrow_global_mut<ListingRecords<CoinType>>(owner_addr);
assert!(table::contains(&records.records, listing_id), error::not_found(ELISTING_NOT_EXIST));
table::remove(&mut records.records, listing_id);
event::emit_event<CancelListingEvent>(
&mut records.cancel_listing_event,
CancelListingEvent {
id: listing_id,
market_address: signer::address_of(owner),
},
);
}
//
// public functions
//
/// Return a listing struct, marketplace owner can use this function to create a listing and store it in its inventory
public fun create_listing<CoinType>(
owner: &signer,
token_id: TokenId,
amount: u64,
min_price: u64,
instant_sale: bool,
start_sec: u64,
listing_expiration_sec: u64,
withdraw_expiration_sec: u64, // The end time when the listed token can be withdrawn.
keys: vector<String>,
values: vector<vector<u8>>,
types: vector<String>,
): Listing<CoinType> {
let owner_addr = signer::address_of(owner);
assert!(listing_expiration_sec > start_sec, error::invalid_argument(ESTART_TIME_LARGER_THAN_EXPIRE_TIME));
assert!(token::balance_of(owner_addr, token_id) >= amount, error::invalid_argument(EOWNER_NOT_HAVING_ENOUGH_TOKEN));
assert!(withdraw_expiration_sec > listing_expiration_sec, error::invalid_argument(EWITHDRAW_EXPIRE_TIME_SHORT_THAN_LISTING_TIME));
assert!(amount > 0, error::invalid_argument(ELISTING_ZERO_TOKEN));
Listing<CoinType> {
id: create_listing_id(owner),
token_id,
amount,
min_price,
instant_sale,
start_sec,
expiration_sec: listing_expiration_sec,
withdraw_cap: token::create_withdraw_capability(owner, token_id, amount, withdraw_expiration_sec),
config: property_map::new(keys, values, types),
}
}
public fun initialize_listing_records<CoinType>(owner: &signer){
let owner_addr = signer::address_of(owner);
if (!exists<ListingRecords<CoinType>>(owner_addr)) {
move_to(
owner,
ListingRecords<CoinType> {
records: table::new(),
listing_event: account::new_event_handle<ListingEvent>(owner),
cancel_listing_event: account::new_event_handle<CancelListingEvent>(owner),
}
);
};
}
public fun create_list_under_user_account<CoinType>(
owner: &signer,
token_id: TokenId,
amount: u64,
min_price: u64,
instant_sale: bool,
start_sec: u64,
expiration_sec: u64,
withdraw_expiration_sec: u64,
): ID acquires ListingRecords {
let owner_addr = signer::address_of(owner);
let record = create_listing<CoinType>(
owner,
token_id,
amount,
min_price,
instant_sale,
start_sec,
expiration_sec,
withdraw_expiration_sec,
vector<String>[],
vector<vector<u8>>[],
vector<String>[],
);
initialize_listing_records<CoinType>(owner);
let records = borrow_global_mut<ListingRecords<CoinType>>(owner_addr);
let id = create_listing_id(owner);
// add a new record to the listing
table::add(&mut records.records, id, record);
event::emit_event<ListingEvent>(
&mut records.listing_event,
ListingEvent {
id,
token_id,
amount,
min_price,
instant_sale,
start_sec,
expiration_sec,
withdraw_sec: withdraw_expiration_sec,
market_address: owner_addr,
config: property_map::empty(),
},
);
id
}
public fun destroy_listing<CoinType>(entry: Listing<CoinType>): (
ID,
TokenId,
u64,
u64,
bool,
u64,
u64,
WithdrawCapability,
PropertyMap,
){
let Listing {
id,
token_id,
amount,
min_price,
instant_sale,
start_sec,
expiration_sec,
withdraw_cap,
config,
} = entry;
(id, token_id, amount, min_price, instant_sale, start_sec, expiration_sec, withdraw_cap, config)
}
/// util function for constructing the listing id from raw fields
public fun create_listing_id_raw(lister: address, listing_creation_number: u64): ID {
guid::create_id(lister, listing_creation_number)
}
public fun get_listing_id<CoinType>(list: &Listing<CoinType>): ID {
list.id
}
public fun get_listing_id_tuple<CoinType>(list: &Listing<CoinType>): (u64, address) {
let id = list.id;
(guid::id_creation_num(&id), guid::id_creator_address(&id))
}
public fun get_listing_creator<CoinType>(list: &Listing<CoinType>): address {
guid::id_creator_address(&list.id)
}
public fun get_listing_token_id<CoinType>(list: &Listing<CoinType>): TokenId {
list.token_id
}
public fun get_listing_expiration<CoinType>(list: &Listing<CoinType>): u64 {
list.expiration_sec
}
public fun get_listing_start<CoinType>(list: &Listing<CoinType>): u64 {
list.start_sec
}
public fun get_listing_min_price<CoinType>(list: &Listing<CoinType>): u64 {
list.min_price
}
public fun get_listing_token_amount<CoinType>(list: &Listing<CoinType>): u64 {
list.amount
}
public fun get_listing_instant_sale<CoinType>(list: &Listing<CoinType>): bool {
list.instant_sale
}
public fun create_listing_event(
id: ID,
token_id: TokenId,
amount: u64,
min_price: u64,
instant_sale: bool,
start_sec: u64,
expiration_sec: u64,
withdraw_sec: u64,
market_address: address,
config: PropertyMap
): ListingEvent {
ListingEvent {
id, token_id, amount, min_price, instant_sale, start_sec, expiration_sec, withdraw_sec, market_address, config
}
}
/// Get the read-only listing reference from listing stored on user account.
public fun get_listing_info<CoinType>(
lister_address: address,
listing_creation_number: u64
): (TokenId, u64, u64, bool, u64, u64) acquires ListingRecords {
let listing_id = guid::create_id(lister_address, listing_creation_number);
let records = borrow_global_mut<ListingRecords<CoinType>>(lister_address);
assert!(table::contains(&records.records, listing_id), error::not_found(ELISTING_NOT_EXIST));
let listing = table::borrow(&records.records, listing_id);
(
listing.token_id,
listing.amount,
listing.min_price,
listing.instant_sale,
listing.start_sec,
listing.expiration_sec,
)
}
//
// Private or friend functions
//
/// internal function for creating a new unique id for a listing
fun create_listing_id(owner: &signer): ID {
let gid = account::create_guid(owner);
guid::id(&gid)
}
/// Get the listing struct which contains withdraw_capability
/// This function should stay friend to prevent Listing be exposed to un-trusted module
public(friend) fun remove_listing<CoinType>(lister_address: address, listing_creation_number: u64): Listing<CoinType> acquires ListingRecords {
let listing_id = guid::create_id(lister_address, listing_creation_number);
let records = borrow_global_mut<ListingRecords<CoinType>>(lister_address);
assert!(table::contains(&records.records, listing_id), error::not_found(ELISTING_NOT_EXIST));
table::remove(&mut records.records, listing_id)
}
#[test(owner = @marketplace)]
public fun test_cancel_listing(owner: signer)acquires ListingRecords {
use aptos_framework::coin;
account::create_account_for_test(signer::address_of(&owner));
let token_id = token::create_collection_and_token(
&owner,
1,
2,
1,
vector<String>[],
vector<vector<u8>>[],
vector<String>[],
vector<bool>[false, false, false],
vector<bool>[false, false, false, false, false],
);
let listing_id = create_list_under_user_account<coin::FakeMoney>(
&owner,
token_id,
1,
1,
false,
0,
10000,
10001,
);
cancel_direct_listing<coin::FakeMoney>(&owner, guid::id_creation_num(&listing_id));
}
}
// this line is added to create a gist. Empty file is not allowed.
[package]
name = "Examples"
version = "0.0.0"
[addresses]
MoonCoin = "_"
[dependencies]
AptosFramework = { git = "https://github.com/aptos-labs/aptos-core.git", subdir = "aptos-move/framework/aptos-framework/", rev = "main" }
//:!:>moon
module MoonCoin::moon_coin {
use aptos_framework::coin;
struct MoonCoin {}
fun init_module(sender: &signer) {
aptos_framework::managed_coin::initialize<MoonCoin>(
sender,
b"Moon Coin",
b"MOON",
6,
false,
);
}
public entry fun register(account: &signer) {
aptos_framework::managed_coin::register<MoonCoin>(account)
}
public entry fun mint(account: &signer, dst_addr: address, amount: u64) {
aptos_framework::managed_coin::mint<MoonCoin>(account, dst_addr, amount);
}
public entry fun burn(account: &signer, amount: u64) {
aptos_framework::managed_coin::burn<MoonCoin>(account, amount);
}
public entry fun transfer(from: &signer, to: address, amount: u64,) {
coin::transfer<MoonCoin>(from, to, amount);
}
}
//<:!:moon
[package]
name = "TicketTutorial"
version = "0.1.0"
[addresses]
TicketTutorial = "0xcafe"
[dependencies]
AptosFramework = { git = "https://github.com/aptos-labs/aptos-core.git", subdir = "aptos-move/framework/aptos-framework", rev = "testnet" }
DlRpY2tldFR1dG9yaWFsAQAAAAAAAAAAQEE3MjM4OEU0NkRCOTI0M0ZENjQzNzlENjY3MUYyMERFRTRDNERERjA4RjY5RkQxODAzRDA3RTM5OTNGQ0ZFMDS5AR+LCAAAAAAAAv9VzbEOwiAQBuCdpyDMCrqaOLj4BN2aDhSuLWkLhLtWE+O7C1pN3O7yf/9dHbUZdQ8N83oGfuaicmYEqhYKyelJsBUSuuBLdJBHeRCM1draBIiADfvnb3U3uoPCLETwFrxxRV4iBbym/OYW0pjlg/eOSmMginhSKq/D0koTZqUL3k+6xW00IYHMQOw4Lq11qRQ/0RxWUN338OZ/ey4kWIsmQPJAgj/ZCx/hb+r3AAAAAQdUaWNrZXRzkQsfiwgAAAAAAAL/tVfrbho5FP6dPIXbSgik2ZB7q2kSLaVUijZLqg3NrlRFIzNjwMowZm0PhI3y7ntsjz0XBkjS9heMfe7nOxe32200mBDEOB3TBMdIsJSHBIUsIogKNJFyJvx2e0zlJB3uhWzanuJxkk5PcShTHLc7M8nEb4NUggQc7+5OWZTGBA1oeE+kPfZ98y3Q4+5OKggSMvJ9QccJ4R8LJ3MSAkPxREhOk3F2gpWuYMTxlCwYv/f9kNFk3Z05UBS+r43sauLdnXffJREyYEm8vFvHG4YsTWRJtDZH4mFMggUEI4hJMpYTJTBkiZCo178Obnv9bz0fpafH6BztfyxeDS67f/QGN/byoHTZ69/2rq6/OtbD/Payf9u5uvyc8Qfd62/9gSU7WkdmCY5XCb7+ddl1ek7y+z87/wQ3vU5u4ekq76fOVaefc79XzkOC0lCiG4LlZUQSSUeUcDTBAvLHOPFQxNnMAzzNlir5O5wtfGSy6vs3+teDYwH8AcBqSLgWD2dPufQuS0LCpQFRVbgWS51uv2KLki41Y6BAXad8xmlIatRCYWCZeXNPjP14jmmsUWCECh+tgALgro7+hpMrfXBWMans0IWyYYofAhUEUWeHJuslcxKzGSmZ44wwpXO2IliJmaXDmIYI1PMlGqUJogmVgTTeNec4SUnAFomKXcMUpYfK9rS0shiCv+I/AKEmAAlZbHG62fqo3GZzkMTOslBfFK3xXAIeV7QWDHxSgmrdDLliz1iaGmVxXPTyRXh8EYpaCIf/ppQTkTuRRdAYEeAo4hA7Ywm0HPgkQgRs1DQEOjxYCIjYmyZ5oEKKPEoFGS0vbz2aR+kIU84hDjpAge5loKoaRHNRkmX5M2wA05BxCFEwjtkQx8E0lfVGFI2tUX5mJe65tHmFnuP05mUMqis95RGBIR4qZAY9OXtNZzivdAoV8kJrUFkqZlF/67Spf1pYDZTBv2YDHHcu1ICxoCOzpbUGkzMYr1DADpXDdFmqu0JQfZSBwkN1KEVVjK5izqu2DotBrXUDBPV9jgbMxyTLJ41emJkfQVJNNmAkSUwT0WxsSEfZYFUh5flY9czBp0ahMfsl6pRws3dIjhMxIvzMLSAXJrSlPHtlM/Y0Ilsr0K6xjRPVP7eis8Y+OkLNN7arlDCSWWiSYfq+7dLW9jLDY2UG+T6ZzuSy2dKNecchgRj6eiSsN0GxW8GzVEyCIQ7vjcuZxL3cUVN62Tx4931OyeLOFaEqv+090FVdy+w51Zra3XncDO31sK7JYPyc/WAD+FrWVbXTZgrBoN/3H448U+Xm69CrbrnqvHLUuqtpWIIkETgR4iQAebZt2Ulq21bWxuxndaO2/W17i8rDu3VONtygBA54x6itBh4b9D+iUmPTo8BeXHcyLg8dvXLCGmVmt4Dn0pRksBOq7Esbh1NlO3cqRx+aw7edtyDy8Hj1/NPxUff9F3V7cGLayAvkndTL+/L5lfJOa+QdWPsO910k5oTT0RIt1GI6J+jIhgMlbFEI8DO2D3QObxqv/s2j1K2kuaEQGqHsuYYkUzgspCO7gKlh/M6+gxHjgSmY9agy6HiNADM8TXwUkKGb8QQKCJ5BUwrM8K+l1rFNL9bcyVxXtVrzOcPJGNBbnjONwhq5gcpOekcVkRkTdJNn6jWnKJUzzYP9fQ81nF/lRVCTQUvE0M2KWjdETWFAy6y+Oh3eVIqxHYsY0g8rwYjyqYNBphDBnpWMicJBdelq1A3h+iKtbRKVabXBHa/0vv8p0flwUhucVwq2aNdx3yb5mTV8uKGGCykUBDIX2Uw2YOaIlBOXPvXMNSmM0HAJHeeHEnn6U2J/+stif3SyDvK2LMEttgxsL3FNpVDglsZWY9OVpdmInv4HFOSOau4TAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ5BcHRvc0ZyYW1ld29yawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABC0FwdG9zU3RkbGliAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEKTW92ZVN0ZGxpYgA=
oRzrCwYAAAAMAQAMAgwgAyxJBHUOBYMBhwEHigLaAgjkBEAGpAVQEPQF7gEK4gcnDIkI7wEN+AkIAAABAQECAQMBBAEFAAYGAAAHBwAACAgAAAkIAAQLBwAFFQQCAwEAAQEeCAAACgABAAAMAgMAAA0EAwAADgUDAAUYBwECAwADGQkAAAUaCgMCAwAFGwMMAgMEBRwODwIDAAUdDhACAwACHxIDAQAFIBMUAgMABAYGBgcGCAYJBgoRCwYBBQEDBQYMCAQDCAQDAAIGDAMEBgwFCAQDAggBCAABBgsFAgkACQEFAwgBBQcIAggAAQYMAwcLBQIJAAkBCQAJAQELBQIIAQgAAQsFAgkACQEFBQgBBggABwgCCAACBgsFAgkACQEJAAEBAQYJAQEIBgMGDAUDAgcLBQIJAAkBCQABCQEBCAAHVGlja2V0cwphcHRvc19jb2luBGNvaW4Gc2lnbmVyBnN0cmluZxF0YWJsZV93aXRoX2xlbmd0aA1Db25jZXJ0VGlja2V0DlNlYXRJZGVudGlmaWVyB1RoZWF0ZXIOVGlja2V0RW52ZWxvcGUWYXZhaWxhYmxlX3RpY2tldF9jb3VudAZTdHJpbmcNY3JlYXRlX3RpY2tldAxpbml0X3RoZWF0ZXIPcHVyY2hhc2VfdGlja2V0CmlkZW50aWZpZXILdGlja2V0X2NvZGUFcHJpY2UDcm93C3NlYXRfbnVtYmVyEWF2YWlsYWJsZV90aWNrZXRzD1RhYmxlV2l0aExlbmd0aAltYXhfc2VhdHMHdGlja2V0cwZsZW5ndGgKYWRkcmVzc19vZgNhZGQDbmV3CGNvbnRhaW5zBmJvcnJvdwlBcHRvc0NvaW4IdHJhbnNmZXIGcmVtb3ZlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQMIBwAAAAAAAAADCAUAAAAAAAAAAwgEAAAAAAAAAAMIAwAAAAAAAAADCAYAAAAAAAAAAwgCAAAAAAAAAAMIAQAAAAAAAAADCAAAAAAAAAAAEmFwdG9zOjptZXRhZGF0YV92MdkBCAAAAAAAAAAACUVOT19WRU5VRQABAAAAAAAAAAtFTk9fVElDS0VUUwACAAAAAAAAAAxFTk9fRU5WRUxPUEUAAwAAAAAAAAAVRUlOVkFMSURfVElDS0VUX0NPVU5UAAQAAAAAAAAAD0VJTlZBTElEX1RJQ0tFVAAFAAAAAAAAAA5FSU5WQUxJRF9QUklDRQAGAAAAAAAAAApFTUFYX1NFQVRTAAcAAAAAAAAAEEVJTlZBTElEX0JBTEFOQ0UAAAEWYXZhaWxhYmxlX3RpY2tldF9jb3VudAEBAAACAw8IARAIBBEDAQICEggEEwMCAgIUCwUCCAEIABYDAwIBFwoIAAABAAECAwULACsCEAA4AAIBAQQBAggpCwARBQwHCgcpAgQHBQkHBycKBxEADAULByoCDAgLBQoIEAEUIwQWBRoLCAEHBCcLAQsCEgEMBgoGCwMLBBIADAkLCA8ACwYLCTgBAgIBBAALCDgCDAILAAsCCwESAi0CAgMBBAICAw03CgARBQwECwILAxIBDAUKASoCDAcKBxAACgU4AwQQBRYLBwELAAEHAicKBxAACgU4BAwGCgALAQsGEAIUOAULBw8ACwU4BgwICgQpAyAELwsAQBUAAAAAAAAAABIDLQMFMQsAAQsEKgMPAwsIRBUCAgACAQACAwAA
/// The original source code is https://github.com/magnum6actual/Aptos-Tutorial
module TicketTutorial::Tickets {
use std::signer;
use std::vector;
use std::string;
use aptos_framework::coin;
use aptos_framework::aptos_coin::AptosCoin;
#[test_only]
use aptos_framework::account;
use aptos_std::table_with_length;
const ENO_VENUE: u64 = 0;
const ENO_TICKETS: u64 = 1;
const ENO_ENVELOPE: u64 = 2;
const EINVALID_TICKET_COUNT: u64 = 3;
const EINVALID_TICKET: u64 = 4;
const EINVALID_PRICE: u64 = 5;
const EMAX_SEATS: u64 = 6;
const EINVALID_BALANCE: u64 = 7;
struct SeatIdentifier has store, drop, copy {
row: string::String,
seat_number: u64,
}
struct ConcertTicket has store, drop {
identifier: SeatIdentifier,
ticket_code: string::String,
price: u64,
}
struct Theater has key {
available_tickets: table_with_length::TableWithLength<SeatIdentifier, ConcertTicket>,
max_seats: u64,
}
struct TicketEnvelope has key {
tickets: vector<ConcertTicket>,
}
public entry fun init_theater(vanue_owner: &signer, max_seats: u64) {
let available_tickets = table_with_length::new<SeatIdentifier, ConcertTicket>();
move_to<Theater>(vanue_owner, Theater {available_tickets, max_seats});
}
public entry fun create_ticket(
seller: &signer,
row: string::String,
seat_number: u64,
ticket_code: string::String,
price: u64,
) acquires Theater {
let seller_addr = signer::address_of(seller);
assert!(exists<Theater>(seller_addr), ENO_VENUE);
let current_seat_count = available_ticket_count(seller_addr);
let theater = borrow_global_mut<Theater>(seller_addr);
assert!(current_seat_count < theater.max_seats, EMAX_SEATS);
let identifier = SeatIdentifier { row, seat_number };
let ticket = ConcertTicket {
identifier,
ticket_code,
price,
};
table_with_length::add(&mut theater.available_tickets, identifier, ticket)
}
public entry fun purchase_ticket(buyer: &signer, seller_addr: address, row: string::String, seat_number: u64) acquires Theater, TicketEnvelope {
let buyer_addr = signer::address_of(buyer);
let target_seat_id = SeatIdentifier { row, seat_number };
let theater = borrow_global_mut<Theater>(seller_addr);
assert!(table_with_length::contains(&theater.available_tickets, target_seat_id), EINVALID_TICKET);
let target_ticket = table_with_length::borrow(&theater.available_tickets, target_seat_id);
coin::transfer<AptosCoin>(buyer, seller_addr, target_ticket.price);
let ticket = table_with_length::remove(&mut theater.available_tickets, target_seat_id);
if (!exists<TicketEnvelope>(buyer_addr)) {
move_to(buyer, TicketEnvelope{tickets: vector::empty()});
};
let envelop = borrow_global_mut<TicketEnvelope>(buyer_addr);
vector::push_back(&mut envelop.tickets, ticket);
}
#[view]
public fun available_ticket_count(seller_addr: address): u64 acquires Theater
{
let theater = borrow_global<Theater>(seller_addr);
table_with_length::length<SeatIdentifier, ConcertTicket>(&theater.available_tickets)
}
#[test(seller = @0x3, buyer = @0x2, aptos_framework = @aptos_framework)]
public entry fun sender_can_buy_ticket(seller: signer, buyer: signer, aptos_framework: &signer) acquires Theater, TicketEnvelope
{
let seller_addr = signer::address_of(&seller);
// initialize the theater
init_theater(&seller, 3);
assert!(exists<Theater>(seller_addr), ENO_VENUE);
// create some tickets
create_ticket(&seller, string::utf8(b"A"), 24, string::utf8(b"AB43C7F"), 15);
create_ticket(&seller, string::utf8(b"A"), 25, string::utf8(b"AB43CFD"), 15);
create_ticket(&seller, string::utf8(b"A"), 26, string::utf8(b"AB13C7F"), 20);
// verify we have 3 tickets now
assert!(available_ticket_count(seller_addr) == 3, EINVALID_TICKET_COUNT);
// initialize & fund account to buy tickets
account::create_account_for_test(signer::address_of(&seller));
account::create_account_for_test(signer::address_of(&buyer));
let (burn_cap, mint_cap) = aptos_framework::aptos_coin::initialize_for_test(aptos_framework);
coin::register<AptosCoin>(&seller);
coin::register<AptosCoin>(&buyer);
coin::deposit(signer::address_of(&buyer), coin::mint(100, &mint_cap));
assert!(coin::balance<AptosCoin>(signer::address_of(&buyer)) == 100, EINVALID_BALANCE);
// buy a ticket and confirm account balance changes
purchase_ticket(&buyer, seller_addr, string::utf8(b"A"), 24);
assert!(exists<TicketEnvelope>(signer::address_of(&buyer)), ENO_ENVELOPE);
assert!(coin::balance<AptosCoin>(signer::address_of(&buyer)) == 85, EINVALID_BALANCE);
assert!(coin::balance<AptosCoin>(signer::address_of(&seller)) == 15, EINVALID_BALANCE);
assert!(available_ticket_count(seller_addr) == 2, EINVALID_TICKET_COUNT);
// buy a second ticket & ensure balance has changed by 20
purchase_ticket(&buyer, seller_addr, string::utf8(b"A"), 26);
assert!(coin::balance<AptosCoin>(signer::address_of(&buyer)) == 65, EINVALID_BALANCE);
assert!(coin::balance<AptosCoin>(signer::address_of(&seller)) == 35, EINVALID_BALANCE);
coin::destroy_burn_cap(burn_cap);
coin::destroy_mint_cap(mint_cap);
}
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "6101be61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c806396e4ee3d14610038575b5f80fd5b610052600480360381019061004d91906100b4565b610068565b60405161005f9190610101565b60405180910390f35b5f81836100759190610147565b905092915050565b5f80fd5b5f819050919050565b61009381610081565b811461009d575f80fd5b50565b5f813590506100ae8161008a565b92915050565b5f80604083850312156100ca576100c961007d565b5b5f6100d7858286016100a0565b92505060206100e8858286016100a0565b9150509250929050565b6100fb81610081565b82525050565b5f6020820190506101145f8301846100f2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61015182610081565b915061015c83610081565b925082820261016a81610081565b915082820484148315176101815761018061011a565b5b509291505056fea26469706673582212206f9d8a461db4e2b455c9b182f5e4b1dfea31b610911328d6d1f706e0a0aceae064736f6c63430008190033",
"opcodes": "PUSH2 0x1BE PUSH2 0x4D PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x41 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x96E4EE3D EQ PUSH2 0x38 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x52 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4D SWAP2 SWAP1 PUSH2 0xB4 JUMP JUMPDEST PUSH2 0x68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F SWAP2 SWAP1 PUSH2 0x101 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 DUP2 DUP4 PUSH2 0x75 SWAP2 SWAP1 PUSH2 0x147 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x93 DUP2 PUSH2 0x81 JUMP JUMPDEST DUP2 EQ PUSH2 0x9D JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xAE DUP2 PUSH2 0x8A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCA JUMPI PUSH2 0xC9 PUSH2 0x7D JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0xD7 DUP6 DUP3 DUP7 ADD PUSH2 0xA0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xE8 DUP6 DUP3 DUP7 ADD PUSH2 0xA0 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0xFB DUP2 PUSH2 0x81 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x114 PUSH0 DUP4 ADD DUP5 PUSH2 0xF2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH2 0x151 DUP3 PUSH2 0x81 JUMP JUMPDEST SWAP2 POP PUSH2 0x15C DUP4 PUSH2 0x81 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 MUL PUSH2 0x16A DUP2 PUSH2 0x81 JUMP JUMPDEST SWAP2 POP DUP3 DUP3 DIV DUP5 EQ DUP4 ISZERO OR PUSH2 0x181 JUMPI PUSH2 0x180 PUSH2 0x11A JUMP JUMPDEST JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0x9D8A461DB4E2B455C9B182F5E4B1DFEA BALANCE 0xB6 LT SWAP2 SGT 0x28 0xD6 0xD1 0xF7 MOD 0xE0 LOG0 0xAC 0xEA 0xE0 PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ",
"sourceMap": "197:156:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {
"@convert_15": {
"entryPoint": 104,
"id": 15,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_uint256": {
"entryPoint": 160,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_uint256t_uint256": {
"entryPoint": 180,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"abi_encode_t_uint256_to_t_uint256_fromStack_library": {
"entryPoint": 242,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed": {
"entryPoint": 257,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"allocate_unbounded": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
},
"checked_mul_t_uint256": {
"entryPoint": 327,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"cleanup_t_uint256": {
"entryPoint": 129,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"panic_error_0x11": {
"entryPoint": 282,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
"entryPoint": 125,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"validator_revert_t_uint256": {
"entryPoint": 138,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
}
},
"generatedSources": [
{
"ast": {
"nativeSrc": "0:2145:1",
"nodeType": "YulBlock",
"src": "0:2145:1",
"statements": [
{
"body": {
"nativeSrc": "47:35:1",
"nodeType": "YulBlock",
"src": "47:35:1",
"statements": [
{
"nativeSrc": "57:19:1",
"nodeType": "YulAssignment",
"src": "57:19:1",
"value": {
"arguments": [
{
"kind": "number",
"nativeSrc": "73:2:1",
"nodeType": "YulLiteral",
"src": "73:2:1",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "67:5:1",
"nodeType": "YulIdentifier",
"src": "67:5:1"
},
"nativeSrc": "67:9:1",
"nodeType": "YulFunctionCall",
"src": "67:9:1"
},
"variableNames": [
{
"name": "memPtr",
"nativeSrc": "57:6:1",
"nodeType": "YulIdentifier",
"src": "57:6:1"
}
]
}
]
},
"name": "allocate_unbounded",
"nativeSrc": "7:75:1",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nativeSrc": "40:6:1",
"nodeType": "YulTypedName",
"src": "40:6:1",
"type": ""
}
],
"src": "7:75:1"
},
{
"body": {
"nativeSrc": "177:28:1",
"nodeType": "YulBlock",
"src": "177:28:1",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "194:1:1",
"nodeType": "YulLiteral",
"src": "194:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "197:1:1",
"nodeType": "YulLiteral",
"src": "197:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "187:6:1",
"nodeType": "YulIdentifier",
"src": "187:6:1"
},
"nativeSrc": "187:12:1",
"nodeType": "YulFunctionCall",
"src": "187:12:1"
},
"nativeSrc": "187:12:1",
"nodeType": "YulExpressionStatement",
"src": "187:12:1"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "88:117:1",
"nodeType": "YulFunctionDefinition",
"src": "88:117:1"
},
{
"body": {
"nativeSrc": "300:28:1",
"nodeType": "YulBlock",
"src": "300:28:1",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "317:1:1",
"nodeType": "YulLiteral",
"src": "317:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "320:1:1",
"nodeType": "YulLiteral",
"src": "320:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "310:6:1",
"nodeType": "YulIdentifier",
"src": "310:6:1"
},
"nativeSrc": "310:12:1",
"nodeType": "YulFunctionCall",
"src": "310:12:1"
},
"nativeSrc": "310:12:1",
"nodeType": "YulExpressionStatement",
"src": "310:12:1"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nativeSrc": "211:117:1",
"nodeType": "YulFunctionDefinition",
"src": "211:117:1"
},
{
"body": {
"nativeSrc": "379:32:1",
"nodeType": "YulBlock",
"src": "379:32:1",
"statements": [
{
"nativeSrc": "389:16:1",
"nodeType": "YulAssignment",
"src": "389:16:1",
"value": {
"name": "value",
"nativeSrc": "400:5:1",
"nodeType": "YulIdentifier",
"src": "400:5:1"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "389:7:1",
"nodeType": "YulIdentifier",
"src": "389:7:1"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nativeSrc": "334:77:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "361:5:1",
"nodeType": "YulTypedName",
"src": "361:5:1",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "371:7:1",
"nodeType": "YulTypedName",
"src": "371:7:1",
"type": ""
}
],
"src": "334:77:1"
},
{
"body": {
"nativeSrc": "460:79:1",
"nodeType": "YulBlock",
"src": "460:79:1",
"statements": [
{
"body": {
"nativeSrc": "517:16:1",
"nodeType": "YulBlock",
"src": "517:16:1",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "526:1:1",
"nodeType": "YulLiteral",
"src": "526:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "529:1:1",
"nodeType": "YulLiteral",
"src": "529:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "519:6:1",
"nodeType": "YulIdentifier",
"src": "519:6:1"
},
"nativeSrc": "519:12:1",
"nodeType": "YulFunctionCall",
"src": "519:12:1"
},
"nativeSrc": "519:12:1",
"nodeType": "YulExpressionStatement",
"src": "519:12:1"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "483:5:1",
"nodeType": "YulIdentifier",
"src": "483:5:1"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "508:5:1",
"nodeType": "YulIdentifier",
"src": "508:5:1"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "490:17:1",
"nodeType": "YulIdentifier",
"src": "490:17:1"
},
"nativeSrc": "490:24:1",
"nodeType": "YulFunctionCall",
"src": "490:24:1"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "480:2:1",
"nodeType": "YulIdentifier",
"src": "480:2:1"
},
"nativeSrc": "480:35:1",
"nodeType": "YulFunctionCall",
"src": "480:35:1"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "473:6:1",
"nodeType": "YulIdentifier",
"src": "473:6:1"
},
"nativeSrc": "473:43:1",
"nodeType": "YulFunctionCall",
"src": "473:43:1"
},
"nativeSrc": "470:63:1",
"nodeType": "YulIf",
"src": "470:63:1"
}
]
},
"name": "validator_revert_t_uint256",
"nativeSrc": "417:122:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "453:5:1",
"nodeType": "YulTypedName",
"src": "453:5:1",
"type": ""
}
],
"src": "417:122:1"
},
{
"body": {
"nativeSrc": "597:87:1",
"nodeType": "YulBlock",
"src": "597:87:1",
"statements": [
{
"nativeSrc": "607:29:1",
"nodeType": "YulAssignment",
"src": "607:29:1",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "629:6:1",
"nodeType": "YulIdentifier",
"src": "629:6:1"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "616:12:1",
"nodeType": "YulIdentifier",
"src": "616:12:1"
},
"nativeSrc": "616:20:1",
"nodeType": "YulFunctionCall",
"src": "616:20:1"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "607:5:1",
"nodeType": "YulIdentifier",
"src": "607:5:1"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "672:5:1",
"nodeType": "YulIdentifier",
"src": "672:5:1"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nativeSrc": "645:26:1",
"nodeType": "YulIdentifier",
"src": "645:26:1"
},
"nativeSrc": "645:33:1",
"nodeType": "YulFunctionCall",
"src": "645:33:1"
},
"nativeSrc": "645:33:1",
"nodeType": "YulExpressionStatement",
"src": "645:33:1"
}
]
},
"name": "abi_decode_t_uint256",
"nativeSrc": "545:139:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "575:6:1",
"nodeType": "YulTypedName",
"src": "575:6:1",
"type": ""
},
{
"name": "end",
"nativeSrc": "583:3:1",
"nodeType": "YulTypedName",
"src": "583:3:1",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "591:5:1",
"nodeType": "YulTypedName",
"src": "591:5:1",
"type": ""
}
],
"src": "545:139:1"
},
{
"body": {
"nativeSrc": "773:391:1",
"nodeType": "YulBlock",
"src": "773:391:1",
"statements": [
{
"body": {
"nativeSrc": "819:83:1",
"nodeType": "YulBlock",
"src": "819:83:1",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "821:77:1",
"nodeType": "YulIdentifier",
"src": "821:77:1"
},
"nativeSrc": "821:79:1",
"nodeType": "YulFunctionCall",
"src": "821:79:1"
},
"nativeSrc": "821:79:1",
"nodeType": "YulExpressionStatement",
"src": "821:79:1"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "794:7:1",
"nodeType": "YulIdentifier",
"src": "794:7:1"
},
{
"name": "headStart",
"nativeSrc": "803:9:1",
"nodeType": "YulIdentifier",
"src": "803:9:1"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "790:3:1",
"nodeType": "YulIdentifier",
"src": "790:3:1"
},
"nativeSrc": "790:23:1",
"nodeType": "YulFunctionCall",
"src": "790:23:1"
},
{
"kind": "number",
"nativeSrc": "815:2:1",
"nodeType": "YulLiteral",
"src": "815:2:1",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "786:3:1",
"nodeType": "YulIdentifier",
"src": "786:3:1"
},
"nativeSrc": "786:32:1",
"nodeType": "YulFunctionCall",
"src": "786:32:1"
},
"nativeSrc": "783:119:1",
"nodeType": "YulIf",
"src": "783:119:1"
},
{
"nativeSrc": "912:117:1",
"nodeType": "YulBlock",
"src": "912:117:1",
"statements": [
{
"nativeSrc": "927:15:1",
"nodeType": "YulVariableDeclaration",
"src": "927:15:1",
"value": {
"kind": "number",
"nativeSrc": "941:1:1",
"nodeType": "YulLiteral",
"src": "941:1:1",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "931:6:1",
"nodeType": "YulTypedName",
"src": "931:6:1",
"type": ""
}
]
},
{
"nativeSrc": "956:63:1",
"nodeType": "YulAssignment",
"src": "956:63:1",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "991:9:1",
"nodeType": "YulIdentifier",
"src": "991:9:1"
},
{
"name": "offset",
"nativeSrc": "1002:6:1",
"nodeType": "YulIdentifier",
"src": "1002:6:1"
}
],
"functionName": {
"name": "add",
"nativeSrc": "987:3:1",
"nodeType": "YulIdentifier",
"src": "987:3:1"
},
"nativeSrc": "987:22:1",
"nodeType": "YulFunctionCall",
"src": "987:22:1"
},
{
"name": "dataEnd",
"nativeSrc": "1011:7:1",
"nodeType": "YulIdentifier",
"src": "1011:7:1"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "966:20:1",
"nodeType": "YulIdentifier",
"src": "966:20:1"
},
"nativeSrc": "966:53:1",
"nodeType": "YulFunctionCall",
"src": "966:53:1"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "956:6:1",
"nodeType": "YulIdentifier",
"src": "956:6:1"
}
]
}
]
},
{
"nativeSrc": "1039:118:1",
"nodeType": "YulBlock",
"src": "1039:118:1",
"statements": [
{
"nativeSrc": "1054:16:1",
"nodeType": "YulVariableDeclaration",
"src": "1054:16:1",
"value": {
"kind": "number",
"nativeSrc": "1068:2:1",
"nodeType": "YulLiteral",
"src": "1068:2:1",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nativeSrc": "1058:6:1",
"nodeType": "YulTypedName",
"src": "1058:6:1",
"type": ""
}
]
},
{
"nativeSrc": "1084:63:1",
"nodeType": "YulAssignment",
"src": "1084:63:1",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1119:9:1",
"nodeType": "YulIdentifier",
"src": "1119:9:1"
},
{
"name": "offset",
"nativeSrc": "1130:6:1",
"nodeType": "YulIdentifier",
"src": "1130:6:1"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1115:3:1",
"nodeType": "YulIdentifier",
"src": "1115:3:1"
},
"nativeSrc": "1115:22:1",
"nodeType": "YulFunctionCall",
"src": "1115:22:1"
},
{
"name": "dataEnd",
"nativeSrc": "1139:7:1",
"nodeType": "YulIdentifier",
"src": "1139:7:1"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "1094:20:1",
"nodeType": "YulIdentifier",
"src": "1094:20:1"
},
"nativeSrc": "1094:53:1",
"nodeType": "YulFunctionCall",
"src": "1094:53:1"
},
"variableNames": [
{
"name": "value1",
"nativeSrc": "1084:6:1",
"nodeType": "YulIdentifier",
"src": "1084:6:1"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256t_uint256",
"nativeSrc": "690:474:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "735:9:1",
"nodeType": "YulTypedName",
"src": "735:9:1",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "746:7:1",
"nodeType": "YulTypedName",
"src": "746:7:1",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "758:6:1",
"nodeType": "YulTypedName",
"src": "758:6:1",
"type": ""
},
{
"name": "value1",
"nativeSrc": "766:6:1",
"nodeType": "YulTypedName",
"src": "766:6:1",
"type": ""
}
],
"src": "690:474:1"
},
{
"body": {
"nativeSrc": "1243:53:1",
"nodeType": "YulBlock",
"src": "1243:53:1",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "1260:3:1",
"nodeType": "YulIdentifier",
"src": "1260:3:1"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "1283:5:1",
"nodeType": "YulIdentifier",
"src": "1283:5:1"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1265:17:1",
"nodeType": "YulIdentifier",
"src": "1265:17:1"
},
"nativeSrc": "1265:24:1",
"nodeType": "YulFunctionCall",
"src": "1265:24:1"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1253:6:1",
"nodeType": "YulIdentifier",
"src": "1253:6:1"
},
"nativeSrc": "1253:37:1",
"nodeType": "YulFunctionCall",
"src": "1253:37:1"
},
"nativeSrc": "1253:37:1",
"nodeType": "YulExpressionStatement",
"src": "1253:37:1"
}
]
},
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nativeSrc": "1170:126:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1231:5:1",
"nodeType": "YulTypedName",
"src": "1231:5:1",
"type": ""
},
{
"name": "pos",
"nativeSrc": "1238:3:1",
"nodeType": "YulTypedName",
"src": "1238:3:1",
"type": ""
}
],
"src": "1170:126:1"
},
{
"body": {
"nativeSrc": "1408:132:1",
"nodeType": "YulBlock",
"src": "1408:132:1",
"statements": [
{
"nativeSrc": "1418:26:1",
"nodeType": "YulAssignment",
"src": "1418:26:1",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "1430:9:1",
"nodeType": "YulIdentifier",
"src": "1430:9:1"
},
{
"kind": "number",
"nativeSrc": "1441:2:1",
"nodeType": "YulLiteral",
"src": "1441:2:1",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1426:3:1",
"nodeType": "YulIdentifier",
"src": "1426:3:1"
},
"nativeSrc": "1426:18:1",
"nodeType": "YulFunctionCall",
"src": "1426:18:1"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "1418:4:1",
"nodeType": "YulIdentifier",
"src": "1418:4:1"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "1506:6:1",
"nodeType": "YulIdentifier",
"src": "1506:6:1"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1519:9:1",
"nodeType": "YulIdentifier",
"src": "1519:9:1"
},
{
"kind": "number",
"nativeSrc": "1530:1:1",
"nodeType": "YulLiteral",
"src": "1530:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1515:3:1",
"nodeType": "YulIdentifier",
"src": "1515:3:1"
},
"nativeSrc": "1515:17:1",
"nodeType": "YulFunctionCall",
"src": "1515:17:1"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nativeSrc": "1454:51:1",
"nodeType": "YulIdentifier",
"src": "1454:51:1"
},
"nativeSrc": "1454:79:1",
"nodeType": "YulFunctionCall",
"src": "1454:79:1"
},
"nativeSrc": "1454:79:1",
"nodeType": "YulExpressionStatement",
"src": "1454:79:1"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed",
"nativeSrc": "1302:238:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "1380:9:1",
"nodeType": "YulTypedName",
"src": "1380:9:1",
"type": ""
},
{
"name": "value0",
"nativeSrc": "1392:6:1",
"nodeType": "YulTypedName",
"src": "1392:6:1",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "1403:4:1",
"nodeType": "YulTypedName",
"src": "1403:4:1",
"type": ""
}
],
"src": "1302:238:1"
},
{
"body": {
"nativeSrc": "1574:152:1",
"nodeType": "YulBlock",
"src": "1574:152:1",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "1591:1:1",
"nodeType": "YulLiteral",
"src": "1591:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "1594:77:1",
"nodeType": "YulLiteral",
"src": "1594:77:1",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1584:6:1",
"nodeType": "YulIdentifier",
"src": "1584:6:1"
},
"nativeSrc": "1584:88:1",
"nodeType": "YulFunctionCall",
"src": "1584:88:1"
},
"nativeSrc": "1584:88:1",
"nodeType": "YulExpressionStatement",
"src": "1584:88:1"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "1688:1:1",
"nodeType": "YulLiteral",
"src": "1688:1:1",
"type": "",
"value": "4"
},
{
"kind": "number",
"nativeSrc": "1691:4:1",
"nodeType": "YulLiteral",
"src": "1691:4:1",
"type": "",
"value": "0x11"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1681:6:1",
"nodeType": "YulIdentifier",
"src": "1681:6:1"
},
"nativeSrc": "1681:15:1",
"nodeType": "YulFunctionCall",
"src": "1681:15:1"
},
"nativeSrc": "1681:15:1",
"nodeType": "YulExpressionStatement",
"src": "1681:15:1"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "1712:1:1",
"nodeType": "YulLiteral",
"src": "1712:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "1715:4:1",
"nodeType": "YulLiteral",
"src": "1715:4:1",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "1705:6:1",
"nodeType": "YulIdentifier",
"src": "1705:6:1"
},
"nativeSrc": "1705:15:1",
"nodeType": "YulFunctionCall",
"src": "1705:15:1"
},
"nativeSrc": "1705:15:1",
"nodeType": "YulExpressionStatement",
"src": "1705:15:1"
}
]
},
"name": "panic_error_0x11",
"nativeSrc": "1546:180:1",
"nodeType": "YulFunctionDefinition",
"src": "1546:180:1"
},
{
"body": {
"nativeSrc": "1780:362:1",
"nodeType": "YulBlock",
"src": "1780:362:1",
"statements": [
{
"nativeSrc": "1790:25:1",
"nodeType": "YulAssignment",
"src": "1790:25:1",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "1813:1:1",
"nodeType": "YulIdentifier",
"src": "1813:1:1"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1795:17:1",
"nodeType": "YulIdentifier",
"src": "1795:17:1"
},
"nativeSrc": "1795:20:1",
"nodeType": "YulFunctionCall",
"src": "1795:20:1"
},
"variableNames": [
{
"name": "x",
"nativeSrc": "1790:1:1",
"nodeType": "YulIdentifier",
"src": "1790:1:1"
}
]
},
{
"nativeSrc": "1824:25:1",
"nodeType": "YulAssignment",
"src": "1824:25:1",
"value": {
"arguments": [
{
"name": "y",
"nativeSrc": "1847:1:1",
"nodeType": "YulIdentifier",
"src": "1847:1:1"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1829:17:1",
"nodeType": "YulIdentifier",
"src": "1829:17:1"
},
"nativeSrc": "1829:20:1",
"nodeType": "YulFunctionCall",
"src": "1829:20:1"
},
"variableNames": [
{
"name": "y",
"nativeSrc": "1824:1:1",
"nodeType": "YulIdentifier",
"src": "1824:1:1"
}
]
},
{
"nativeSrc": "1858:28:1",
"nodeType": "YulVariableDeclaration",
"src": "1858:28:1",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "1881:1:1",
"nodeType": "YulIdentifier",
"src": "1881:1:1"
},
{
"name": "y",
"nativeSrc": "1884:1:1",
"nodeType": "YulIdentifier",
"src": "1884:1:1"
}
],
"functionName": {
"name": "mul",
"nativeSrc": "1877:3:1",
"nodeType": "YulIdentifier",
"src": "1877:3:1"
},
"nativeSrc": "1877:9:1",
"nodeType": "YulFunctionCall",
"src": "1877:9:1"
},
"variables": [
{
"name": "product_raw",
"nativeSrc": "1862:11:1",
"nodeType": "YulTypedName",
"src": "1862:11:1",
"type": ""
}
]
},
{
"nativeSrc": "1895:41:1",
"nodeType": "YulAssignment",
"src": "1895:41:1",
"value": {
"arguments": [
{
"name": "product_raw",
"nativeSrc": "1924:11:1",
"nodeType": "YulIdentifier",
"src": "1924:11:1"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1906:17:1",
"nodeType": "YulIdentifier",
"src": "1906:17:1"
},
"nativeSrc": "1906:30:1",
"nodeType": "YulFunctionCall",
"src": "1906:30:1"
},
"variableNames": [
{
"name": "product",
"nativeSrc": "1895:7:1",
"nodeType": "YulIdentifier",
"src": "1895:7:1"
}
]
},
{
"body": {
"nativeSrc": "2113:22:1",
"nodeType": "YulBlock",
"src": "2113:22:1",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nativeSrc": "2115:16:1",
"nodeType": "YulIdentifier",
"src": "2115:16:1"
},
"nativeSrc": "2115:18:1",
"nodeType": "YulFunctionCall",
"src": "2115:18:1"
},
"nativeSrc": "2115:18:1",
"nodeType": "YulExpressionStatement",
"src": "2115:18:1"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "x",
"nativeSrc": "2046:1:1",
"nodeType": "YulIdentifier",
"src": "2046:1:1"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "2039:6:1",
"nodeType": "YulIdentifier",
"src": "2039:6:1"
},
"nativeSrc": "2039:9:1",
"nodeType": "YulFunctionCall",
"src": "2039:9:1"
},
{
"arguments": [
{
"name": "y",
"nativeSrc": "2069:1:1",
"nodeType": "YulIdentifier",
"src": "2069:1:1"
},
{
"arguments": [
{
"name": "product",
"nativeSrc": "2076:7:1",
"nodeType": "YulIdentifier",
"src": "2076:7:1"
},
{
"name": "x",
"nativeSrc": "2085:1:1",
"nodeType": "YulIdentifier",
"src": "2085:1:1"
}
],
"functionName": {
"name": "div",
"nativeSrc": "2072:3:1",
"nodeType": "YulIdentifier",
"src": "2072:3:1"
},
"nativeSrc": "2072:15:1",
"nodeType": "YulFunctionCall",
"src": "2072:15:1"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "2066:2:1",
"nodeType": "YulIdentifier",
"src": "2066:2:1"
},
"nativeSrc": "2066:22:1",
"nodeType": "YulFunctionCall",
"src": "2066:22:1"
}
],
"functionName": {
"name": "or",
"nativeSrc": "2019:2:1",
"nodeType": "YulIdentifier",
"src": "2019:2:1"
},
"nativeSrc": "2019:83:1",
"nodeType": "YulFunctionCall",
"src": "2019:83:1"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "1999:6:1",
"nodeType": "YulIdentifier",
"src": "1999:6:1"
},
"nativeSrc": "1999:113:1",
"nodeType": "YulFunctionCall",
"src": "1999:113:1"
},
"nativeSrc": "1996:139:1",
"nodeType": "YulIf",
"src": "1996:139:1"
}
]
},
"name": "checked_mul_t_uint256",
"nativeSrc": "1732:410:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nativeSrc": "1763:1:1",
"nodeType": "YulTypedName",
"src": "1763:1:1",
"type": ""
},
{
"name": "y",
"nativeSrc": "1766:1:1",
"nodeType": "YulTypedName",
"src": "1766:1:1",
"type": ""
}
],
"returnVariables": [
{
"name": "product",
"nativeSrc": "1772:7:1",
"nodeType": "YulTypedName",
"src": "1772:7:1",
"type": ""
}
],
"src": "1732:410:1"
}
]
},
"contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n let product_raw := mul(x, y)\n product := cleanup_t_uint256(product_raw)\n\n // overflow, if x != 0 and y != product/x\n if iszero(\n or(\n iszero(x),\n eq(y, div(product, x))\n )\n ) { panic_error_0x11() }\n\n }\n\n}\n",
"id": 1,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {},
"object": "7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c806396e4ee3d14610038575b5f80fd5b610052600480360381019061004d91906100b4565b610068565b60405161005f9190610101565b60405180910390f35b5f81836100759190610147565b905092915050565b5f80fd5b5f819050919050565b61009381610081565b811461009d575f80fd5b50565b5f813590506100ae8161008a565b92915050565b5f80604083850312156100ca576100c961007d565b5b5f6100d7858286016100a0565b92505060206100e8858286016100a0565b9150509250929050565b6100fb81610081565b82525050565b5f6020820190506101145f8301846100f2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61015182610081565b915061015c83610081565b925082820261016a81610081565b915082820484148315176101815761018061011a565b5b509291505056fea26469706673582212206f9d8a461db4e2b455c9b182f5e4b1dfea31b610911328d6d1f706e0a0aceae064736f6c63430008190033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x96E4EE3D EQ PUSH2 0x38 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x52 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4D SWAP2 SWAP1 PUSH2 0xB4 JUMP JUMPDEST PUSH2 0x68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F SWAP2 SWAP1 PUSH2 0x101 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 DUP2 DUP4 PUSH2 0x75 SWAP2 SWAP1 PUSH2 0x147 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x93 DUP2 PUSH2 0x81 JUMP JUMPDEST DUP2 EQ PUSH2 0x9D JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xAE DUP2 PUSH2 0x8A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCA JUMPI PUSH2 0xC9 PUSH2 0x7D JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0xD7 DUP6 DUP3 DUP7 ADD PUSH2 0xA0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xE8 DUP6 DUP3 DUP7 ADD PUSH2 0xA0 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0xFB DUP2 PUSH2 0x81 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x114 PUSH0 DUP4 ADD DUP5 PUSH2 0xF2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH2 0x151 DUP3 PUSH2 0x81 JUMP JUMPDEST SWAP2 POP PUSH2 0x15C DUP4 PUSH2 0x81 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 MUL PUSH2 0x16A DUP2 PUSH2 0x81 JUMP JUMPDEST SWAP2 POP DUP3 DUP3 DIV DUP5 EQ DUP4 ISZERO OR PUSH2 0x181 JUMPI PUSH2 0x180 PUSH2 0x11A JUMP JUMPDEST JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0x9D8A461DB4E2B455C9B182F5E4B1DFEA BALANCE 0xB6 LT SWAP2 SGT 0x28 0xD6 0xD1 0xF7 MOD 0xE0 LOG0 0xAC 0xEA 0xE0 PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ",
"sourceMap": "197:156:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;218:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;290:20;333:14;324:6;:23;;;;:::i;:::-;317:30;;218:133;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1265:24;1283:5;1265:24;:::i;:::-;1260:3;1253:37;1170:126;;:::o;1302:238::-;1403:4;1441:2;1430:9;1426:18;1418:26;;1454:79;1530:1;1519:9;1515:17;1506:6;1454:79;:::i;:::-;1302:238;;;;:::o;1546:180::-;1594:77;1591:1;1584:88;1691:4;1688:1;1681:15;1715:4;1712:1;1705:15;1732:410;1772:7;1795:20;1813:1;1795:20;:::i;:::-;1790:25;;1829:20;1847:1;1829:20;:::i;:::-;1824:25;;1884:1;1881;1877:9;1906:30;1924:11;1906:30;:::i;:::-;1895:41;;2085:1;2076:7;2072:15;2069:1;2066:22;2046:1;2039:9;2019:83;1996:139;;2115:18;;:::i;:::-;1996:139;1780:362;1732:410;;;;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "89200",
"executionCost": "161",
"totalCost": "89361"
},
"external": {
"convert(uint256,uint256)": "infinite"
}
},
"methodIdentifiers": {
"convert(uint256,uint256)": "96e4ee3d"
}
},
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "conversionRate",
"type": "uint256"
}
],
"name": "convert",
"outputs": [
{
"internalType": "uint256",
"name": "convertedAmount",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.8.25+commit.b61c2a91"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "conversionRate",
"type": "uint256"
}
],
"name": "convert",
"outputs": [
{
"internalType": "uint256",
"name": "convertedAmount",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"ConvertLib.sol": "ConvertLib"
},
"evmVersion": "cancun",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"ConvertLib.sol": {
"keccak256": "0x3ee33e6e8cf55bad996568ba3cd311ac174c8b4fd9fd51cd6aabf6000d5c9643",
"license": "MIT",
"urls": [
"bzz-raw://de003f417b98896601d7f63ab7cee95f38f237af4d56712019221644954a7509",
"dweb:/ipfs/QmQb7FVshbroABJCpCsn6hf2gu7nqUdXvFHkWNwjRSVwkm"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": "<address>"
}
},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": "<address>"
}
},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": "<address>"
}
},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": "<address>"
}
},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": "<address>"
}
},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": "<address>"
}
},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": "<address>"
}
},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"functionDebugData": {
"@_42": {
"entryPoint": null,
"id": 42,
"parameterSlots": 0,
"returnSlots": 0
}
},
"generatedSources": [],
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": [
{
"length": 20,
"start": 309
}
]
}
},
"object": "6080604052348015600e575f80fd5b506127105f803273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506105d78061005f5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c80637bd703e81461004357806390b98a1114610073578063f8b2cb4f146100a3575b5f80fd5b61005d60048036038101906100589190610360565b6100d3565b60405161006a91906103a3565b60405180910390f35b61008d600480360381019061008891906103e6565b61015c565b60405161009a919061043e565b60405180910390f35b6100bd60048036038101906100b89190610360565b6102bd565b6040516100ca91906103a3565b60405180910390f35b5f73__$c1e9661f796f9214b5c8076e394fd5a419$__6396e4ee3d6100f7846102bd565b60026040518363ffffffff1660e01b81526004016101169291906104a8565b602060405180830381865af4158015610131573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061015591906104e3565b9050919050565b5f815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156101a9575f90506102b7565b815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546101f4919061053b565b92505081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610246919061056e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516102aa91906103a3565b60405180910390a3600190505b92915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61032f82610306565b9050919050565b61033f81610325565b8114610349575f80fd5b50565b5f8135905061035a81610336565b92915050565b5f6020828403121561037557610374610302565b5b5f6103828482850161034c565b91505092915050565b5f819050919050565b61039d8161038b565b82525050565b5f6020820190506103b65f830184610394565b92915050565b6103c58161038b565b81146103cf575f80fd5b50565b5f813590506103e0816103bc565b92915050565b5f80604083850312156103fc576103fb610302565b5b5f6104098582860161034c565b925050602061041a858286016103d2565b9150509250929050565b5f8115159050919050565b61043881610424565b82525050565b5f6020820190506104515f83018461042f565b92915050565b6104608161038b565b82525050565b5f819050919050565b5f819050919050565b5f61049261048d61048884610466565b61046f565b61038b565b9050919050565b6104a281610478565b82525050565b5f6040820190506104bb5f830185610457565b6104c86020830184610499565b9392505050565b5f815190506104dd816103bc565b92915050565b5f602082840312156104f8576104f7610302565b5b5f610505848285016104cf565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6105458261038b565b91506105508361038b565b92508282039050818111156105685761056761050e565b5b92915050565b5f6105788261038b565b91506105838361038b565b925082820190508082111561059b5761059a61050e565b5b9291505056fea2646970667358221220d1bc4f81c05cce3769cc157fc9df9c4113adc0bc3934e33d318fb615fcd3897f64736f6c63430008190033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 PUSH0 DUP1 ORIGIN PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x5D7 DUP1 PUSH2 0x5F PUSH0 CODECOPY PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7BD703E8 EQ PUSH2 0x43 JUMPI DUP1 PUSH4 0x90B98A11 EQ PUSH2 0x73 JUMPI DUP1 PUSH4 0xF8B2CB4F EQ PUSH2 0xA3 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x5D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x58 SWAP2 SWAP1 PUSH2 0x360 JUMP JUMPDEST PUSH2 0xD3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6A SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x8D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x88 SWAP2 SWAP1 PUSH2 0x3E6 JUMP JUMPDEST PUSH2 0x15C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBD PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xB8 SWAP2 SWAP1 PUSH2 0x360 JUMP JUMPDEST PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCA SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH20 0x0 PUSH4 0x96E4EE3D PUSH2 0xF7 DUP5 PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x2 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x116 SWAP3 SWAP2 SWAP1 PUSH2 0x4A8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x131 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 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 0x155 SWAP2 SWAP1 PUSH2 0x4E3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 PUSH0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 SLOAD LT ISZERO PUSH2 0x1A9 JUMPI PUSH0 SWAP1 POP PUSH2 0x2B7 JUMP JUMPDEST DUP2 PUSH0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x53B JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD PUSH2 0x246 SWAP2 SWAP1 PUSH2 0x56E JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x2AA SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x32F DUP3 PUSH2 0x306 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x33F DUP2 PUSH2 0x325 JUMP JUMPDEST DUP2 EQ PUSH2 0x349 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x35A DUP2 PUSH2 0x336 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x375 JUMPI PUSH2 0x374 PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x382 DUP5 DUP3 DUP6 ADD PUSH2 0x34C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x39D DUP2 PUSH2 0x38B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x3B6 PUSH0 DUP4 ADD DUP5 PUSH2 0x394 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3C5 DUP2 PUSH2 0x38B JUMP JUMPDEST DUP2 EQ PUSH2 0x3CF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x3E0 DUP2 PUSH2 0x3BC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FC JUMPI PUSH2 0x3FB PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x409 DUP6 DUP3 DUP7 ADD PUSH2 0x34C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x41A DUP6 DUP3 DUP7 ADD PUSH2 0x3D2 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x438 DUP2 PUSH2 0x424 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x451 PUSH0 DUP4 ADD DUP5 PUSH2 0x42F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x460 DUP2 PUSH2 0x38B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x492 PUSH2 0x48D PUSH2 0x488 DUP5 PUSH2 0x466 JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH2 0x38B JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4A2 DUP2 PUSH2 0x478 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x4BB PUSH0 DUP4 ADD DUP6 PUSH2 0x457 JUMP JUMPDEST PUSH2 0x4C8 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x499 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP PUSH2 0x4DD DUP2 PUSH2 0x3BC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F8 JUMPI PUSH2 0x4F7 PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x505 DUP5 DUP3 DUP6 ADD PUSH2 0x4CF JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH2 0x545 DUP3 PUSH2 0x38B JUMP JUMPDEST SWAP2 POP PUSH2 0x550 DUP4 PUSH2 0x38B JUMP JUMPDEST SWAP3 POP DUP3 DUP3 SUB SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0x568 JUMPI PUSH2 0x567 PUSH2 0x50E JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x578 DUP3 PUSH2 0x38B JUMP JUMPDEST SWAP2 POP PUSH2 0x583 DUP4 PUSH2 0x38B JUMP JUMPDEST SWAP3 POP DUP3 DUP3 ADD SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x59B JUMPI PUSH2 0x59A PUSH2 0x50E JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 0xBC 0x4F DUP2 0xC0 TLOAD 0xCE CALLDATACOPY PUSH10 0xCC157FC9DF9C4113ADC0 0xBC CODECOPY CALLVALUE 0xE3 RETURNDATASIZE BALANCE DUP16 0xB6 ISZERO 0xFC 0xD3 DUP10 PUSH32 0x64736F6C63430008190033000000000000000000000000000000000000000000 ",
"sourceMap": "310:667:1:-:0;;;447:49;;;;;;;;;;487:5;465:8;:19;474:9;465:19;;;;;;;;;;;;;;;:27;;;;310:667;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {
"@getBalanceInEth_99": {
"entryPoint": 211,
"id": 99,
"parameterSlots": 1,
"returnSlots": 1
},
"@getBalance_111": {
"entryPoint": 701,
"id": 111,
"parameterSlots": 1,
"returnSlots": 1
},
"@sendCoin_83": {
"entryPoint": 348,
"id": 83,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_address": {
"entryPoint": 844,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_uint256": {
"entryPoint": 978,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_uint256_fromMemory": {
"entryPoint": 1231,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_address": {
"entryPoint": 864,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_addresst_uint256": {
"entryPoint": 998,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"abi_decode_tuple_t_uint256_fromMemory": {
"entryPoint": 1251,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_bool_to_t_bool_fromStack": {
"entryPoint": 1071,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library": {
"entryPoint": 1177,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_uint256_to_t_uint256_fromStack": {
"entryPoint": 916,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_uint256_to_t_uint256_fromStack_library": {
"entryPoint": 1111,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
"entryPoint": 1086,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
"entryPoint": 931,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_uint256_t_rational_2_by_1__to_t_uint256_t_uint256__fromStack_library_reversed": {
"entryPoint": 1192,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"allocate_unbounded": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
},
"checked_add_t_uint256": {
"entryPoint": 1390,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"checked_sub_t_uint256": {
"entryPoint": 1339,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"cleanup_t_address": {
"entryPoint": 805,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_bool": {
"entryPoint": 1060,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_rational_2_by_1": {
"entryPoint": 1126,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint160": {
"entryPoint": 774,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint256": {
"entryPoint": 907,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"convert_t_rational_2_by_1_to_t_uint256": {
"entryPoint": 1144,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"identity": {
"entryPoint": 1135,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"panic_error_0x11": {
"entryPoint": 1294,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
"entryPoint": 770,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"validator_revert_t_address": {
"entryPoint": 822,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"validator_revert_t_uint256": {
"entryPoint": 956,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
}
},
"generatedSources": [
{
"ast": {
"nativeSrc": "0:4869:2",
"nodeType": "YulBlock",
"src": "0:4869:2",
"statements": [
{
"body": {
"nativeSrc": "47:35:2",
"nodeType": "YulBlock",
"src": "47:35:2",
"statements": [
{
"nativeSrc": "57:19:2",
"nodeType": "YulAssignment",
"src": "57:19:2",
"value": {
"arguments": [
{
"kind": "number",
"nativeSrc": "73:2:2",
"nodeType": "YulLiteral",
"src": "73:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "67:5:2",
"nodeType": "YulIdentifier",
"src": "67:5:2"
},
"nativeSrc": "67:9:2",
"nodeType": "YulFunctionCall",
"src": "67:9:2"
},
"variableNames": [
{
"name": "memPtr",
"nativeSrc": "57:6:2",
"nodeType": "YulIdentifier",
"src": "57:6:2"
}
]
}
]
},
"name": "allocate_unbounded",
"nativeSrc": "7:75:2",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nativeSrc": "40:6:2",
"nodeType": "YulTypedName",
"src": "40:6:2",
"type": ""
}
],
"src": "7:75:2"
},
{
"body": {
"nativeSrc": "177:28:2",
"nodeType": "YulBlock",
"src": "177:28:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "194:1:2",
"nodeType": "YulLiteral",
"src": "194:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "197:1:2",
"nodeType": "YulLiteral",
"src": "197:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "187:6:2",
"nodeType": "YulIdentifier",
"src": "187:6:2"
},
"nativeSrc": "187:12:2",
"nodeType": "YulFunctionCall",
"src": "187:12:2"
},
"nativeSrc": "187:12:2",
"nodeType": "YulExpressionStatement",
"src": "187:12:2"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "88:117:2",
"nodeType": "YulFunctionDefinition",
"src": "88:117:2"
},
{
"body": {
"nativeSrc": "300:28:2",
"nodeType": "YulBlock",
"src": "300:28:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "317:1:2",
"nodeType": "YulLiteral",
"src": "317:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "320:1:2",
"nodeType": "YulLiteral",
"src": "320:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "310:6:2",
"nodeType": "YulIdentifier",
"src": "310:6:2"
},
"nativeSrc": "310:12:2",
"nodeType": "YulFunctionCall",
"src": "310:12:2"
},
"nativeSrc": "310:12:2",
"nodeType": "YulExpressionStatement",
"src": "310:12:2"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nativeSrc": "211:117:2",
"nodeType": "YulFunctionDefinition",
"src": "211:117:2"
},
{
"body": {
"nativeSrc": "379:81:2",
"nodeType": "YulBlock",
"src": "379:81:2",
"statements": [
{
"nativeSrc": "389:65:2",
"nodeType": "YulAssignment",
"src": "389:65:2",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "404:5:2",
"nodeType": "YulIdentifier",
"src": "404:5:2"
},
{
"kind": "number",
"nativeSrc": "411:42:2",
"nodeType": "YulLiteral",
"src": "411:42:2",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nativeSrc": "400:3:2",
"nodeType": "YulIdentifier",
"src": "400:3:2"
},
"nativeSrc": "400:54:2",
"nodeType": "YulFunctionCall",
"src": "400:54:2"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "389:7:2",
"nodeType": "YulIdentifier",
"src": "389:7:2"
}
]
}
]
},
"name": "cleanup_t_uint160",
"nativeSrc": "334:126:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "361:5:2",
"nodeType": "YulTypedName",
"src": "361:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "371:7:2",
"nodeType": "YulTypedName",
"src": "371:7:2",
"type": ""
}
],
"src": "334:126:2"
},
{
"body": {
"nativeSrc": "511:51:2",
"nodeType": "YulBlock",
"src": "511:51:2",
"statements": [
{
"nativeSrc": "521:35:2",
"nodeType": "YulAssignment",
"src": "521:35:2",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "550:5:2",
"nodeType": "YulIdentifier",
"src": "550:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint160",
"nativeSrc": "532:17:2",
"nodeType": "YulIdentifier",
"src": "532:17:2"
},
"nativeSrc": "532:24:2",
"nodeType": "YulFunctionCall",
"src": "532:24:2"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "521:7:2",
"nodeType": "YulIdentifier",
"src": "521:7:2"
}
]
}
]
},
"name": "cleanup_t_address",
"nativeSrc": "466:96:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "493:5:2",
"nodeType": "YulTypedName",
"src": "493:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "503:7:2",
"nodeType": "YulTypedName",
"src": "503:7:2",
"type": ""
}
],
"src": "466:96:2"
},
{
"body": {
"nativeSrc": "611:79:2",
"nodeType": "YulBlock",
"src": "611:79:2",
"statements": [
{
"body": {
"nativeSrc": "668:16:2",
"nodeType": "YulBlock",
"src": "668:16:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "677:1:2",
"nodeType": "YulLiteral",
"src": "677:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "680:1:2",
"nodeType": "YulLiteral",
"src": "680:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "670:6:2",
"nodeType": "YulIdentifier",
"src": "670:6:2"
},
"nativeSrc": "670:12:2",
"nodeType": "YulFunctionCall",
"src": "670:12:2"
},
"nativeSrc": "670:12:2",
"nodeType": "YulExpressionStatement",
"src": "670:12:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "634:5:2",
"nodeType": "YulIdentifier",
"src": "634:5:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "659:5:2",
"nodeType": "YulIdentifier",
"src": "659:5:2"
}
],
"functionName": {
"name": "cleanup_t_address",
"nativeSrc": "641:17:2",
"nodeType": "YulIdentifier",
"src": "641:17:2"
},
"nativeSrc": "641:24:2",
"nodeType": "YulFunctionCall",
"src": "641:24:2"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "631:2:2",
"nodeType": "YulIdentifier",
"src": "631:2:2"
},
"nativeSrc": "631:35:2",
"nodeType": "YulFunctionCall",
"src": "631:35:2"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "624:6:2",
"nodeType": "YulIdentifier",
"src": "624:6:2"
},
"nativeSrc": "624:43:2",
"nodeType": "YulFunctionCall",
"src": "624:43:2"
},
"nativeSrc": "621:63:2",
"nodeType": "YulIf",
"src": "621:63:2"
}
]
},
"name": "validator_revert_t_address",
"nativeSrc": "568:122:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "604:5:2",
"nodeType": "YulTypedName",
"src": "604:5:2",
"type": ""
}
],
"src": "568:122:2"
},
{
"body": {
"nativeSrc": "748:87:2",
"nodeType": "YulBlock",
"src": "748:87:2",
"statements": [
{
"nativeSrc": "758:29:2",
"nodeType": "YulAssignment",
"src": "758:29:2",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "780:6:2",
"nodeType": "YulIdentifier",
"src": "780:6:2"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "767:12:2",
"nodeType": "YulIdentifier",
"src": "767:12:2"
},
"nativeSrc": "767:20:2",
"nodeType": "YulFunctionCall",
"src": "767:20:2"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "758:5:2",
"nodeType": "YulIdentifier",
"src": "758:5:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "823:5:2",
"nodeType": "YulIdentifier",
"src": "823:5:2"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nativeSrc": "796:26:2",
"nodeType": "YulIdentifier",
"src": "796:26:2"
},
"nativeSrc": "796:33:2",
"nodeType": "YulFunctionCall",
"src": "796:33:2"
},
"nativeSrc": "796:33:2",
"nodeType": "YulExpressionStatement",
"src": "796:33:2"
}
]
},
"name": "abi_decode_t_address",
"nativeSrc": "696:139:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "726:6:2",
"nodeType": "YulTypedName",
"src": "726:6:2",
"type": ""
},
{
"name": "end",
"nativeSrc": "734:3:2",
"nodeType": "YulTypedName",
"src": "734:3:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "742:5:2",
"nodeType": "YulTypedName",
"src": "742:5:2",
"type": ""
}
],
"src": "696:139:2"
},
{
"body": {
"nativeSrc": "907:263:2",
"nodeType": "YulBlock",
"src": "907:263:2",
"statements": [
{
"body": {
"nativeSrc": "953:83:2",
"nodeType": "YulBlock",
"src": "953:83:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "955:77:2",
"nodeType": "YulIdentifier",
"src": "955:77:2"
},
"nativeSrc": "955:79:2",
"nodeType": "YulFunctionCall",
"src": "955:79:2"
},
"nativeSrc": "955:79:2",
"nodeType": "YulExpressionStatement",
"src": "955:79:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "928:7:2",
"nodeType": "YulIdentifier",
"src": "928:7:2"
},
{
"name": "headStart",
"nativeSrc": "937:9:2",
"nodeType": "YulIdentifier",
"src": "937:9:2"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "924:3:2",
"nodeType": "YulIdentifier",
"src": "924:3:2"
},
"nativeSrc": "924:23:2",
"nodeType": "YulFunctionCall",
"src": "924:23:2"
},
{
"kind": "number",
"nativeSrc": "949:2:2",
"nodeType": "YulLiteral",
"src": "949:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "920:3:2",
"nodeType": "YulIdentifier",
"src": "920:3:2"
},
"nativeSrc": "920:32:2",
"nodeType": "YulFunctionCall",
"src": "920:32:2"
},
"nativeSrc": "917:119:2",
"nodeType": "YulIf",
"src": "917:119:2"
},
{
"nativeSrc": "1046:117:2",
"nodeType": "YulBlock",
"src": "1046:117:2",
"statements": [
{
"nativeSrc": "1061:15:2",
"nodeType": "YulVariableDeclaration",
"src": "1061:15:2",
"value": {
"kind": "number",
"nativeSrc": "1075:1:2",
"nodeType": "YulLiteral",
"src": "1075:1:2",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "1065:6:2",
"nodeType": "YulTypedName",
"src": "1065:6:2",
"type": ""
}
]
},
{
"nativeSrc": "1090:63:2",
"nodeType": "YulAssignment",
"src": "1090:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1125:9:2",
"nodeType": "YulIdentifier",
"src": "1125:9:2"
},
{
"name": "offset",
"nativeSrc": "1136:6:2",
"nodeType": "YulIdentifier",
"src": "1136:6:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1121:3:2",
"nodeType": "YulIdentifier",
"src": "1121:3:2"
},
"nativeSrc": "1121:22:2",
"nodeType": "YulFunctionCall",
"src": "1121:22:2"
},
{
"name": "dataEnd",
"nativeSrc": "1145:7:2",
"nodeType": "YulIdentifier",
"src": "1145:7:2"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "1100:20:2",
"nodeType": "YulIdentifier",
"src": "1100:20:2"
},
"nativeSrc": "1100:53:2",
"nodeType": "YulFunctionCall",
"src": "1100:53:2"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "1090:6:2",
"nodeType": "YulIdentifier",
"src": "1090:6:2"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_address",
"nativeSrc": "841:329:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "877:9:2",
"nodeType": "YulTypedName",
"src": "877:9:2",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "888:7:2",
"nodeType": "YulTypedName",
"src": "888:7:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "900:6:2",
"nodeType": "YulTypedName",
"src": "900:6:2",
"type": ""
}
],
"src": "841:329:2"
},
{
"body": {
"nativeSrc": "1221:32:2",
"nodeType": "YulBlock",
"src": "1221:32:2",
"statements": [
{
"nativeSrc": "1231:16:2",
"nodeType": "YulAssignment",
"src": "1231:16:2",
"value": {
"name": "value",
"nativeSrc": "1242:5:2",
"nodeType": "YulIdentifier",
"src": "1242:5:2"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "1231:7:2",
"nodeType": "YulIdentifier",
"src": "1231:7:2"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nativeSrc": "1176:77:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1203:5:2",
"nodeType": "YulTypedName",
"src": "1203:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "1213:7:2",
"nodeType": "YulTypedName",
"src": "1213:7:2",
"type": ""
}
],
"src": "1176:77:2"
},
{
"body": {
"nativeSrc": "1324:53:2",
"nodeType": "YulBlock",
"src": "1324:53:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "1341:3:2",
"nodeType": "YulIdentifier",
"src": "1341:3:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "1364:5:2",
"nodeType": "YulIdentifier",
"src": "1364:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1346:17:2",
"nodeType": "YulIdentifier",
"src": "1346:17:2"
},
"nativeSrc": "1346:24:2",
"nodeType": "YulFunctionCall",
"src": "1346:24:2"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1334:6:2",
"nodeType": "YulIdentifier",
"src": "1334:6:2"
},
"nativeSrc": "1334:37:2",
"nodeType": "YulFunctionCall",
"src": "1334:37:2"
},
"nativeSrc": "1334:37:2",
"nodeType": "YulExpressionStatement",
"src": "1334:37:2"
}
]
},
"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
"nativeSrc": "1259:118:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1312:5:2",
"nodeType": "YulTypedName",
"src": "1312:5:2",
"type": ""
},
{
"name": "pos",
"nativeSrc": "1319:3:2",
"nodeType": "YulTypedName",
"src": "1319:3:2",
"type": ""
}
],
"src": "1259:118:2"
},
{
"body": {
"nativeSrc": "1481:124:2",
"nodeType": "YulBlock",
"src": "1481:124:2",
"statements": [
{
"nativeSrc": "1491:26:2",
"nodeType": "YulAssignment",
"src": "1491:26:2",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "1503:9:2",
"nodeType": "YulIdentifier",
"src": "1503:9:2"
},
{
"kind": "number",
"nativeSrc": "1514:2:2",
"nodeType": "YulLiteral",
"src": "1514:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1499:3:2",
"nodeType": "YulIdentifier",
"src": "1499:3:2"
},
"nativeSrc": "1499:18:2",
"nodeType": "YulFunctionCall",
"src": "1499:18:2"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "1491:4:2",
"nodeType": "YulIdentifier",
"src": "1491:4:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "1571:6:2",
"nodeType": "YulIdentifier",
"src": "1571:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1584:9:2",
"nodeType": "YulIdentifier",
"src": "1584:9:2"
},
{
"kind": "number",
"nativeSrc": "1595:1:2",
"nodeType": "YulLiteral",
"src": "1595:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1580:3:2",
"nodeType": "YulIdentifier",
"src": "1580:3:2"
},
"nativeSrc": "1580:17:2",
"nodeType": "YulFunctionCall",
"src": "1580:17:2"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
"nativeSrc": "1527:43:2",
"nodeType": "YulIdentifier",
"src": "1527:43:2"
},
"nativeSrc": "1527:71:2",
"nodeType": "YulFunctionCall",
"src": "1527:71:2"
},
"nativeSrc": "1527:71:2",
"nodeType": "YulExpressionStatement",
"src": "1527:71:2"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
"nativeSrc": "1383:222:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "1453:9:2",
"nodeType": "YulTypedName",
"src": "1453:9:2",
"type": ""
},
{
"name": "value0",
"nativeSrc": "1465:6:2",
"nodeType": "YulTypedName",
"src": "1465:6:2",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "1476:4:2",
"nodeType": "YulTypedName",
"src": "1476:4:2",
"type": ""
}
],
"src": "1383:222:2"
},
{
"body": {
"nativeSrc": "1654:79:2",
"nodeType": "YulBlock",
"src": "1654:79:2",
"statements": [
{
"body": {
"nativeSrc": "1711:16:2",
"nodeType": "YulBlock",
"src": "1711:16:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "1720:1:2",
"nodeType": "YulLiteral",
"src": "1720:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "1723:1:2",
"nodeType": "YulLiteral",
"src": "1723:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "1713:6:2",
"nodeType": "YulIdentifier",
"src": "1713:6:2"
},
"nativeSrc": "1713:12:2",
"nodeType": "YulFunctionCall",
"src": "1713:12:2"
},
"nativeSrc": "1713:12:2",
"nodeType": "YulExpressionStatement",
"src": "1713:12:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "1677:5:2",
"nodeType": "YulIdentifier",
"src": "1677:5:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "1702:5:2",
"nodeType": "YulIdentifier",
"src": "1702:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1684:17:2",
"nodeType": "YulIdentifier",
"src": "1684:17:2"
},
"nativeSrc": "1684:24:2",
"nodeType": "YulFunctionCall",
"src": "1684:24:2"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "1674:2:2",
"nodeType": "YulIdentifier",
"src": "1674:2:2"
},
"nativeSrc": "1674:35:2",
"nodeType": "YulFunctionCall",
"src": "1674:35:2"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "1667:6:2",
"nodeType": "YulIdentifier",
"src": "1667:6:2"
},
"nativeSrc": "1667:43:2",
"nodeType": "YulFunctionCall",
"src": "1667:43:2"
},
"nativeSrc": "1664:63:2",
"nodeType": "YulIf",
"src": "1664:63:2"
}
]
},
"name": "validator_revert_t_uint256",
"nativeSrc": "1611:122:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1647:5:2",
"nodeType": "YulTypedName",
"src": "1647:5:2",
"type": ""
}
],
"src": "1611:122:2"
},
{
"body": {
"nativeSrc": "1791:87:2",
"nodeType": "YulBlock",
"src": "1791:87:2",
"statements": [
{
"nativeSrc": "1801:29:2",
"nodeType": "YulAssignment",
"src": "1801:29:2",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "1823:6:2",
"nodeType": "YulIdentifier",
"src": "1823:6:2"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "1810:12:2",
"nodeType": "YulIdentifier",
"src": "1810:12:2"
},
"nativeSrc": "1810:20:2",
"nodeType": "YulFunctionCall",
"src": "1810:20:2"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "1801:5:2",
"nodeType": "YulIdentifier",
"src": "1801:5:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "1866:5:2",
"nodeType": "YulIdentifier",
"src": "1866:5:2"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nativeSrc": "1839:26:2",
"nodeType": "YulIdentifier",
"src": "1839:26:2"
},
"nativeSrc": "1839:33:2",
"nodeType": "YulFunctionCall",
"src": "1839:33:2"
},
"nativeSrc": "1839:33:2",
"nodeType": "YulExpressionStatement",
"src": "1839:33:2"
}
]
},
"name": "abi_decode_t_uint256",
"nativeSrc": "1739:139:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "1769:6:2",
"nodeType": "YulTypedName",
"src": "1769:6:2",
"type": ""
},
{
"name": "end",
"nativeSrc": "1777:3:2",
"nodeType": "YulTypedName",
"src": "1777:3:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "1785:5:2",
"nodeType": "YulTypedName",
"src": "1785:5:2",
"type": ""
}
],
"src": "1739:139:2"
},
{
"body": {
"nativeSrc": "1967:391:2",
"nodeType": "YulBlock",
"src": "1967:391:2",
"statements": [
{
"body": {
"nativeSrc": "2013:83:2",
"nodeType": "YulBlock",
"src": "2013:83:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "2015:77:2",
"nodeType": "YulIdentifier",
"src": "2015:77:2"
},
"nativeSrc": "2015:79:2",
"nodeType": "YulFunctionCall",
"src": "2015:79:2"
},
"nativeSrc": "2015:79:2",
"nodeType": "YulExpressionStatement",
"src": "2015:79:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "1988:7:2",
"nodeType": "YulIdentifier",
"src": "1988:7:2"
},
{
"name": "headStart",
"nativeSrc": "1997:9:2",
"nodeType": "YulIdentifier",
"src": "1997:9:2"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "1984:3:2",
"nodeType": "YulIdentifier",
"src": "1984:3:2"
},
"nativeSrc": "1984:23:2",
"nodeType": "YulFunctionCall",
"src": "1984:23:2"
},
{
"kind": "number",
"nativeSrc": "2009:2:2",
"nodeType": "YulLiteral",
"src": "2009:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "1980:3:2",
"nodeType": "YulIdentifier",
"src": "1980:3:2"
},
"nativeSrc": "1980:32:2",
"nodeType": "YulFunctionCall",
"src": "1980:32:2"
},
"nativeSrc": "1977:119:2",
"nodeType": "YulIf",
"src": "1977:119:2"
},
{
"nativeSrc": "2106:117:2",
"nodeType": "YulBlock",
"src": "2106:117:2",
"statements": [
{
"nativeSrc": "2121:15:2",
"nodeType": "YulVariableDeclaration",
"src": "2121:15:2",
"value": {
"kind": "number",
"nativeSrc": "2135:1:2",
"nodeType": "YulLiteral",
"src": "2135:1:2",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "2125:6:2",
"nodeType": "YulTypedName",
"src": "2125:6:2",
"type": ""
}
]
},
{
"nativeSrc": "2150:63:2",
"nodeType": "YulAssignment",
"src": "2150:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "2185:9:2",
"nodeType": "YulIdentifier",
"src": "2185:9:2"
},
{
"name": "offset",
"nativeSrc": "2196:6:2",
"nodeType": "YulIdentifier",
"src": "2196:6:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2181:3:2",
"nodeType": "YulIdentifier",
"src": "2181:3:2"
},
"nativeSrc": "2181:22:2",
"nodeType": "YulFunctionCall",
"src": "2181:22:2"
},
{
"name": "dataEnd",
"nativeSrc": "2205:7:2",
"nodeType": "YulIdentifier",
"src": "2205:7:2"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "2160:20:2",
"nodeType": "YulIdentifier",
"src": "2160:20:2"
},
"nativeSrc": "2160:53:2",
"nodeType": "YulFunctionCall",
"src": "2160:53:2"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "2150:6:2",
"nodeType": "YulIdentifier",
"src": "2150:6:2"
}
]
}
]
},
{
"nativeSrc": "2233:118:2",
"nodeType": "YulBlock",
"src": "2233:118:2",
"statements": [
{
"nativeSrc": "2248:16:2",
"nodeType": "YulVariableDeclaration",
"src": "2248:16:2",
"value": {
"kind": "number",
"nativeSrc": "2262:2:2",
"nodeType": "YulLiteral",
"src": "2262:2:2",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nativeSrc": "2252:6:2",
"nodeType": "YulTypedName",
"src": "2252:6:2",
"type": ""
}
]
},
{
"nativeSrc": "2278:63:2",
"nodeType": "YulAssignment",
"src": "2278:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "2313:9:2",
"nodeType": "YulIdentifier",
"src": "2313:9:2"
},
{
"name": "offset",
"nativeSrc": "2324:6:2",
"nodeType": "YulIdentifier",
"src": "2324:6:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2309:3:2",
"nodeType": "YulIdentifier",
"src": "2309:3:2"
},
"nativeSrc": "2309:22:2",
"nodeType": "YulFunctionCall",
"src": "2309:22:2"
},
{
"name": "dataEnd",
"nativeSrc": "2333:7:2",
"nodeType": "YulIdentifier",
"src": "2333:7:2"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "2288:20:2",
"nodeType": "YulIdentifier",
"src": "2288:20:2"
},
"nativeSrc": "2288:53:2",
"nodeType": "YulFunctionCall",
"src": "2288:53:2"
},
"variableNames": [
{
"name": "value1",
"nativeSrc": "2278:6:2",
"nodeType": "YulIdentifier",
"src": "2278:6:2"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_uint256",
"nativeSrc": "1884:474:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "1929:9:2",
"nodeType": "YulTypedName",
"src": "1929:9:2",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "1940:7:2",
"nodeType": "YulTypedName",
"src": "1940:7:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "1952:6:2",
"nodeType": "YulTypedName",
"src": "1952:6:2",
"type": ""
},
{
"name": "value1",
"nativeSrc": "1960:6:2",
"nodeType": "YulTypedName",
"src": "1960:6:2",
"type": ""
}
],
"src": "1884:474:2"
},
{
"body": {
"nativeSrc": "2406:48:2",
"nodeType": "YulBlock",
"src": "2406:48:2",
"statements": [
{
"nativeSrc": "2416:32:2",
"nodeType": "YulAssignment",
"src": "2416:32:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "2441:5:2",
"nodeType": "YulIdentifier",
"src": "2441:5:2"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "2434:6:2",
"nodeType": "YulIdentifier",
"src": "2434:6:2"
},
"nativeSrc": "2434:13:2",
"nodeType": "YulFunctionCall",
"src": "2434:13:2"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "2427:6:2",
"nodeType": "YulIdentifier",
"src": "2427:6:2"
},
"nativeSrc": "2427:21:2",
"nodeType": "YulFunctionCall",
"src": "2427:21:2"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "2416:7:2",
"nodeType": "YulIdentifier",
"src": "2416:7:2"
}
]
}
]
},
"name": "cleanup_t_bool",
"nativeSrc": "2364:90:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2388:5:2",
"nodeType": "YulTypedName",
"src": "2388:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "2398:7:2",
"nodeType": "YulTypedName",
"src": "2398:7:2",
"type": ""
}
],
"src": "2364:90:2"
},
{
"body": {
"nativeSrc": "2519:50:2",
"nodeType": "YulBlock",
"src": "2519:50:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "2536:3:2",
"nodeType": "YulIdentifier",
"src": "2536:3:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "2556:5:2",
"nodeType": "YulIdentifier",
"src": "2556:5:2"
}
],
"functionName": {
"name": "cleanup_t_bool",
"nativeSrc": "2541:14:2",
"nodeType": "YulIdentifier",
"src": "2541:14:2"
},
"nativeSrc": "2541:21:2",
"nodeType": "YulFunctionCall",
"src": "2541:21:2"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "2529:6:2",
"nodeType": "YulIdentifier",
"src": "2529:6:2"
},
"nativeSrc": "2529:34:2",
"nodeType": "YulFunctionCall",
"src": "2529:34:2"
},
"nativeSrc": "2529:34:2",
"nodeType": "YulExpressionStatement",
"src": "2529:34:2"
}
]
},
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nativeSrc": "2460:109:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2507:5:2",
"nodeType": "YulTypedName",
"src": "2507:5:2",
"type": ""
},
{
"name": "pos",
"nativeSrc": "2514:3:2",
"nodeType": "YulTypedName",
"src": "2514:3:2",
"type": ""
}
],
"src": "2460:109:2"
},
{
"body": {
"nativeSrc": "2667:118:2",
"nodeType": "YulBlock",
"src": "2667:118:2",
"statements": [
{
"nativeSrc": "2677:26:2",
"nodeType": "YulAssignment",
"src": "2677:26:2",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "2689:9:2",
"nodeType": "YulIdentifier",
"src": "2689:9:2"
},
{
"kind": "number",
"nativeSrc": "2700:2:2",
"nodeType": "YulLiteral",
"src": "2700:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2685:3:2",
"nodeType": "YulIdentifier",
"src": "2685:3:2"
},
"nativeSrc": "2685:18:2",
"nodeType": "YulFunctionCall",
"src": "2685:18:2"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "2677:4:2",
"nodeType": "YulIdentifier",
"src": "2677:4:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "2751:6:2",
"nodeType": "YulIdentifier",
"src": "2751:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "2764:9:2",
"nodeType": "YulIdentifier",
"src": "2764:9:2"
},
{
"kind": "number",
"nativeSrc": "2775:1:2",
"nodeType": "YulLiteral",
"src": "2775:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2760:3:2",
"nodeType": "YulIdentifier",
"src": "2760:3:2"
},
"nativeSrc": "2760:17:2",
"nodeType": "YulFunctionCall",
"src": "2760:17:2"
}
],
"functionName": {
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nativeSrc": "2713:37:2",
"nodeType": "YulIdentifier",
"src": "2713:37:2"
},
"nativeSrc": "2713:65:2",
"nodeType": "YulFunctionCall",
"src": "2713:65:2"
},
"nativeSrc": "2713:65:2",
"nodeType": "YulExpressionStatement",
"src": "2713:65:2"
}
]
},
"name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
"nativeSrc": "2575:210:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "2639:9:2",
"nodeType": "YulTypedName",
"src": "2639:9:2",
"type": ""
},
{
"name": "value0",
"nativeSrc": "2651:6:2",
"nodeType": "YulTypedName",
"src": "2651:6:2",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "2662:4:2",
"nodeType": "YulTypedName",
"src": "2662:4:2",
"type": ""
}
],
"src": "2575:210:2"
},
{
"body": {
"nativeSrc": "2864:53:2",
"nodeType": "YulBlock",
"src": "2864:53:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "2881:3:2",
"nodeType": "YulIdentifier",
"src": "2881:3:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "2904:5:2",
"nodeType": "YulIdentifier",
"src": "2904:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "2886:17:2",
"nodeType": "YulIdentifier",
"src": "2886:17:2"
},
"nativeSrc": "2886:24:2",
"nodeType": "YulFunctionCall",
"src": "2886:24:2"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "2874:6:2",
"nodeType": "YulIdentifier",
"src": "2874:6:2"
},
"nativeSrc": "2874:37:2",
"nodeType": "YulFunctionCall",
"src": "2874:37:2"
},
"nativeSrc": "2874:37:2",
"nodeType": "YulExpressionStatement",
"src": "2874:37:2"
}
]
},
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nativeSrc": "2791:126:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2852:5:2",
"nodeType": "YulTypedName",
"src": "2852:5:2",
"type": ""
},
{
"name": "pos",
"nativeSrc": "2859:3:2",
"nodeType": "YulTypedName",
"src": "2859:3:2",
"type": ""
}
],
"src": "2791:126:2"
},
{
"body": {
"nativeSrc": "2976:32:2",
"nodeType": "YulBlock",
"src": "2976:32:2",
"statements": [
{
"nativeSrc": "2986:16:2",
"nodeType": "YulAssignment",
"src": "2986:16:2",
"value": {
"name": "value",
"nativeSrc": "2997:5:2",
"nodeType": "YulIdentifier",
"src": "2997:5:2"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "2986:7:2",
"nodeType": "YulIdentifier",
"src": "2986:7:2"
}
]
}
]
},
"name": "cleanup_t_rational_2_by_1",
"nativeSrc": "2923:85:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2958:5:2",
"nodeType": "YulTypedName",
"src": "2958:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "2968:7:2",
"nodeType": "YulTypedName",
"src": "2968:7:2",
"type": ""
}
],
"src": "2923:85:2"
},
{
"body": {
"nativeSrc": "3046:28:2",
"nodeType": "YulBlock",
"src": "3046:28:2",
"statements": [
{
"nativeSrc": "3056:12:2",
"nodeType": "YulAssignment",
"src": "3056:12:2",
"value": {
"name": "value",
"nativeSrc": "3063:5:2",
"nodeType": "YulIdentifier",
"src": "3063:5:2"
},
"variableNames": [
{
"name": "ret",
"nativeSrc": "3056:3:2",
"nodeType": "YulIdentifier",
"src": "3056:3:2"
}
]
}
]
},
"name": "identity",
"nativeSrc": "3014:60:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "3032:5:2",
"nodeType": "YulTypedName",
"src": "3032:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nativeSrc": "3042:3:2",
"nodeType": "YulTypedName",
"src": "3042:3:2",
"type": ""
}
],
"src": "3014:60:2"
},
{
"body": {
"nativeSrc": "3148:90:2",
"nodeType": "YulBlock",
"src": "3148:90:2",
"statements": [
{
"nativeSrc": "3158:74:2",
"nodeType": "YulAssignment",
"src": "3158:74:2",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "3224:5:2",
"nodeType": "YulIdentifier",
"src": "3224:5:2"
}
],
"functionName": {
"name": "cleanup_t_rational_2_by_1",
"nativeSrc": "3198:25:2",
"nodeType": "YulIdentifier",
"src": "3198:25:2"
},
"nativeSrc": "3198:32:2",
"nodeType": "YulFunctionCall",
"src": "3198:32:2"
}
],
"functionName": {
"name": "identity",
"nativeSrc": "3189:8:2",
"nodeType": "YulIdentifier",
"src": "3189:8:2"
},
"nativeSrc": "3189:42:2",
"nodeType": "YulFunctionCall",
"src": "3189:42:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "3171:17:2",
"nodeType": "YulIdentifier",
"src": "3171:17:2"
},
"nativeSrc": "3171:61:2",
"nodeType": "YulFunctionCall",
"src": "3171:61:2"
},
"variableNames": [
{
"name": "converted",
"nativeSrc": "3158:9:2",
"nodeType": "YulIdentifier",
"src": "3158:9:2"
}
]
}
]
},
"name": "convert_t_rational_2_by_1_to_t_uint256",
"nativeSrc": "3080:158:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "3128:5:2",
"nodeType": "YulTypedName",
"src": "3128:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "converted",
"nativeSrc": "3138:9:2",
"nodeType": "YulTypedName",
"src": "3138:9:2",
"type": ""
}
],
"src": "3080:158:2"
},
{
"body": {
"nativeSrc": "3325:74:2",
"nodeType": "YulBlock",
"src": "3325:74:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "3342:3:2",
"nodeType": "YulIdentifier",
"src": "3342:3:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "3386:5:2",
"nodeType": "YulIdentifier",
"src": "3386:5:2"
}
],
"functionName": {
"name": "convert_t_rational_2_by_1_to_t_uint256",
"nativeSrc": "3347:38:2",
"nodeType": "YulIdentifier",
"src": "3347:38:2"
},
"nativeSrc": "3347:45:2",
"nodeType": "YulFunctionCall",
"src": "3347:45:2"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "3335:6:2",
"nodeType": "YulIdentifier",
"src": "3335:6:2"
},
"nativeSrc": "3335:58:2",
"nodeType": "YulFunctionCall",
"src": "3335:58:2"
},
"nativeSrc": "3335:58:2",
"nodeType": "YulExpressionStatement",
"src": "3335:58:2"
}
]
},
"name": "abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library",
"nativeSrc": "3244:155:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "3313:5:2",
"nodeType": "YulTypedName",
"src": "3313:5:2",
"type": ""
},
{
"name": "pos",
"nativeSrc": "3320:3:2",
"nodeType": "YulTypedName",
"src": "3320:3:2",
"type": ""
}
],
"src": "3244:155:2"
},
{
"body": {
"nativeSrc": "3547:230:2",
"nodeType": "YulBlock",
"src": "3547:230:2",
"statements": [
{
"nativeSrc": "3557:26:2",
"nodeType": "YulAssignment",
"src": "3557:26:2",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "3569:9:2",
"nodeType": "YulIdentifier",
"src": "3569:9:2"
},
{
"kind": "number",
"nativeSrc": "3580:2:2",
"nodeType": "YulLiteral",
"src": "3580:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nativeSrc": "3565:3:2",
"nodeType": "YulIdentifier",
"src": "3565:3:2"
},
"nativeSrc": "3565:18:2",
"nodeType": "YulFunctionCall",
"src": "3565:18:2"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "3557:4:2",
"nodeType": "YulIdentifier",
"src": "3557:4:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "3645:6:2",
"nodeType": "YulIdentifier",
"src": "3645:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "3658:9:2",
"nodeType": "YulIdentifier",
"src": "3658:9:2"
},
{
"kind": "number",
"nativeSrc": "3669:1:2",
"nodeType": "YulLiteral",
"src": "3669:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "3654:3:2",
"nodeType": "YulIdentifier",
"src": "3654:3:2"
},
"nativeSrc": "3654:17:2",
"nodeType": "YulFunctionCall",
"src": "3654:17:2"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nativeSrc": "3593:51:2",
"nodeType": "YulIdentifier",
"src": "3593:51:2"
},
"nativeSrc": "3593:79:2",
"nodeType": "YulFunctionCall",
"src": "3593:79:2"
},
"nativeSrc": "3593:79:2",
"nodeType": "YulExpressionStatement",
"src": "3593:79:2"
},
{
"expression": {
"arguments": [
{
"name": "value1",
"nativeSrc": "3742:6:2",
"nodeType": "YulIdentifier",
"src": "3742:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "3755:9:2",
"nodeType": "YulIdentifier",
"src": "3755:9:2"
},
{
"kind": "number",
"nativeSrc": "3766:2:2",
"nodeType": "YulLiteral",
"src": "3766:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "3751:3:2",
"nodeType": "YulIdentifier",
"src": "3751:3:2"
},
"nativeSrc": "3751:18:2",
"nodeType": "YulFunctionCall",
"src": "3751:18:2"
}
],
"functionName": {
"name": "abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library",
"nativeSrc": "3682:59:2",
"nodeType": "YulIdentifier",
"src": "3682:59:2"
},
"nativeSrc": "3682:88:2",
"nodeType": "YulFunctionCall",
"src": "3682:88:2"
},
"nativeSrc": "3682:88:2",
"nodeType": "YulExpressionStatement",
"src": "3682:88:2"
}
]
},
"name": "abi_encode_tuple_t_uint256_t_rational_2_by_1__to_t_uint256_t_uint256__fromStack_library_reversed",
"nativeSrc": "3405:372:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "3511:9:2",
"nodeType": "YulTypedName",
"src": "3511:9:2",
"type": ""
},
{
"name": "value1",
"nativeSrc": "3523:6:2",
"nodeType": "YulTypedName",
"src": "3523:6:2",
"type": ""
},
{
"name": "value0",
"nativeSrc": "3531:6:2",
"nodeType": "YulTypedName",
"src": "3531:6:2",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "3542:4:2",
"nodeType": "YulTypedName",
"src": "3542:4:2",
"type": ""
}
],
"src": "3405:372:2"
},
{
"body": {
"nativeSrc": "3846:80:2",
"nodeType": "YulBlock",
"src": "3846:80:2",
"statements": [
{
"nativeSrc": "3856:22:2",
"nodeType": "YulAssignment",
"src": "3856:22:2",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "3871:6:2",
"nodeType": "YulIdentifier",
"src": "3871:6:2"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "3865:5:2",
"nodeType": "YulIdentifier",
"src": "3865:5:2"
},
"nativeSrc": "3865:13:2",
"nodeType": "YulFunctionCall",
"src": "3865:13:2"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "3856:5:2",
"nodeType": "YulIdentifier",
"src": "3856:5:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "3914:5:2",
"nodeType": "YulIdentifier",
"src": "3914:5:2"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nativeSrc": "3887:26:2",
"nodeType": "YulIdentifier",
"src": "3887:26:2"
},
"nativeSrc": "3887:33:2",
"nodeType": "YulFunctionCall",
"src": "3887:33:2"
},
"nativeSrc": "3887:33:2",
"nodeType": "YulExpressionStatement",
"src": "3887:33:2"
}
]
},
"name": "abi_decode_t_uint256_fromMemory",
"nativeSrc": "3783:143:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "3824:6:2",
"nodeType": "YulTypedName",
"src": "3824:6:2",
"type": ""
},
{
"name": "end",
"nativeSrc": "3832:3:2",
"nodeType": "YulTypedName",
"src": "3832:3:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "3840:5:2",
"nodeType": "YulTypedName",
"src": "3840:5:2",
"type": ""
}
],
"src": "3783:143:2"
},
{
"body": {
"nativeSrc": "4009:274:2",
"nodeType": "YulBlock",
"src": "4009:274:2",
"statements": [
{
"body": {
"nativeSrc": "4055:83:2",
"nodeType": "YulBlock",
"src": "4055:83:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "4057:77:2",
"nodeType": "YulIdentifier",
"src": "4057:77:2"
},
"nativeSrc": "4057:79:2",
"nodeType": "YulFunctionCall",
"src": "4057:79:2"
},
"nativeSrc": "4057:79:2",
"nodeType": "YulExpressionStatement",
"src": "4057:79:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "4030:7:2",
"nodeType": "YulIdentifier",
"src": "4030:7:2"
},
{
"name": "headStart",
"nativeSrc": "4039:9:2",
"nodeType": "YulIdentifier",
"src": "4039:9:2"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "4026:3:2",
"nodeType": "YulIdentifier",
"src": "4026:3:2"
},
"nativeSrc": "4026:23:2",
"nodeType": "YulFunctionCall",
"src": "4026:23:2"
},
{
"kind": "number",
"nativeSrc": "4051:2:2",
"nodeType": "YulLiteral",
"src": "4051:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "4022:3:2",
"nodeType": "YulIdentifier",
"src": "4022:3:2"
},
"nativeSrc": "4022:32:2",
"nodeType": "YulFunctionCall",
"src": "4022:32:2"
},
"nativeSrc": "4019:119:2",
"nodeType": "YulIf",
"src": "4019:119:2"
},
{
"nativeSrc": "4148:128:2",
"nodeType": "YulBlock",
"src": "4148:128:2",
"statements": [
{
"nativeSrc": "4163:15:2",
"nodeType": "YulVariableDeclaration",
"src": "4163:15:2",
"value": {
"kind": "number",
"nativeSrc": "4177:1:2",
"nodeType": "YulLiteral",
"src": "4177:1:2",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "4167:6:2",
"nodeType": "YulTypedName",
"src": "4167:6:2",
"type": ""
}
]
},
{
"nativeSrc": "4192:74:2",
"nodeType": "YulAssignment",
"src": "4192:74:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "4238:9:2",
"nodeType": "YulIdentifier",
"src": "4238:9:2"
},
{
"name": "offset",
"nativeSrc": "4249:6:2",
"nodeType": "YulIdentifier",
"src": "4249:6:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "4234:3:2",
"nodeType": "YulIdentifier",
"src": "4234:3:2"
},
"nativeSrc": "4234:22:2",
"nodeType": "YulFunctionCall",
"src": "4234:22:2"
},
{
"name": "dataEnd",
"nativeSrc": "4258:7:2",
"nodeType": "YulIdentifier",
"src": "4258:7:2"
}
],
"functionName": {
"name": "abi_decode_t_uint256_fromMemory",
"nativeSrc": "4202:31:2",
"nodeType": "YulIdentifier",
"src": "4202:31:2"
},
"nativeSrc": "4202:64:2",
"nodeType": "YulFunctionCall",
"src": "4202:64:2"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "4192:6:2",
"nodeType": "YulIdentifier",
"src": "4192:6:2"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256_fromMemory",
"nativeSrc": "3932:351:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "3979:9:2",
"nodeType": "YulTypedName",
"src": "3979:9:2",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "3990:7:2",
"nodeType": "YulTypedName",
"src": "3990:7:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "4002:6:2",
"nodeType": "YulTypedName",
"src": "4002:6:2",
"type": ""
}
],
"src": "3932:351:2"
},
{
"body": {
"nativeSrc": "4317:152:2",
"nodeType": "YulBlock",
"src": "4317:152:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "4334:1:2",
"nodeType": "YulLiteral",
"src": "4334:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "4337:77:2",
"nodeType": "YulLiteral",
"src": "4337:77:2",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "4327:6:2",
"nodeType": "YulIdentifier",
"src": "4327:6:2"
},
"nativeSrc": "4327:88:2",
"nodeType": "YulFunctionCall",
"src": "4327:88:2"
},
"nativeSrc": "4327:88:2",
"nodeType": "YulExpressionStatement",
"src": "4327:88:2"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "4431:1:2",
"nodeType": "YulLiteral",
"src": "4431:1:2",
"type": "",
"value": "4"
},
{
"kind": "number",
"nativeSrc": "4434:4:2",
"nodeType": "YulLiteral",
"src": "4434:4:2",
"type": "",
"value": "0x11"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "4424:6:2",
"nodeType": "YulIdentifier",
"src": "4424:6:2"
},
"nativeSrc": "4424:15:2",
"nodeType": "YulFunctionCall",
"src": "4424:15:2"
},
"nativeSrc": "4424:15:2",
"nodeType": "YulExpressionStatement",
"src": "4424:15:2"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "4455:1:2",
"nodeType": "YulLiteral",
"src": "4455:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "4458:4:2",
"nodeType": "YulLiteral",
"src": "4458:4:2",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "4448:6:2",
"nodeType": "YulIdentifier",
"src": "4448:6:2"
},
"nativeSrc": "4448:15:2",
"nodeType": "YulFunctionCall",
"src": "4448:15:2"
},
"nativeSrc": "4448:15:2",
"nodeType": "YulExpressionStatement",
"src": "4448:15:2"
}
]
},
"name": "panic_error_0x11",
"nativeSrc": "4289:180:2",
"nodeType": "YulFunctionDefinition",
"src": "4289:180:2"
},
{
"body": {
"nativeSrc": "4520:149:2",
"nodeType": "YulBlock",
"src": "4520:149:2",
"statements": [
{
"nativeSrc": "4530:25:2",
"nodeType": "YulAssignment",
"src": "4530:25:2",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "4553:1:2",
"nodeType": "YulIdentifier",
"src": "4553:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "4535:17:2",
"nodeType": "YulIdentifier",
"src": "4535:17:2"
},
"nativeSrc": "4535:20:2",
"nodeType": "YulFunctionCall",
"src": "4535:20:2"
},
"variableNames": [
{
"name": "x",
"nativeSrc": "4530:1:2",
"nodeType": "YulIdentifier",
"src": "4530:1:2"
}
]
},
{
"nativeSrc": "4564:25:2",
"nodeType": "YulAssignment",
"src": "4564:25:2",
"value": {
"arguments": [
{
"name": "y",
"nativeSrc": "4587:1:2",
"nodeType": "YulIdentifier",
"src": "4587:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "4569:17:2",
"nodeType": "YulIdentifier",
"src": "4569:17:2"
},
"nativeSrc": "4569:20:2",
"nodeType": "YulFunctionCall",
"src": "4569:20:2"
},
"variableNames": [
{
"name": "y",
"nativeSrc": "4564:1:2",
"nodeType": "YulIdentifier",
"src": "4564:1:2"
}
]
},
{
"nativeSrc": "4598:17:2",
"nodeType": "YulAssignment",
"src": "4598:17:2",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "4610:1:2",
"nodeType": "YulIdentifier",
"src": "4610:1:2"
},
{
"name": "y",
"nativeSrc": "4613:1:2",
"nodeType": "YulIdentifier",
"src": "4613:1:2"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "4606:3:2",
"nodeType": "YulIdentifier",
"src": "4606:3:2"
},
"nativeSrc": "4606:9:2",
"nodeType": "YulFunctionCall",
"src": "4606:9:2"
},
"variableNames": [
{
"name": "diff",
"nativeSrc": "4598:4:2",
"nodeType": "YulIdentifier",
"src": "4598:4:2"
}
]
},
{
"body": {
"nativeSrc": "4640:22:2",
"nodeType": "YulBlock",
"src": "4640:22:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nativeSrc": "4642:16:2",
"nodeType": "YulIdentifier",
"src": "4642:16:2"
},
"nativeSrc": "4642:18:2",
"nodeType": "YulFunctionCall",
"src": "4642:18:2"
},
"nativeSrc": "4642:18:2",
"nodeType": "YulExpressionStatement",
"src": "4642:18:2"
}
]
},
"condition": {
"arguments": [
{
"name": "diff",
"nativeSrc": "4631:4:2",
"nodeType": "YulIdentifier",
"src": "4631:4:2"
},
{
"name": "x",
"nativeSrc": "4637:1:2",
"nodeType": "YulIdentifier",
"src": "4637:1:2"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "4628:2:2",
"nodeType": "YulIdentifier",
"src": "4628:2:2"
},
"nativeSrc": "4628:11:2",
"nodeType": "YulFunctionCall",
"src": "4628:11:2"
},
"nativeSrc": "4625:37:2",
"nodeType": "YulIf",
"src": "4625:37:2"
}
]
},
"name": "checked_sub_t_uint256",
"nativeSrc": "4475:194:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nativeSrc": "4506:1:2",
"nodeType": "YulTypedName",
"src": "4506:1:2",
"type": ""
},
{
"name": "y",
"nativeSrc": "4509:1:2",
"nodeType": "YulTypedName",
"src": "4509:1:2",
"type": ""
}
],
"returnVariables": [
{
"name": "diff",
"nativeSrc": "4515:4:2",
"nodeType": "YulTypedName",
"src": "4515:4:2",
"type": ""
}
],
"src": "4475:194:2"
},
{
"body": {
"nativeSrc": "4719:147:2",
"nodeType": "YulBlock",
"src": "4719:147:2",
"statements": [
{
"nativeSrc": "4729:25:2",
"nodeType": "YulAssignment",
"src": "4729:25:2",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "4752:1:2",
"nodeType": "YulIdentifier",
"src": "4752:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "4734:17:2",
"nodeType": "YulIdentifier",
"src": "4734:17:2"
},
"nativeSrc": "4734:20:2",
"nodeType": "YulFunctionCall",
"src": "4734:20:2"
},
"variableNames": [
{
"name": "x",
"nativeSrc": "4729:1:2",
"nodeType": "YulIdentifier",
"src": "4729:1:2"
}
]
},
{
"nativeSrc": "4763:25:2",
"nodeType": "YulAssignment",
"src": "4763:25:2",
"value": {
"arguments": [
{
"name": "y",
"nativeSrc": "4786:1:2",
"nodeType": "YulIdentifier",
"src": "4786:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "4768:17:2",
"nodeType": "YulIdentifier",
"src": "4768:17:2"
},
"nativeSrc": "4768:20:2",
"nodeType": "YulFunctionCall",
"src": "4768:20:2"
},
"variableNames": [
{
"name": "y",
"nativeSrc": "4763:1:2",
"nodeType": "YulIdentifier",
"src": "4763:1:2"
}
]
},
{
"nativeSrc": "4797:16:2",
"nodeType": "YulAssignment",
"src": "4797:16:2",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "4808:1:2",
"nodeType": "YulIdentifier",
"src": "4808:1:2"
},
{
"name": "y",
"nativeSrc": "4811:1:2",
"nodeType": "YulIdentifier",
"src": "4811:1:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "4804:3:2",
"nodeType": "YulIdentifier",
"src": "4804:3:2"
},
"nativeSrc": "4804:9:2",
"nodeType": "YulFunctionCall",
"src": "4804:9:2"
},
"variableNames": [
{
"name": "sum",
"nativeSrc": "4797:3:2",
"nodeType": "YulIdentifier",
"src": "4797:3:2"
}
]
},
{
"body": {
"nativeSrc": "4837:22:2",
"nodeType": "YulBlock",
"src": "4837:22:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nativeSrc": "4839:16:2",
"nodeType": "YulIdentifier",
"src": "4839:16:2"
},
"nativeSrc": "4839:18:2",
"nodeType": "YulFunctionCall",
"src": "4839:18:2"
},
"nativeSrc": "4839:18:2",
"nodeType": "YulExpressionStatement",
"src": "4839:18:2"
}
]
},
"condition": {
"arguments": [
{
"name": "x",
"nativeSrc": "4829:1:2",
"nodeType": "YulIdentifier",
"src": "4829:1:2"
},
{
"name": "sum",
"nativeSrc": "4832:3:2",
"nodeType": "YulIdentifier",
"src": "4832:3:2"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "4826:2:2",
"nodeType": "YulIdentifier",
"src": "4826:2:2"
},
"nativeSrc": "4826:10:2",
"nodeType": "YulFunctionCall",
"src": "4826:10:2"
},
"nativeSrc": "4823:36:2",
"nodeType": "YulIf",
"src": "4823:36:2"
}
]
},
"name": "checked_add_t_uint256",
"nativeSrc": "4675:191:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nativeSrc": "4706:1:2",
"nodeType": "YulTypedName",
"src": "4706:1:2",
"type": ""
},
{
"name": "y",
"nativeSrc": "4709:1:2",
"nodeType": "YulTypedName",
"src": "4709:1:2",
"type": ""
}
],
"returnVariables": [
{
"name": "sum",
"nativeSrc": "4715:3:2",
"nodeType": "YulTypedName",
"src": "4715:3:2",
"type": ""
}
],
"src": "4675:191:2"
}
]
},
"contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bool_to_t_bool_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function cleanup_t_rational_2_by_1(value) -> cleaned {\n cleaned := value\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_rational_2_by_1_to_t_uint256(value) -> converted {\n converted := cleanup_t_uint256(identity(cleanup_t_rational_2_by_1(value)))\n }\n\n function abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, convert_t_rational_2_by_1_to_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256_t_rational_2_by_1__to_t_uint256_t_uint256__fromStack_library_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library(value1, add(headStart, 32))\n\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_sub_t_uint256(x, y) -> diff {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n diff := sub(x, y)\n\n if gt(diff, x) { panic_error_0x11() }\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n sum := add(x, y)\n\n if gt(x, sum) { panic_error_0x11() }\n\n }\n\n}\n",
"id": 2,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": [
{
"length": 20,
"start": 214
}
]
}
},
"object": "608060405234801561000f575f80fd5b506004361061003f575f3560e01c80637bd703e81461004357806390b98a1114610073578063f8b2cb4f146100a3575b5f80fd5b61005d60048036038101906100589190610360565b6100d3565b60405161006a91906103a3565b60405180910390f35b61008d600480360381019061008891906103e6565b61015c565b60405161009a919061043e565b60405180910390f35b6100bd60048036038101906100b89190610360565b6102bd565b6040516100ca91906103a3565b60405180910390f35b5f73__$c1e9661f796f9214b5c8076e394fd5a419$__6396e4ee3d6100f7846102bd565b60026040518363ffffffff1660e01b81526004016101169291906104a8565b602060405180830381865af4158015610131573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061015591906104e3565b9050919050565b5f815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156101a9575f90506102b7565b815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546101f4919061053b565b92505081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610246919061056e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516102aa91906103a3565b60405180910390a3600190505b92915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61032f82610306565b9050919050565b61033f81610325565b8114610349575f80fd5b50565b5f8135905061035a81610336565b92915050565b5f6020828403121561037557610374610302565b5b5f6103828482850161034c565b91505092915050565b5f819050919050565b61039d8161038b565b82525050565b5f6020820190506103b65f830184610394565b92915050565b6103c58161038b565b81146103cf575f80fd5b50565b5f813590506103e0816103bc565b92915050565b5f80604083850312156103fc576103fb610302565b5b5f6104098582860161034c565b925050602061041a858286016103d2565b9150509250929050565b5f8115159050919050565b61043881610424565b82525050565b5f6020820190506104515f83018461042f565b92915050565b6104608161038b565b82525050565b5f819050919050565b5f819050919050565b5f61049261048d61048884610466565b61046f565b61038b565b9050919050565b6104a281610478565b82525050565b5f6040820190506104bb5f830185610457565b6104c86020830184610499565b9392505050565b5f815190506104dd816103bc565b92915050565b5f602082840312156104f8576104f7610302565b5b5f610505848285016104cf565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6105458261038b565b91506105508361038b565b92508282039050818111156105685761056761050e565b5b92915050565b5f6105788261038b565b91506105838361038b565b925082820190508082111561059b5761059a61050e565b5b9291505056fea2646970667358221220d1bc4f81c05cce3769cc157fc9df9c4113adc0bc3934e33d318fb615fcd3897f64736f6c63430008190033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7BD703E8 EQ PUSH2 0x43 JUMPI DUP1 PUSH4 0x90B98A11 EQ PUSH2 0x73 JUMPI DUP1 PUSH4 0xF8B2CB4F EQ PUSH2 0xA3 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x5D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x58 SWAP2 SWAP1 PUSH2 0x360 JUMP JUMPDEST PUSH2 0xD3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6A SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x8D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x88 SWAP2 SWAP1 PUSH2 0x3E6 JUMP JUMPDEST PUSH2 0x15C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBD PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xB8 SWAP2 SWAP1 PUSH2 0x360 JUMP JUMPDEST PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCA SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH20 0x0 PUSH4 0x96E4EE3D PUSH2 0xF7 DUP5 PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x2 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x116 SWAP3 SWAP2 SWAP1 PUSH2 0x4A8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x131 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 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 0x155 SWAP2 SWAP1 PUSH2 0x4E3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 PUSH0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 SLOAD LT ISZERO PUSH2 0x1A9 JUMPI PUSH0 SWAP1 POP PUSH2 0x2B7 JUMP JUMPDEST DUP2 PUSH0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x53B JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD PUSH2 0x246 SWAP2 SWAP1 PUSH2 0x56E JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x2AA SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x32F DUP3 PUSH2 0x306 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x33F DUP2 PUSH2 0x325 JUMP JUMPDEST DUP2 EQ PUSH2 0x349 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x35A DUP2 PUSH2 0x336 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x375 JUMPI PUSH2 0x374 PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x382 DUP5 DUP3 DUP6 ADD PUSH2 0x34C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x39D DUP2 PUSH2 0x38B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x3B6 PUSH0 DUP4 ADD DUP5 PUSH2 0x394 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3C5 DUP2 PUSH2 0x38B JUMP JUMPDEST DUP2 EQ PUSH2 0x3CF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x3E0 DUP2 PUSH2 0x3BC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FC JUMPI PUSH2 0x3FB PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x409 DUP6 DUP3 DUP7 ADD PUSH2 0x34C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x41A DUP6 DUP3 DUP7 ADD PUSH2 0x3D2 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x438 DUP2 PUSH2 0x424 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x451 PUSH0 DUP4 ADD DUP5 PUSH2 0x42F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x460 DUP2 PUSH2 0x38B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x492 PUSH2 0x48D PUSH2 0x488 DUP5 PUSH2 0x466 JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH2 0x38B JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4A2 DUP2 PUSH2 0x478 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x4BB PUSH0 DUP4 ADD DUP6 PUSH2 0x457 JUMP JUMPDEST PUSH2 0x4C8 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x499 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP PUSH2 0x4DD DUP2 PUSH2 0x3BC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F8 JUMPI PUSH2 0x4F7 PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x505 DUP5 DUP3 DUP6 ADD PUSH2 0x4CF JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH2 0x545 DUP3 PUSH2 0x38B JUMP JUMPDEST SWAP2 POP PUSH2 0x550 DUP4 PUSH2 0x38B JUMP JUMPDEST SWAP3 POP DUP3 DUP3 SUB SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0x568 JUMPI PUSH2 0x567 PUSH2 0x50E JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x578 DUP3 PUSH2 0x38B JUMP JUMPDEST SWAP2 POP PUSH2 0x583 DUP4 PUSH2 0x38B JUMP JUMPDEST SWAP3 POP DUP3 DUP3 ADD SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x59B JUMPI PUSH2 0x59A PUSH2 0x50E JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 0xBC 0x4F DUP2 0xC0 TLOAD 0xCE CALLDATACOPY PUSH10 0xCC157FC9DF9C4113ADC0 0xBC CODECOPY CALLVALUE 0xE3 RETURNDATASIZE BALANCE DUP16 0xB6 ISZERO 0xFC 0xD3 DUP10 PUSH32 0x64736F6C63430008190033000000000000000000000000000000000000000000 ",
"sourceMap": "310:667:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;766:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;499:264;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;886:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;766:117;825:4;841:10;:18;860:16;871:4;860:10;:16::i;:::-;877:1;841:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;834:45;;766:117;;;:::o;499:264::-;563:15;611:6;588:8;:20;597:10;588:20;;;;;;;;;;;;;;;;:29;584:47;;;626:5;619:12;;;;584:47;659:6;635:8;:20;644:10;635:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;691:6;669:8;:18;678:8;669:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;727:8;706:38;;715:10;706:38;;;737:6;706:38;;;;;;:::i;:::-;;;;;;;;755:4;748:11;;499:264;;;;;:::o;886:89::-;940:4;957:8;:14;966:4;957:14;;;;;;;;;;;;;;;;950:21;;886:89;;;:::o;88:117:2:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:474::-;1952:6;1960;2009:2;1997:9;1988:7;1984:23;1980:32;1977:119;;;2015:79;;:::i;:::-;1977:119;2135:1;2160:53;2205:7;2196:6;2185:9;2181:22;2160:53;:::i;:::-;2150:63;;2106:117;2262:2;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2233:118;1884:474;;;;;:::o;2364:90::-;2398:7;2441:5;2434:13;2427:21;2416:32;;2364:90;;;:::o;2460:109::-;2541:21;2556:5;2541:21;:::i;:::-;2536:3;2529:34;2460:109;;:::o;2575:210::-;2662:4;2700:2;2689:9;2685:18;2677:26;;2713:65;2775:1;2764:9;2760:17;2751:6;2713:65;:::i;:::-;2575:210;;;;:::o;2791:126::-;2886:24;2904:5;2886:24;:::i;:::-;2881:3;2874:37;2791:126;;:::o;2923:85::-;2968:7;2997:5;2986:16;;2923:85;;;:::o;3014:60::-;3042:3;3063:5;3056:12;;3014:60;;;:::o;3080:158::-;3138:9;3171:61;3189:42;3198:32;3224:5;3198:32;:::i;:::-;3189:42;:::i;:::-;3171:61;:::i;:::-;3158:74;;3080:158;;;:::o;3244:155::-;3347:45;3386:5;3347:45;:::i;:::-;3342:3;3335:58;3244:155;;:::o;3405:372::-;3542:4;3580:2;3569:9;3565:18;3557:26;;3593:79;3669:1;3658:9;3654:17;3645:6;3593:79;:::i;:::-;3682:88;3766:2;3755:9;3751:18;3742:6;3682:88;:::i;:::-;3405:372;;;;;:::o;3783:143::-;3840:5;3871:6;3865:13;3856:22;;3887:33;3914:5;3887:33;:::i;:::-;3783:143;;;;:::o;3932:351::-;4002:6;4051:2;4039:9;4030:7;4026:23;4022:32;4019:119;;;4057:79;;:::i;:::-;4019:119;4177:1;4202:64;4258:7;4249:6;4238:9;4234:22;4202:64;:::i;:::-;4192:74;;4148:128;3932:351;;;;:::o;4289:180::-;4337:77;4334:1;4327:88;4434:4;4431:1;4424:15;4458:4;4455:1;4448:15;4475:194;4515:4;4535:20;4553:1;4535:20;:::i;:::-;4530:25;;4569:20;4587:1;4569:20;:::i;:::-;4564:25;;4613:1;4610;4606:9;4598:17;;4637:1;4631:4;4628:11;4625:37;;;4642:18;;:::i;:::-;4625:37;4475:194;;;;:::o;4675:191::-;4715:3;4734:20;4752:1;4734:20;:::i;:::-;4729:25;;4768:20;4786:1;4768:20;:::i;:::-;4763:25;;4811:1;4808;4804:9;4797:16;;4832:3;4829:1;4826:10;4823:36;;;4839:18;;:::i;:::-;4823:36;4675:191;;;;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "299000",
"executionCost": "22536",
"totalCost": "321536"
},
"external": {
"getBalance(address)": "2851",
"getBalanceInEth(address)": "infinite",
"sendCoin(address,uint256)": "infinite"
}
},
"methodIdentifiers": {
"getBalance(address)": "f8b2cb4f",
"getBalanceInEth(address)": "7bd703e8",
"sendCoin(address,uint256)": "90b98a11"
}
},
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalanceInEth",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "sendCoin",
"outputs": [
{
"internalType": "bool",
"name": "sufficient",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.8.25+commit.b61c2a91"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalanceInEth",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "sendCoin",
"outputs": [
{
"internalType": "bool",
"name": "sufficient",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"MetaCoin.sol": "MetaCoin"
},
"evmVersion": "cancun",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"ConvertLib.sol": {
"keccak256": "0x3ee33e6e8cf55bad996568ba3cd311ac174c8b4fd9fd51cd6aabf6000d5c9643",
"license": "MIT",
"urls": [
"bzz-raw://de003f417b98896601d7f63ab7cee95f38f237af4d56712019221644954a7509",
"dweb:/ipfs/QmQb7FVshbroABJCpCsn6hf2gu7nqUdXvFHkWNwjRSVwkm"
]
},
"MetaCoin.sol": {
"keccak256": "0xdbe28f9b62da2b85710c1895194f53c4989bbf85f0597e704e501dfc6d8aa74c",
"license": "MIT",
"urls": [
"bzz-raw://87ef8112316f5c79f56afbd86f71351208ecbe887bb6fa7af42dd405c9fa8439",
"dweb:/ipfs/QmVv81q3LLoG1HgUKzi2bUpgmWQmTqJea67hzFGiBXXRD5"
]
}
},
"version": 1
}
{
"contractName": "ConvertLib",
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "conversionRate",
"type": "uint256"
}
],
"name": "convert",
"outputs": [
{
"internalType": "uint256",
"name": "convertedAmount",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function",
"constant": true
}
],
"metadata": "{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"conversionRate\",\"type\":\"uint256\"}],\"name\":\"convert\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"convertedAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/ConvertLib.sol\":\"ConvertLib\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/ConvertLib.sol\":{\"keccak256\":\"0x3ee33e6e8cf55bad996568ba3cd311ac174c8b4fd9fd51cd6aabf6000d5c9643\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://de003f417b98896601d7f63ab7cee95f38f237af4d56712019221644954a7509\",\"dweb:/ipfs/QmQb7FVshbroABJCpCsn6hf2gu7nqUdXvFHkWNwjRSVwkm\"]}},\"version\":1}",
"bytecode": "0x6101e4610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806396e4ee3d1461003a575b600080fd5b610054600480360381019061004f91906100bb565b61006a565b604051610061919061010a565b60405180910390f35b600081836100789190610154565b905092915050565b600080fd5b6000819050919050565b61009881610085565b81146100a357600080fd5b50565b6000813590506100b58161008f565b92915050565b600080604083850312156100d2576100d1610080565b5b60006100e0858286016100a6565b92505060206100f1858286016100a6565b9150509250929050565b61010481610085565b82525050565b600060208201905061011f60008301846100fb565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061015f82610085565b915061016a83610085565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156101a3576101a2610125565b5b82820290509291505056fea264697066735822122086a5cfd3205322c82cb7659874af63b9351c42f027990cf9b3307c7042a3f4bd64736f6c634300080d0033",
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806396e4ee3d1461003a575b600080fd5b610054600480360381019061004f91906100bb565b61006a565b604051610061919061010a565b60405180910390f35b600081836100789190610154565b905092915050565b600080fd5b6000819050919050565b61009881610085565b81146100a357600080fd5b50565b6000813590506100b58161008f565b92915050565b600080604083850312156100d2576100d1610080565b5b60006100e0858286016100a6565b92505060206100f1858286016100a6565b9150509250929050565b61010481610085565b82525050565b600060208201905061011f60008301846100fb565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061015f82610085565b915061016a83610085565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156101a3576101a2610125565b5b82820290509291505056fea264697066735822122086a5cfd3205322c82cb7659874af63b9351c42f027990cf9b3307c7042a3f4bd64736f6c634300080d0033",
"immutableReferences": {},
"generatedSources": [],
"deployedGeneratedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:2083:2",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "47:35:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "57:19:2",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "73:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "67:5:2"
},
"nodeType": "YulFunctionCall",
"src": "67:9:2"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "57:6:2"
}
]
}
]
},
"name": "allocate_unbounded",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "40:6:2",
"type": ""
}
],
"src": "7:75:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "177:28:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "194:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "197:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "187:6:2"
},
"nodeType": "YulFunctionCall",
"src": "187:12:2"
},
"nodeType": "YulExpressionStatement",
"src": "187:12:2"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulFunctionDefinition",
"src": "88:117:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "300:28:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "317:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "320:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "310:6:2"
},
"nodeType": "YulFunctionCall",
"src": "310:12:2"
},
"nodeType": "YulExpressionStatement",
"src": "310:12:2"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulFunctionDefinition",
"src": "211:117:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "379:32:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "389:16:2",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "400:5:2"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "389:7:2"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "361:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "371:7:2",
"type": ""
}
],
"src": "334:77:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "460:79:2",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "517:16:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "526:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "529:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "519:6:2"
},
"nodeType": "YulFunctionCall",
"src": "519:12:2"
},
"nodeType": "YulExpressionStatement",
"src": "519:12:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "483:5:2"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "508:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "490:17:2"
},
"nodeType": "YulFunctionCall",
"src": "490:24:2"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "480:2:2"
},
"nodeType": "YulFunctionCall",
"src": "480:35:2"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "473:6:2"
},
"nodeType": "YulFunctionCall",
"src": "473:43:2"
},
"nodeType": "YulIf",
"src": "470:63:2"
}
]
},
"name": "validator_revert_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "453:5:2",
"type": ""
}
],
"src": "417:122:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "597:87:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "607:29:2",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "629:6:2"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "616:12:2"
},
"nodeType": "YulFunctionCall",
"src": "616:20:2"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "607:5:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "672:5:2"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nodeType": "YulIdentifier",
"src": "645:26:2"
},
"nodeType": "YulFunctionCall",
"src": "645:33:2"
},
"nodeType": "YulExpressionStatement",
"src": "645:33:2"
}
]
},
"name": "abi_decode_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "575:6:2",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "583:3:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "591:5:2",
"type": ""
}
],
"src": "545:139:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "773:391:2",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "819:83:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "821:77:2"
},
"nodeType": "YulFunctionCall",
"src": "821:79:2"
},
"nodeType": "YulExpressionStatement",
"src": "821:79:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "794:7:2"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "803:9:2"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "790:3:2"
},
"nodeType": "YulFunctionCall",
"src": "790:23:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "815:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "786:3:2"
},
"nodeType": "YulFunctionCall",
"src": "786:32:2"
},
"nodeType": "YulIf",
"src": "783:119:2"
},
{
"nodeType": "YulBlock",
"src": "912:117:2",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "927:15:2",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "941:1:2",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "931:6:2",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "956:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "991:9:2"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1002:6:2"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "987:3:2"
},
"nodeType": "YulFunctionCall",
"src": "987:22:2"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1011:7:2"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nodeType": "YulIdentifier",
"src": "966:20:2"
},
"nodeType": "YulFunctionCall",
"src": "966:53:2"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "956:6:2"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "1039:118:2",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1054:16:2",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "1068:2:2",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1058:6:2",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1084:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1119:9:2"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1130:6:2"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1115:3:2"
},
"nodeType": "YulFunctionCall",
"src": "1115:22:2"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1139:7:2"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nodeType": "YulIdentifier",
"src": "1094:20:2"
},
"nodeType": "YulFunctionCall",
"src": "1094:53:2"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1084:6:2"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "735:9:2",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "746:7:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "758:6:2",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "766:6:2",
"type": ""
}
],
"src": "690:474:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1243:53:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1260:3:2"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1283:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "1265:17:2"
},
"nodeType": "YulFunctionCall",
"src": "1265:24:2"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1253:6:2"
},
"nodeType": "YulFunctionCall",
"src": "1253:37:2"
},
"nodeType": "YulExpressionStatement",
"src": "1253:37:2"
}
]
},
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1231:5:2",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "1238:3:2",
"type": ""
}
],
"src": "1170:126:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1408:132:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1418:26:2",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1430:9:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1441:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1426:3:2"
},
"nodeType": "YulFunctionCall",
"src": "1426:18:2"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "1418:4:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1506:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1519:9:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1530:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1515:3:2"
},
"nodeType": "YulFunctionCall",
"src": "1515:17:2"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nodeType": "YulIdentifier",
"src": "1454:51:2"
},
"nodeType": "YulFunctionCall",
"src": "1454:79:2"
},
"nodeType": "YulExpressionStatement",
"src": "1454:79:2"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1380:9:2",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1392:6:2",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "1403:4:2",
"type": ""
}
],
"src": "1302:238:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1574:152:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1591:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1594:77:2",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1584:6:2"
},
"nodeType": "YulFunctionCall",
"src": "1584:88:2"
},
"nodeType": "YulExpressionStatement",
"src": "1584:88:2"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1688:1:2",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1691:4:2",
"type": "",
"value": "0x11"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1681:6:2"
},
"nodeType": "YulFunctionCall",
"src": "1681:15:2"
},
"nodeType": "YulExpressionStatement",
"src": "1681:15:2"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1712:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1715:4:2",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1705:6:2"
},
"nodeType": "YulFunctionCall",
"src": "1705:15:2"
},
"nodeType": "YulExpressionStatement",
"src": "1705:15:2"
}
]
},
"name": "panic_error_0x11",
"nodeType": "YulFunctionDefinition",
"src": "1546:180:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1780:300:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1790:25:2",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "1813:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "1795:17:2"
},
"nodeType": "YulFunctionCall",
"src": "1795:20:2"
},
"variableNames": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "1790:1:2"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1824:25:2",
"value": {
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "1847:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "1829:17:2"
},
"nodeType": "YulFunctionCall",
"src": "1829:20:2"
},
"variableNames": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "1824:1:2"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "2022:22:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "2024:16:2"
},
"nodeType": "YulFunctionCall",
"src": "2024:18:2"
},
"nodeType": "YulExpressionStatement",
"src": "2024:18:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "1934:1:2"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1927:6:2"
},
"nodeType": "YulFunctionCall",
"src": "1927:9:2"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1920:6:2"
},
"nodeType": "YulFunctionCall",
"src": "1920:17:2"
},
{
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "1942:1:2"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1949:66:2",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
},
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "2017:1:2"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "1945:3:2"
},
"nodeType": "YulFunctionCall",
"src": "1945:74:2"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "1939:2:2"
},
"nodeType": "YulFunctionCall",
"src": "1939:81:2"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "1916:3:2"
},
"nodeType": "YulFunctionCall",
"src": "1916:105:2"
},
"nodeType": "YulIf",
"src": "1913:131:2"
},
{
"nodeType": "YulAssignment",
"src": "2054:20:2",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "2069:1:2"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "2072:1:2"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "2065:3:2"
},
"nodeType": "YulFunctionCall",
"src": "2065:9:2"
},
"variableNames": [
{
"name": "product",
"nodeType": "YulIdentifier",
"src": "2054:7:2"
}
]
}
]
},
"name": "checked_mul_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "1763:1:2",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "1766:1:2",
"type": ""
}
],
"returnVariables": [
{
"name": "product",
"nodeType": "YulTypedName",
"src": "1772:7:2",
"type": ""
}
],
"src": "1732:348:2"
}
]
},
"contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n}\n",
"id": 2,
"language": "Yul",
"name": "#utility.yul"
}
],
"sourceMap": "197:156:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
"deployedSourceMap": "197:156:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;218:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;290:20;333:14;324:6;:23;;;;:::i;:::-;317:30;;218:133;;;;:::o;88:117:2:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1265:24;1283:5;1265:24;:::i;:::-;1260:3;1253:37;1170:126;;:::o;1302:238::-;1403:4;1441:2;1430:9;1426:18;1418:26;;1454:79;1530:1;1519:9;1515:17;1506:6;1454:79;:::i;:::-;1302:238;;;;:::o;1546:180::-;1594:77;1591:1;1584:88;1691:4;1688:1;1681:15;1715:4;1712:1;1705:15;1732:348;1772:7;1795:20;1813:1;1795:20;:::i;:::-;1790:25;;1829:20;1847:1;1829:20;:::i;:::-;1824:25;;2017:1;1949:66;1945:74;1942:1;1939:81;1934:1;1927:9;1920:17;1916:105;1913:131;;;2024:18;;:::i;:::-;1913:131;2072:1;2069;2065:9;2054:20;;1732:348;;;;:::o",
"source": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.13;\n\n// A library is like a contract with reusable code, which can be called by other contracts.\n// Deploying common code can reduce gas costs.\nlibrary ConvertLib{\n\tfunction convert(uint amount, uint conversionRate) public pure returns (uint convertedAmount)\n\t{\n\t\treturn amount * conversionRate;\n\t}\n}\n",
"sourcePath": "C:\\Users\\Administrator\\contracts\\ConvertLib.sol",
"ast": {
"absolutePath": "project:/contracts/ConvertLib.sol",
"exportedSymbols": {
"ConvertLib": [
16
]
},
"id": 17,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1,
"literals": [
"solidity",
"^",
"0.8",
".13"
],
"nodeType": "PragmaDirective",
"src": "32:24:0"
},
{
"abstract": false,
"baseContracts": [],
"canonicalName": "ConvertLib",
"contractDependencies": [],
"contractKind": "library",
"fullyImplemented": true,
"id": 16,
"linearizedBaseContracts": [
16
],
"name": "ConvertLib",
"nameLocation": "205:10:0",
"nodeType": "ContractDefinition",
"nodes": [
{
"body": {
"id": 14,
"nodeType": "Block",
"src": "313:38:0",
"statements": [
{
"expression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 12,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 10,
"name": "amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3,
"src": "324:6:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 11,
"name": "conversionRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5,
"src": "333:14:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "324:23:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 9,
"id": 13,
"nodeType": "Return",
"src": "317:30:0"
}
]
},
"functionSelector": "96e4ee3d",
"id": 15,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "convert",
"nameLocation": "227:7:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 6,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 3,
"mutability": "mutable",
"name": "amount",
"nameLocation": "240:6:0",
"nodeType": "VariableDeclaration",
"scope": 15,
"src": "235:11:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "235:4:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 5,
"mutability": "mutable",
"name": "conversionRate",
"nameLocation": "253:14:0",
"nodeType": "VariableDeclaration",
"scope": 15,
"src": "248:19:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 4,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "248:4:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "234:34:0"
},
"returnParameters": {
"id": 9,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 8,
"mutability": "mutable",
"name": "convertedAmount",
"nameLocation": "295:15:0",
"nodeType": "VariableDeclaration",
"scope": 15,
"src": "290:20:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 7,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "290:4:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "289:22:0"
},
"scope": 16,
"src": "218:133:0",
"stateMutability": "pure",
"virtual": false,
"visibility": "public"
}
],
"scope": 17,
"src": "197:156:0",
"usedErrors": []
}
],
"src": "32:322:0"
},
"compiler": {
"name": "solc",
"version": "0.8.13+commit.abaa5c0e.Emscripten.clang"
},
"networks": {
"5777": {
"events": {},
"links": {},
"address": "0x14F50AFD72E08Aa8d7a11c11820C9c401b755348",
"transactionHash": "0x383bab37f8047c59b773551492390ed0a4be4261871e5642ec860cbe34fb63e5"
}
},
"schemaVersion": "3.4.16",
"updatedAt": "2024-06-02T05:42:52.463Z",
"networkType": "ethereum",
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
// A library is like a contract with reusable code, which can be called by other contracts.
// Deploying common code can reduce gas costs.
library ConvertLib{
function convert(uint amount, uint conversionRate) public pure returns (uint convertedAmount)
{
return amount * conversionRate;
}
}
{
"contractName": "MetaCoin",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "sendCoin",
"outputs": [
{
"internalType": "bool",
"name": "sufficient",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalanceInEth",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function",
"constant": true
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function",
"constant": true
}
],
"metadata": "{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getBalanceInEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendCoin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"sufficient\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/MetaCoin.sol\":\"MetaCoin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/ConvertLib.sol\":{\"keccak256\":\"0x3ee33e6e8cf55bad996568ba3cd311ac174c8b4fd9fd51cd6aabf6000d5c9643\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://de003f417b98896601d7f63ab7cee95f38f237af4d56712019221644954a7509\",\"dweb:/ipfs/QmQb7FVshbroABJCpCsn6hf2gu7nqUdXvFHkWNwjRSVwkm\"]},\"project:/contracts/MetaCoin.sol\":{\"keccak256\":\"0xdbe28f9b62da2b85710c1895194f53c4989bbf85f0597e704e501dfc6d8aa74c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87ef8112316f5c79f56afbd86f71351208ecbe887bb6fa7af42dd405c9fa8439\",\"dweb:/ipfs/QmVv81q3LLoG1HgUKzi2bUpgmWQmTqJea67hzFGiBXXRD5\"]}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b506127106000803273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610629806100656000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80637bd703e81461004657806390b98a1114610076578063f8b2cb4f146100a6575b600080fd5b610060600480360381019061005b9190610378565b6100d6565b60405161006d91906103be565b60405180910390f35b610090600480360381019061008b9190610405565b610162565b60405161009d9190610460565b60405180910390f35b6100c060048036038101906100bb9190610378565b6102cd565b6040516100cd91906103be565b60405180910390f35b600073__ConvertLib____________________________6396e4ee3d6100fb846102cd565b60026040518363ffffffff1660e01b815260040161011a9291906104cf565b602060405180830381865af4158015610137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015b919061050d565b9050919050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156101b357600090506102c7565b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546102019190610569565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610256919061059d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516102ba91906103be565b60405180910390a3600190505b92915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103458261031a565b9050919050565b6103558161033a565b811461036057600080fd5b50565b6000813590506103728161034c565b92915050565b60006020828403121561038e5761038d610315565b5b600061039c84828501610363565b91505092915050565b6000819050919050565b6103b8816103a5565b82525050565b60006020820190506103d360008301846103af565b92915050565b6103e2816103a5565b81146103ed57600080fd5b50565b6000813590506103ff816103d9565b92915050565b6000806040838503121561041c5761041b610315565b5b600061042a85828601610363565b925050602061043b858286016103f0565b9150509250929050565b60008115159050919050565b61045a81610445565b82525050565b60006020820190506104756000830184610451565b92915050565b610484816103a5565b82525050565b6000819050919050565b6000819050919050565b60006104b96104b46104af8461048a565b610494565b6103a5565b9050919050565b6104c98161049e565b82525050565b60006040820190506104e4600083018561047b565b6104f160208301846104c0565b9392505050565b600081519050610507816103d9565b92915050565b60006020828403121561052357610522610315565b5b6000610531848285016104f8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610574826103a5565b915061057f836103a5565b9250828210156105925761059161053a565b5b828203905092915050565b60006105a8826103a5565b91506105b3836103a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156105e8576105e761053a565b5b82820190509291505056fea2646970667358221220f7d78b8ecd0e2883ff83d21d5a300205374dac173bc969466a9a8c8432e5c17364736f6c634300080d0033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80637bd703e81461004657806390b98a1114610076578063f8b2cb4f146100a6575b600080fd5b610060600480360381019061005b9190610378565b6100d6565b60405161006d91906103be565b60405180910390f35b610090600480360381019061008b9190610405565b610162565b60405161009d9190610460565b60405180910390f35b6100c060048036038101906100bb9190610378565b6102cd565b6040516100cd91906103be565b60405180910390f35b600073__ConvertLib____________________________6396e4ee3d6100fb846102cd565b60026040518363ffffffff1660e01b815260040161011a9291906104cf565b602060405180830381865af4158015610137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015b919061050d565b9050919050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156101b357600090506102c7565b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546102019190610569565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610256919061059d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516102ba91906103be565b60405180910390a3600190505b92915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103458261031a565b9050919050565b6103558161033a565b811461036057600080fd5b50565b6000813590506103728161034c565b92915050565b60006020828403121561038e5761038d610315565b5b600061039c84828501610363565b91505092915050565b6000819050919050565b6103b8816103a5565b82525050565b60006020820190506103d360008301846103af565b92915050565b6103e2816103a5565b81146103ed57600080fd5b50565b6000813590506103ff816103d9565b92915050565b6000806040838503121561041c5761041b610315565b5b600061042a85828601610363565b925050602061043b858286016103f0565b9150509250929050565b60008115159050919050565b61045a81610445565b82525050565b60006020820190506104756000830184610451565b92915050565b610484816103a5565b82525050565b6000819050919050565b6000819050919050565b60006104b96104b46104af8461048a565b610494565b6103a5565b9050919050565b6104c98161049e565b82525050565b60006040820190506104e4600083018561047b565b6104f160208301846104c0565b9392505050565b600081519050610507816103d9565b92915050565b60006020828403121561052357610522610315565b5b6000610531848285016104f8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610574826103a5565b915061057f836103a5565b9250828210156105925761059161053a565b5b828203905092915050565b60006105a8826103a5565b91506105b3836103a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156105e8576105e761053a565b5b82820190509291505056fea2646970667358221220f7d78b8ecd0e2883ff83d21d5a300205374dac173bc969466a9a8c8432e5c17364736f6c634300080d0033",
"immutableReferences": {},
"generatedSources": [],
"deployedGeneratedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:4980:2",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "47:35:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "57:19:2",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "73:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "67:5:2"
},
"nodeType": "YulFunctionCall",
"src": "67:9:2"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "57:6:2"
}
]
}
]
},
"name": "allocate_unbounded",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "40:6:2",
"type": ""
}
],
"src": "7:75:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "177:28:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "194:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "197:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "187:6:2"
},
"nodeType": "YulFunctionCall",
"src": "187:12:2"
},
"nodeType": "YulExpressionStatement",
"src": "187:12:2"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulFunctionDefinition",
"src": "88:117:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "300:28:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "317:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "320:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "310:6:2"
},
"nodeType": "YulFunctionCall",
"src": "310:12:2"
},
"nodeType": "YulExpressionStatement",
"src": "310:12:2"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulFunctionDefinition",
"src": "211:117:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "379:81:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "389:65:2",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "404:5:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "411:42:2",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "400:3:2"
},
"nodeType": "YulFunctionCall",
"src": "400:54:2"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "389:7:2"
}
]
}
]
},
"name": "cleanup_t_uint160",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "361:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "371:7:2",
"type": ""
}
],
"src": "334:126:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "511:51:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "521:35:2",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "550:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint160",
"nodeType": "YulIdentifier",
"src": "532:17:2"
},
"nodeType": "YulFunctionCall",
"src": "532:24:2"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "521:7:2"
}
]
}
]
},
"name": "cleanup_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "493:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "503:7:2",
"type": ""
}
],
"src": "466:96:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "611:79:2",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "668:16:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "677:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "680:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "670:6:2"
},
"nodeType": "YulFunctionCall",
"src": "670:12:2"
},
"nodeType": "YulExpressionStatement",
"src": "670:12:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "634:5:2"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "659:5:2"
}
],
"functionName": {
"name": "cleanup_t_address",
"nodeType": "YulIdentifier",
"src": "641:17:2"
},
"nodeType": "YulFunctionCall",
"src": "641:24:2"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "631:2:2"
},
"nodeType": "YulFunctionCall",
"src": "631:35:2"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "624:6:2"
},
"nodeType": "YulFunctionCall",
"src": "624:43:2"
},
"nodeType": "YulIf",
"src": "621:63:2"
}
]
},
"name": "validator_revert_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "604:5:2",
"type": ""
}
],
"src": "568:122:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "748:87:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "758:29:2",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "780:6:2"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "767:12:2"
},
"nodeType": "YulFunctionCall",
"src": "767:20:2"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "758:5:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "823:5:2"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "796:26:2"
},
"nodeType": "YulFunctionCall",
"src": "796:33:2"
},
"nodeType": "YulExpressionStatement",
"src": "796:33:2"
}
]
},
"name": "abi_decode_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "726:6:2",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "734:3:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "742:5:2",
"type": ""
}
],
"src": "696:139:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "907:263:2",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "953:83:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "955:77:2"
},
"nodeType": "YulFunctionCall",
"src": "955:79:2"
},
"nodeType": "YulExpressionStatement",
"src": "955:79:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "928:7:2"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "937:9:2"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "924:3:2"
},
"nodeType": "YulFunctionCall",
"src": "924:23:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "949:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "920:3:2"
},
"nodeType": "YulFunctionCall",
"src": "920:32:2"
},
"nodeType": "YulIf",
"src": "917:119:2"
},
{
"nodeType": "YulBlock",
"src": "1046:117:2",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1061:15:2",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "1075:1:2",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1065:6:2",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1090:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1125:9:2"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1136:6:2"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1121:3:2"
},
"nodeType": "YulFunctionCall",
"src": "1121:22:2"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1145:7:2"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "1100:20:2"
},
"nodeType": "YulFunctionCall",
"src": "1100:53:2"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1090:6:2"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "877:9:2",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "888:7:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "900:6:2",
"type": ""
}
],
"src": "841:329:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1221:32:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1231:16:2",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "1242:5:2"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "1231:7:2"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1203:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "1213:7:2",
"type": ""
}
],
"src": "1176:77:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1324:53:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1341:3:2"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1364:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "1346:17:2"
},
"nodeType": "YulFunctionCall",
"src": "1346:24:2"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1334:6:2"
},
"nodeType": "YulFunctionCall",
"src": "1334:37:2"
},
"nodeType": "YulExpressionStatement",
"src": "1334:37:2"
}
]
},
"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1312:5:2",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "1319:3:2",
"type": ""
}
],
"src": "1259:118:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1481:124:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1491:26:2",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1503:9:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1514:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1499:3:2"
},
"nodeType": "YulFunctionCall",
"src": "1499:18:2"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "1491:4:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1571:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1584:9:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1595:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1580:3:2"
},
"nodeType": "YulFunctionCall",
"src": "1580:17:2"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
"nodeType": "YulIdentifier",
"src": "1527:43:2"
},
"nodeType": "YulFunctionCall",
"src": "1527:71:2"
},
"nodeType": "YulExpressionStatement",
"src": "1527:71:2"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1453:9:2",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1465:6:2",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "1476:4:2",
"type": ""
}
],
"src": "1383:222:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1654:79:2",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1711:16:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1720:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1723:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1713:6:2"
},
"nodeType": "YulFunctionCall",
"src": "1713:12:2"
},
"nodeType": "YulExpressionStatement",
"src": "1713:12:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1677:5:2"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1702:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "1684:17:2"
},
"nodeType": "YulFunctionCall",
"src": "1684:24:2"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "1674:2:2"
},
"nodeType": "YulFunctionCall",
"src": "1674:35:2"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1667:6:2"
},
"nodeType": "YulFunctionCall",
"src": "1667:43:2"
},
"nodeType": "YulIf",
"src": "1664:63:2"
}
]
},
"name": "validator_revert_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1647:5:2",
"type": ""
}
],
"src": "1611:122:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1791:87:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1801:29:2",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1823:6:2"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1810:12:2"
},
"nodeType": "YulFunctionCall",
"src": "1810:20:2"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1801:5:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1866:5:2"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nodeType": "YulIdentifier",
"src": "1839:26:2"
},
"nodeType": "YulFunctionCall",
"src": "1839:33:2"
},
"nodeType": "YulExpressionStatement",
"src": "1839:33:2"
}
]
},
"name": "abi_decode_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1769:6:2",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "1777:3:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1785:5:2",
"type": ""
}
],
"src": "1739:139:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1967:391:2",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2013:83:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "2015:77:2"
},
"nodeType": "YulFunctionCall",
"src": "2015:79:2"
},
"nodeType": "YulExpressionStatement",
"src": "2015:79:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1988:7:2"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1997:9:2"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1984:3:2"
},
"nodeType": "YulFunctionCall",
"src": "1984:23:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2009:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1980:3:2"
},
"nodeType": "YulFunctionCall",
"src": "1980:32:2"
},
"nodeType": "YulIf",
"src": "1977:119:2"
},
{
"nodeType": "YulBlock",
"src": "2106:117:2",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "2121:15:2",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "2135:1:2",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2125:6:2",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "2150:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2185:9:2"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2196:6:2"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2181:3:2"
},
"nodeType": "YulFunctionCall",
"src": "2181:22:2"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2205:7:2"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "2160:20:2"
},
"nodeType": "YulFunctionCall",
"src": "2160:53:2"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2150:6:2"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "2233:118:2",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "2248:16:2",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "2262:2:2",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2252:6:2",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "2278:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2313:9:2"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2324:6:2"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2309:3:2"
},
"nodeType": "YulFunctionCall",
"src": "2309:22:2"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2333:7:2"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nodeType": "YulIdentifier",
"src": "2288:20:2"
},
"nodeType": "YulFunctionCall",
"src": "2288:53:2"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "2278:6:2"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1929:9:2",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1940:7:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1952:6:2",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1960:6:2",
"type": ""
}
],
"src": "1884:474:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2406:48:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2416:32:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2441:5:2"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2434:6:2"
},
"nodeType": "YulFunctionCall",
"src": "2434:13:2"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2427:6:2"
},
"nodeType": "YulFunctionCall",
"src": "2427:21:2"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "2416:7:2"
}
]
}
]
},
"name": "cleanup_t_bool",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2388:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "2398:7:2",
"type": ""
}
],
"src": "2364:90:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2519:50:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "2536:3:2"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2556:5:2"
}
],
"functionName": {
"name": "cleanup_t_bool",
"nodeType": "YulIdentifier",
"src": "2541:14:2"
},
"nodeType": "YulFunctionCall",
"src": "2541:21:2"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "2529:6:2"
},
"nodeType": "YulFunctionCall",
"src": "2529:34:2"
},
"nodeType": "YulExpressionStatement",
"src": "2529:34:2"
}
]
},
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2507:5:2",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "2514:3:2",
"type": ""
}
],
"src": "2460:109:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2667:118:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2677:26:2",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2689:9:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2700:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2685:3:2"
},
"nodeType": "YulFunctionCall",
"src": "2685:18:2"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "2677:4:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2751:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2764:9:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2775:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2760:3:2"
},
"nodeType": "YulFunctionCall",
"src": "2760:17:2"
}
],
"functionName": {
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nodeType": "YulIdentifier",
"src": "2713:37:2"
},
"nodeType": "YulFunctionCall",
"src": "2713:65:2"
},
"nodeType": "YulExpressionStatement",
"src": "2713:65:2"
}
]
},
"name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2639:9:2",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2651:6:2",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "2662:4:2",
"type": ""
}
],
"src": "2575:210:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2864:53:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "2881:3:2"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2904:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "2886:17:2"
},
"nodeType": "YulFunctionCall",
"src": "2886:24:2"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "2874:6:2"
},
"nodeType": "YulFunctionCall",
"src": "2874:37:2"
},
"nodeType": "YulExpressionStatement",
"src": "2874:37:2"
}
]
},
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2852:5:2",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "2859:3:2",
"type": ""
}
],
"src": "2791:126:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2976:32:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2986:16:2",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "2997:5:2"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "2986:7:2"
}
]
}
]
},
"name": "cleanup_t_rational_2_by_1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2958:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "2968:7:2",
"type": ""
}
],
"src": "2923:85:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3046:28:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3056:12:2",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "3063:5:2"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "3056:3:2"
}
]
}
]
},
"name": "identity",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3032:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "3042:3:2",
"type": ""
}
],
"src": "3014:60:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3148:90:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3158:74:2",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3224:5:2"
}
],
"functionName": {
"name": "cleanup_t_rational_2_by_1",
"nodeType": "YulIdentifier",
"src": "3198:25:2"
},
"nodeType": "YulFunctionCall",
"src": "3198:32:2"
}
],
"functionName": {
"name": "identity",
"nodeType": "YulIdentifier",
"src": "3189:8:2"
},
"nodeType": "YulFunctionCall",
"src": "3189:42:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "3171:17:2"
},
"nodeType": "YulFunctionCall",
"src": "3171:61:2"
},
"variableNames": [
{
"name": "converted",
"nodeType": "YulIdentifier",
"src": "3158:9:2"
}
]
}
]
},
"name": "convert_t_rational_2_by_1_to_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3128:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "converted",
"nodeType": "YulTypedName",
"src": "3138:9:2",
"type": ""
}
],
"src": "3080:158:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3325:74:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3342:3:2"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3386:5:2"
}
],
"functionName": {
"name": "convert_t_rational_2_by_1_to_t_uint256",
"nodeType": "YulIdentifier",
"src": "3347:38:2"
},
"nodeType": "YulFunctionCall",
"src": "3347:45:2"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3335:6:2"
},
"nodeType": "YulFunctionCall",
"src": "3335:58:2"
},
"nodeType": "YulExpressionStatement",
"src": "3335:58:2"
}
]
},
"name": "abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3313:5:2",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "3320:3:2",
"type": ""
}
],
"src": "3244:155:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3547:230:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3557:26:2",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3569:9:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3580:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3565:3:2"
},
"nodeType": "YulFunctionCall",
"src": "3565:18:2"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "3557:4:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3645:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3658:9:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3669:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3654:3:2"
},
"nodeType": "YulFunctionCall",
"src": "3654:17:2"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nodeType": "YulIdentifier",
"src": "3593:51:2"
},
"nodeType": "YulFunctionCall",
"src": "3593:79:2"
},
"nodeType": "YulExpressionStatement",
"src": "3593:79:2"
},
{
"expression": {
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "3742:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3755:9:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3766:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3751:3:2"
},
"nodeType": "YulFunctionCall",
"src": "3751:18:2"
}
],
"functionName": {
"name": "abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library",
"nodeType": "YulIdentifier",
"src": "3682:59:2"
},
"nodeType": "YulFunctionCall",
"src": "3682:88:2"
},
"nodeType": "YulExpressionStatement",
"src": "3682:88:2"
}
]
},
"name": "abi_encode_tuple_t_uint256_t_rational_2_by_1__to_t_uint256_t_uint256__fromStack_library_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "3511:9:2",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "3523:6:2",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "3531:6:2",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "3542:4:2",
"type": ""
}
],
"src": "3405:372:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3846:80:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3856:22:2",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "3871:6:2"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "3865:5:2"
},
"nodeType": "YulFunctionCall",
"src": "3865:13:2"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3856:5:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3914:5:2"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nodeType": "YulIdentifier",
"src": "3887:26:2"
},
"nodeType": "YulFunctionCall",
"src": "3887:33:2"
},
"nodeType": "YulExpressionStatement",
"src": "3887:33:2"
}
]
},
"name": "abi_decode_t_uint256_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "3824:6:2",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "3832:3:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3840:5:2",
"type": ""
}
],
"src": "3783:143:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4009:274:2",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "4055:83:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "4057:77:2"
},
"nodeType": "YulFunctionCall",
"src": "4057:79:2"
},
"nodeType": "YulExpressionStatement",
"src": "4057:79:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "4030:7:2"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4039:9:2"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "4026:3:2"
},
"nodeType": "YulFunctionCall",
"src": "4026:23:2"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4051:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "4022:3:2"
},
"nodeType": "YulFunctionCall",
"src": "4022:32:2"
},
"nodeType": "YulIf",
"src": "4019:119:2"
},
{
"nodeType": "YulBlock",
"src": "4148:128:2",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "4163:15:2",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "4177:1:2",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "4167:6:2",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "4192:74:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4238:9:2"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "4249:6:2"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4234:3:2"
},
"nodeType": "YulFunctionCall",
"src": "4234:22:2"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "4258:7:2"
}
],
"functionName": {
"name": "abi_decode_t_uint256_fromMemory",
"nodeType": "YulIdentifier",
"src": "4202:31:2"
},
"nodeType": "YulFunctionCall",
"src": "4202:64:2"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4192:6:2"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "3979:9:2",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "3990:7:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "4002:6:2",
"type": ""
}
],
"src": "3932:351:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4317:152:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4334:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4337:77:2",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4327:6:2"
},
"nodeType": "YulFunctionCall",
"src": "4327:88:2"
},
"nodeType": "YulExpressionStatement",
"src": "4327:88:2"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4431:1:2",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4434:4:2",
"type": "",
"value": "0x11"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4424:6:2"
},
"nodeType": "YulFunctionCall",
"src": "4424:15:2"
},
"nodeType": "YulExpressionStatement",
"src": "4424:15:2"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4455:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4458:4:2",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "4448:6:2"
},
"nodeType": "YulFunctionCall",
"src": "4448:15:2"
},
"nodeType": "YulExpressionStatement",
"src": "4448:15:2"
}
]
},
"name": "panic_error_0x11",
"nodeType": "YulFunctionDefinition",
"src": "4289:180:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4520:146:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4530:25:2",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "4553:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "4535:17:2"
},
"nodeType": "YulFunctionCall",
"src": "4535:20:2"
},
"variableNames": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "4530:1:2"
}
]
},
{
"nodeType": "YulAssignment",
"src": "4564:25:2",
"value": {
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "4587:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "4569:17:2"
},
"nodeType": "YulFunctionCall",
"src": "4569:20:2"
},
"variableNames": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "4564:1:2"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "4611:22:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "4613:16:2"
},
"nodeType": "YulFunctionCall",
"src": "4613:18:2"
},
"nodeType": "YulExpressionStatement",
"src": "4613:18:2"
}
]
},
"condition": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "4605:1:2"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "4608:1:2"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "4602:2:2"
},
"nodeType": "YulFunctionCall",
"src": "4602:8:2"
},
"nodeType": "YulIf",
"src": "4599:34:2"
},
{
"nodeType": "YulAssignment",
"src": "4643:17:2",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "4655:1:2"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "4658:1:2"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "4651:3:2"
},
"nodeType": "YulFunctionCall",
"src": "4651:9:2"
},
"variableNames": [
{
"name": "diff",
"nodeType": "YulIdentifier",
"src": "4643:4:2"
}
]
}
]
},
"name": "checked_sub_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "4506:1:2",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "4509:1:2",
"type": ""
}
],
"returnVariables": [
{
"name": "diff",
"nodeType": "YulTypedName",
"src": "4515:4:2",
"type": ""
}
],
"src": "4475:191:2"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4716:261:2",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4726:25:2",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "4749:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "4731:17:2"
},
"nodeType": "YulFunctionCall",
"src": "4731:20:2"
},
"variableNames": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "4726:1:2"
}
]
},
{
"nodeType": "YulAssignment",
"src": "4760:25:2",
"value": {
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "4783:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "4765:17:2"
},
"nodeType": "YulFunctionCall",
"src": "4765:20:2"
},
"variableNames": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "4760:1:2"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "4923:22:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "4925:16:2"
},
"nodeType": "YulFunctionCall",
"src": "4925:18:2"
},
"nodeType": "YulExpressionStatement",
"src": "4925:18:2"
}
]
},
"condition": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "4844:1:2"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4851:66:2",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "4919:1:2"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "4847:3:2"
},
"nodeType": "YulFunctionCall",
"src": "4847:74:2"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "4841:2:2"
},
"nodeType": "YulFunctionCall",
"src": "4841:81:2"
},
"nodeType": "YulIf",
"src": "4838:107:2"
},
{
"nodeType": "YulAssignment",
"src": "4955:16:2",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "4966:1:2"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "4969:1:2"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4962:3:2"
},
"nodeType": "YulFunctionCall",
"src": "4962:9:2"
},
"variableNames": [
{
"name": "sum",
"nodeType": "YulIdentifier",
"src": "4955:3:2"
}
]
}
]
},
"name": "checked_add_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "4703:1:2",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "4706:1:2",
"type": ""
}
],
"returnVariables": [
{
"name": "sum",
"nodeType": "YulTypedName",
"src": "4712:3:2",
"type": ""
}
],
"src": "4672:305:2"
}
]
},
"contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bool_to_t_bool_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function cleanup_t_rational_2_by_1(value) -> cleaned {\n cleaned := value\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_rational_2_by_1_to_t_uint256(value) -> converted {\n converted := cleanup_t_uint256(identity(cleanup_t_rational_2_by_1(value)))\n }\n\n function abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, convert_t_rational_2_by_1_to_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256_t_rational_2_by_1__to_t_uint256_t_uint256__fromStack_library_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library(value1, add(headStart, 32))\n\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_sub_t_uint256(x, y) -> diff {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n if lt(x, y) { panic_error_0x11() }\n\n diff := sub(x, y)\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n}\n",
"id": 2,
"language": "Yul",
"name": "#utility.yul"
}
],
"sourceMap": "310:667:1:-:0;;;447:49;;;;;;;;;;487:5;465:8;:19;474:9;465:19;;;;;;;;;;;;;;;:27;;;;310:667;;;;;;",
"deployedSourceMap": "310:667:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;766:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;499:264;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;886:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;766:117;825:4;841:10;:18;860:16;871:4;860:10;:16::i;:::-;877:1;841:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;834:45;;766:117;;;:::o;499:264::-;563:15;611:6;588:8;:20;597:10;588:20;;;;;;;;;;;;;;;;:29;584:47;;;626:5;619:12;;;;584:47;659:6;635:8;:20;644:10;635:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;691:6;669:8;:18;678:8;669:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;727:8;706:38;;715:10;706:38;;;737:6;706:38;;;;;;:::i;:::-;;;;;;;;755:4;748:11;;499:264;;;;;:::o;886:89::-;940:4;957:8;:14;966:4;957:14;;;;;;;;;;;;;;;;950:21;;886:89;;;:::o;88:117:2:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:474::-;1952:6;1960;2009:2;1997:9;1988:7;1984:23;1980:32;1977:119;;;2015:79;;:::i;:::-;1977:119;2135:1;2160:53;2205:7;2196:6;2185:9;2181:22;2160:53;:::i;:::-;2150:63;;2106:117;2262:2;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2233:118;1884:474;;;;;:::o;2364:90::-;2398:7;2441:5;2434:13;2427:21;2416:32;;2364:90;;;:::o;2460:109::-;2541:21;2556:5;2541:21;:::i;:::-;2536:3;2529:34;2460:109;;:::o;2575:210::-;2662:4;2700:2;2689:9;2685:18;2677:26;;2713:65;2775:1;2764:9;2760:17;2751:6;2713:65;:::i;:::-;2575:210;;;;:::o;2791:126::-;2886:24;2904:5;2886:24;:::i;:::-;2881:3;2874:37;2791:126;;:::o;2923:85::-;2968:7;2997:5;2986:16;;2923:85;;;:::o;3014:60::-;3042:3;3063:5;3056:12;;3014:60;;;:::o;3080:158::-;3138:9;3171:61;3189:42;3198:32;3224:5;3198:32;:::i;:::-;3189:42;:::i;:::-;3171:61;:::i;:::-;3158:74;;3080:158;;;:::o;3244:155::-;3347:45;3386:5;3347:45;:::i;:::-;3342:3;3335:58;3244:155;;:::o;3405:372::-;3542:4;3580:2;3569:9;3565:18;3557:26;;3593:79;3669:1;3658:9;3654:17;3645:6;3593:79;:::i;:::-;3682:88;3766:2;3755:9;3751:18;3742:6;3682:88;:::i;:::-;3405:372;;;;;:::o;3783:143::-;3840:5;3871:6;3865:13;3856:22;;3887:33;3914:5;3887:33;:::i;:::-;3783:143;;;;:::o;3932:351::-;4002:6;4051:2;4039:9;4030:7;4026:23;4022:32;4019:119;;;4057:79;;:::i;:::-;4019:119;4177:1;4202:64;4258:7;4249:6;4238:9;4234:22;4202:64;:::i;:::-;4192:74;;4148:128;3932:351;;;;:::o;4289:180::-;4337:77;4334:1;4327:88;4434:4;4431:1;4424:15;4458:4;4455:1;4448:15;4475:191;4515:4;4535:20;4553:1;4535:20;:::i;:::-;4530:25;;4569:20;4587:1;4569:20;:::i;:::-;4564:25;;4608:1;4605;4602:8;4599:34;;;4613:18;;:::i;:::-;4599:34;4658:1;4655;4651:9;4643:17;;4475:191;;;;:::o;4672:305::-;4712:3;4731:20;4749:1;4731:20;:::i;:::-;4726:25;;4765:20;4783:1;4765:20;:::i;:::-;4760:25;;4919:1;4851:66;4847:74;4844:1;4841:81;4838:107;;;4925:18;;:::i;:::-;4838:107;4969:1;4966;4962:9;4955:16;;4672:305;;;;:::o",
"source": "// SPDX-License-Identifier: MIT\n// Tells the Solidity compiler to compile only from v0.8.13 to v0.9.0\npragma solidity ^0.8.13;\n\nimport \"./ConvertLib.sol\";\n\n// This is just a simple example of a coin-like contract.\n// It is not ERC20 compatible and cannot be expected to talk to other\n// coin/token contracts.\n\ncontract MetaCoin {\n\tmapping (address => uint) balances;\n\n\tevent Transfer(address indexed _from, address indexed _to, uint256 _value);\n\n\tconstructor() {\n\t\tbalances[tx.origin] = 10000;\n\t}\n\n\tfunction sendCoin(address receiver, uint amount) public returns(bool sufficient) {\n\t\tif (balances[msg.sender] < amount) return false;\n\t\tbalances[msg.sender] -= amount;\n\t\tbalances[receiver] += amount;\n\t\temit Transfer(msg.sender, receiver, amount);\n\t\treturn true;\n\t}\n\n\tfunction getBalanceInEth(address addr) public view returns(uint){\n\t\treturn ConvertLib.convert(getBalance(addr),2);\n\t}\n\n\tfunction getBalance(address addr) public view returns(uint) {\n\t\treturn balances[addr];\n\t}\n}\n",
"sourcePath": "C:\\Users\\Administrator\\contracts\\MetaCoin.sol",
"ast": {
"absolutePath": "project:/contracts/MetaCoin.sol",
"exportedSymbols": {
"ConvertLib": [
16
],
"MetaCoin": [
112
]
},
"id": 113,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 18,
"literals": [
"solidity",
"^",
"0.8",
".13"
],
"nodeType": "PragmaDirective",
"src": "102:24:1"
},
{
"absolutePath": "project:/contracts/ConvertLib.sol",
"file": "./ConvertLib.sol",
"id": 19,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 113,
"sourceUnit": 17,
"src": "128:26:1",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": false,
"baseContracts": [],
"canonicalName": "MetaCoin",
"contractDependencies": [],
"contractKind": "contract",
"fullyImplemented": true,
"id": 112,
"linearizedBaseContracts": [
112
],
"name": "MetaCoin",
"nameLocation": "319:8:1",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": false,
"id": 23,
"mutability": "mutable",
"name": "balances",
"nameLocation": "357:8:1",
"nodeType": "VariableDeclaration",
"scope": 112,
"src": "331:34:1",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
"typeString": "mapping(address => uint256)"
},
"typeName": {
"id": 22,
"keyType": {
"id": 20,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "340:7:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Mapping",
"src": "331:25:1",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
"typeString": "mapping(address => uint256)"
},
"valueType": {
"id": 21,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "351:4:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
"visibility": "internal"
},
{
"anonymous": false,
"eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"id": 31,
"name": "Transfer",
"nameLocation": "375:8:1",
"nodeType": "EventDefinition",
"parameters": {
"id": 30,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 25,
"indexed": true,
"mutability": "mutable",
"name": "_from",
"nameLocation": "400:5:1",
"nodeType": "VariableDeclaration",
"scope": 31,
"src": "384:21:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 24,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "384:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 27,
"indexed": true,
"mutability": "mutable",
"name": "_to",
"nameLocation": "423:3:1",
"nodeType": "VariableDeclaration",
"scope": 31,
"src": "407:19:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 26,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "407:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 29,
"indexed": false,
"mutability": "mutable",
"name": "_value",
"nameLocation": "436:6:1",
"nodeType": "VariableDeclaration",
"scope": 31,
"src": "428:14:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 28,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "428:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "383:60:1"
},
"src": "369:75:1"
},
{
"body": {
"id": 41,
"nodeType": "Block",
"src": "461:35:1",
"statements": [
{
"expression": {
"id": 39,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"baseExpression": {
"id": 34,
"name": "balances",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 23,
"src": "465:8:1",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
"typeString": "mapping(address => uint256)"
}
},
"id": 37,
"indexExpression": {
"expression": {
"id": 35,
"name": "tx",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967270,
"src": "474:2:1",
"typeDescriptions": {
"typeIdentifier": "t_magic_transaction",
"typeString": "tx"
}
},
"id": 36,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "origin",
"nodeType": "MemberAccess",
"src": "474:9:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "465:19:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "3130303030",
"id": 38,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "487:5:1",
"typeDescriptions": {
"typeIdentifier": "t_rational_10000_by_1",
"typeString": "int_const 10000"
},
"value": "10000"
},
"src": "465:27:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 40,
"nodeType": "ExpressionStatement",
"src": "465:27:1"
}
]
},
"id": 42,
"implemented": true,
"kind": "constructor",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 32,
"nodeType": "ParameterList",
"parameters": [],
"src": "458:2:1"
},
"returnParameters": {
"id": 33,
"nodeType": "ParameterList",
"parameters": [],
"src": "461:0:1"
},
"scope": 112,
"src": "447:49:1",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 82,
"nodeType": "Block",
"src": "580:183:1",
"statements": [
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 56,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"baseExpression": {
"id": 51,
"name": "balances",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 23,
"src": "588:8:1",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
"typeString": "mapping(address => uint256)"
}
},
"id": 54,
"indexExpression": {
"expression": {
"id": 52,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967281,
"src": "597:3:1",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 53,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"src": "597:10:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "588:20:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"id": 55,
"name": "amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 46,
"src": "611:6:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "588:29:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 59,
"nodeType": "IfStatement",
"src": "584:47:1",
"trueBody": {
"expression": {
"hexValue": "66616c7365",
"id": 57,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "626:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
"functionReturnParameters": 50,
"id": 58,
"nodeType": "Return",
"src": "619:12:1"
}
},
{
"expression": {
"id": 65,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"baseExpression": {
"id": 60,
"name": "balances",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 23,
"src": "635:8:1",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
"typeString": "mapping(address => uint256)"
}
},
"id": 63,
"indexExpression": {
"expression": {
"id": 61,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967281,
"src": "644:3:1",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 62,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"src": "644:10:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "635:20:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "-=",
"rightHandSide": {
"id": 64,
"name": "amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 46,
"src": "659:6:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "635:30:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 66,
"nodeType": "ExpressionStatement",
"src": "635:30:1"
},
{
"expression": {
"id": 71,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"baseExpression": {
"id": 67,
"name": "balances",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 23,
"src": "669:8:1",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
"typeString": "mapping(address => uint256)"
}
},
"id": 69,
"indexExpression": {
"id": 68,
"name": "receiver",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44,
"src": "678:8:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "669:18:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"id": 70,
"name": "amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 46,
"src": "691:6:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "669:28:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 72,
"nodeType": "ExpressionStatement",
"src": "669:28:1"
},
{
"eventCall": {
"arguments": [
{
"expression": {
"id": 74,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967281,
"src": "715:3:1",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 75,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"src": "715:10:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"id": 76,
"name": "receiver",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44,
"src": "727:8:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"id": 77,
"name": "amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 46,
"src": "737:6:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 73,
"name": "Transfer",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 31,
"src": "706:8:1",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 78,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "706:38:1",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 79,
"nodeType": "EmitStatement",
"src": "701:43:1"
},
{
"expression": {
"hexValue": "74727565",
"id": 80,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "755:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"functionReturnParameters": 50,
"id": 81,
"nodeType": "Return",
"src": "748:11:1"
}
]
},
"functionSelector": "90b98a11",
"id": 83,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "sendCoin",
"nameLocation": "508:8:1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 47,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 44,
"mutability": "mutable",
"name": "receiver",
"nameLocation": "525:8:1",
"nodeType": "VariableDeclaration",
"scope": 83,
"src": "517:16:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 43,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "517:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 46,
"mutability": "mutable",
"name": "amount",
"nameLocation": "540:6:1",
"nodeType": "VariableDeclaration",
"scope": 83,
"src": "535:11:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 45,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "535:4:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "516:31:1"
},
"returnParameters": {
"id": 50,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 49,
"mutability": "mutable",
"name": "sufficient",
"nameLocation": "568:10:1",
"nodeType": "VariableDeclaration",
"scope": 83,
"src": "563:15:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 48,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "563:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "562:17:1"
},
"scope": 112,
"src": "499:264:1",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 98,
"nodeType": "Block",
"src": "830:53:1",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"id": 93,
"name": "addr",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 85,
"src": "871:4:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 92,
"name": "getBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 111,
"src": "860:10:1",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
"typeString": "function (address) view returns (uint256)"
}
},
"id": 94,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "860:16:1",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"hexValue": "32",
"id": 95,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "877:1:1",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
}
],
"expression": {
"id": 90,
"name": "ConvertLib",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 16,
"src": "841:10:1",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_ConvertLib_$16_$",
"typeString": "type(library ConvertLib)"
}
},
"id": 91,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "convert",
"nodeType": "MemberAccess",
"referencedDeclaration": 15,
"src": "841:18:1",
"typeDescriptions": {
"typeIdentifier": "t_function_delegatecall_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 96,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "841:38:1",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 89,
"id": 97,
"nodeType": "Return",
"src": "834:45:1"
}
]
},
"functionSelector": "7bd703e8",
"id": 99,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getBalanceInEth",
"nameLocation": "775:15:1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 86,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 85,
"mutability": "mutable",
"name": "addr",
"nameLocation": "799:4:1",
"nodeType": "VariableDeclaration",
"scope": 99,
"src": "791:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 84,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "791:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "790:14:1"
},
"returnParameters": {
"id": 89,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 88,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 99,
"src": "825:4:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 87,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "825:4:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "824:6:1"
},
"scope": 112,
"src": "766:117:1",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 110,
"nodeType": "Block",
"src": "946:29:1",
"statements": [
{
"expression": {
"baseExpression": {
"id": 106,
"name": "balances",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 23,
"src": "957:8:1",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
"typeString": "mapping(address => uint256)"
}
},
"id": 108,
"indexExpression": {
"id": 107,
"name": "addr",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 101,
"src": "966:4:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "957:14:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 105,
"id": 109,
"nodeType": "Return",
"src": "950:21:1"
}
]
},
"functionSelector": "f8b2cb4f",
"id": 111,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getBalance",
"nameLocation": "895:10:1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 102,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 101,
"mutability": "mutable",
"name": "addr",
"nameLocation": "914:4:1",
"nodeType": "VariableDeclaration",
"scope": 111,
"src": "906:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 100,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "906:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "905:14:1"
},
"returnParameters": {
"id": 105,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 104,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 111,
"src": "940:4:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 103,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "940:4:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "939:6:1"
},
"scope": 112,
"src": "886:89:1",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
}
],
"scope": 113,
"src": "310:667:1",
"usedErrors": []
}
],
"src": "102:876:1"
},
"compiler": {
"name": "solc",
"version": "0.8.13+commit.abaa5c0e.Emscripten.clang"
},
"networks": {
"5777": {
"events": {},
"links": {
"ConvertLib": "0x14F50AFD72E08Aa8d7a11c11820C9c401b755348"
},
"address": "0xa922591b2c22Aa3d3cCa7649C78e7Ea4f1477377",
"transactionHash": "0x483120245b137e9ceba74e631cd12dc19e667150e0c1bec8e78b8414c1196fa7"
}
},
"schemaVersion": "3.4.16",
"updatedAt": "2024-06-02T05:42:52.467Z",
"networkType": "ethereum",
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
// SPDX-License-Identifier: MIT
// Tells the Solidity compiler to compile only from v0.8.13 to v0.9.0
pragma solidity ^0.8.13;
import "./ConvertLib.sol";
// This is just a simple example of a coin-like contract.
// It is not ERC20 compatible and cannot be expected to talk to other
// coin/token contracts.
contract MetaCoin {
mapping (address => uint) balances;
event Transfer(address indexed _from, address indexed _to, uint256 _value);
constructor() {
balances[tx.origin] = 10000;
}
function sendCoin(address receiver, uint amount) public returns(bool sufficient) {
if (balances[msg.sender] < amount) return false;
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Transfer(msg.sender, receiver, amount);
return true;
}
function getBalanceInEth(address addr) public view returns(uint){
return ConvertLib.convert(getBalance(addr),2);
}
function getBalance(address addr) public view returns(uint) {
return balances[addr];
}
}
This file has been truncated, but you can view the full file.
{
"id": "2597788e3a6e97f1b0a6bcd054c039f0",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.25",
"solcLongVersion": "0.8.25+commit.b61c2a91",
"input": {
"language": "Solidity",
"sources": {
"MetaCoin.sol": {
"content": "// SPDX-License-Identifier: MIT\n// Tells the Solidity compiler to compile only from v0.8.13 to v0.9.0\npragma solidity ^0.8.13;\n\nimport \"./ConvertLib.sol\";\n\n// This is just a simple example of a coin-like contract.\n// It is not ERC20 compatible and cannot be expected to talk to other\n// coin/token contracts.\n\ncontract MetaCoin {\n\tmapping (address => uint) balances;\n\n\tevent Transfer(address indexed _from, address indexed _to, uint256 _value);\n\n\tconstructor() {\n\t\tbalances[tx.origin] = 10000;\n\t}\n\n\tfunction sendCoin(address receiver, uint amount) public returns(bool sufficient) {\n\t\tif (balances[msg.sender] < amount) return false;\n\t\tbalances[msg.sender] -= amount;\n\t\tbalances[receiver] += amount;\n\t\temit Transfer(msg.sender, receiver, amount);\n\t\treturn true;\n\t}\n\n\tfunction getBalanceInEth(address addr) public view returns(uint){\n\t\treturn ConvertLib.convert(getBalance(addr),2);\n\t}\n\n\tfunction getBalance(address addr) public view returns(uint) {\n\t\treturn balances[addr];\n\t}\n}\n"
},
"ConvertLib.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.13;\n\n// A library is like a contract with reusable code, which can be called by other contracts.\n// Deploying common code can reduce gas costs.\nlibrary ConvertLib{\n\tfunction convert(uint amount, uint conversionRate) public pure returns (uint convertedAmount)\n\t{\n\t\treturn amount * conversionRate;\n\t}\n}\n"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
},
"remappings": []
}
},
"output": {
"contracts": {
"ConvertLib.sol": {
"ConvertLib": {
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "conversionRate",
"type": "uint256"
}
],
"name": "convert",
"outputs": [
{
"internalType": "uint256",
"name": "convertedAmount",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"ConvertLib.sol\":197:353 library ConvertLib{... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"ConvertLib.sol\":197:353 library ConvertLib{... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n jumpi(tag_1, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x96e4ee3d\n eq\n tag_2\n jumpi\n tag_1:\n 0x00\n dup1\n revert\n /* \"ConvertLib.sol\":218:351 function convert(uint amount, uint conversionRate) public pure returns (uint convertedAmount)... */\n tag_2:\n tag_3\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_4\n swap2\n swap1\n tag_5\n jump\t// in\n tag_4:\n tag_6\n jump\t// in\n tag_3:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_6:\n /* \"ConvertLib.sol\":290:310 uint convertedAmount */\n 0x00\n /* \"ConvertLib.sol\":333:347 conversionRate */\n dup2\n /* \"ConvertLib.sol\":324:330 amount */\n dup4\n /* \"ConvertLib.sol\":324:347 amount * conversionRate */\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n /* \"ConvertLib.sol\":317:347 return amount * conversionRate */\n swap1\n pop\n /* \"ConvertLib.sol\":218:351 function convert(uint amount, uint conversionRate) public pure returns (uint convertedAmount)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_13:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:411 */\n tag_15:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":400:405 */\n dup2\n /* \"#utility.yul\":389:405 */\n swap1\n pop\n /* \"#utility.yul\":334:411 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":417:539 */\n tag_16:\n /* \"#utility.yul\":490:514 */\n tag_26\n /* \"#utility.yul\":508:513 */\n dup2\n /* \"#utility.yul\":490:514 */\n tag_15\n jump\t// in\n tag_26:\n /* \"#utility.yul\":483:488 */\n dup2\n /* \"#utility.yul\":480:515 */\n eq\n /* \"#utility.yul\":470:533 */\n tag_27\n jumpi\n /* \"#utility.yul\":529:530 */\n 0x00\n /* \"#utility.yul\":526:527 */\n dup1\n /* \"#utility.yul\":519:531 */\n revert\n /* \"#utility.yul\":470:533 */\n tag_27:\n /* \"#utility.yul\":417:539 */\n pop\n jump\t// out\n /* \"#utility.yul\":545:684 */\n tag_17:\n /* \"#utility.yul\":591:596 */\n 0x00\n /* \"#utility.yul\":629:635 */\n dup2\n /* \"#utility.yul\":616:636 */\n calldataload\n /* \"#utility.yul\":607:636 */\n swap1\n pop\n /* \"#utility.yul\":645:678 */\n tag_29\n /* \"#utility.yul\":672:677 */\n dup2\n /* \"#utility.yul\":645:678 */\n tag_16\n jump\t// in\n tag_29:\n /* \"#utility.yul\":545:684 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":690:1164 */\n tag_5:\n /* \"#utility.yul\":758:764 */\n 0x00\n /* \"#utility.yul\":766:772 */\n dup1\n /* \"#utility.yul\":815:817 */\n 0x40\n /* \"#utility.yul\":803:812 */\n dup4\n /* \"#utility.yul\":794:801 */\n dup6\n /* \"#utility.yul\":790:813 */\n sub\n /* \"#utility.yul\":786:818 */\n slt\n /* \"#utility.yul\":783:902 */\n iszero\n tag_31\n jumpi\n /* \"#utility.yul\":821:900 */\n tag_32\n tag_13\n jump\t// in\n tag_32:\n /* \"#utility.yul\":783:902 */\n tag_31:\n /* \"#utility.yul\":941:942 */\n 0x00\n /* \"#utility.yul\":966:1019 */\n tag_33\n /* \"#utility.yul\":1011:1018 */\n dup6\n /* \"#utility.yul\":1002:1008 */\n dup3\n /* \"#utility.yul\":991:1000 */\n dup7\n /* \"#utility.yul\":987:1009 */\n add\n /* \"#utility.yul\":966:1019 */\n tag_17\n jump\t// in\n tag_33:\n /* \"#utility.yul\":956:1019 */\n swap3\n pop\n /* \"#utility.yul\":912:1029 */\n pop\n /* \"#utility.yul\":1068:1070 */\n 0x20\n /* \"#utility.yul\":1094:1147 */\n tag_34\n /* \"#utility.yul\":1139:1146 */\n dup6\n /* \"#utility.yul\":1130:1136 */\n dup3\n /* \"#utility.yul\":1119:1128 */\n dup7\n /* \"#utility.yul\":1115:1137 */\n add\n /* \"#utility.yul\":1094:1147 */\n tag_17\n jump\t// in\n tag_34:\n /* \"#utility.yul\":1084:1147 */\n swap2\n pop\n /* \"#utility.yul\":1039:1157 */\n pop\n /* \"#utility.yul\":690:1164 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1170:1296 */\n tag_18:\n /* \"#utility.yul\":1265:1289 */\n tag_36\n /* \"#utility.yul\":1283:1288 */\n dup2\n /* \"#utility.yul\":1265:1289 */\n tag_15\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1260:1263 */\n dup3\n /* \"#utility.yul\":1253:1290 */\n mstore\n /* \"#utility.yul\":1170:1296 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1302:1540 */\n tag_8:\n /* \"#utility.yul\":1403:1407 */\n 0x00\n /* \"#utility.yul\":1441:1443 */\n 0x20\n /* \"#utility.yul\":1430:1439 */\n dup3\n /* \"#utility.yul\":1426:1444 */\n add\n /* \"#utility.yul\":1418:1444 */\n swap1\n pop\n /* \"#utility.yul\":1454:1533 */\n tag_38\n /* \"#utility.yul\":1530:1531 */\n 0x00\n /* \"#utility.yul\":1519:1528 */\n dup4\n /* \"#utility.yul\":1515:1532 */\n add\n /* \"#utility.yul\":1506:1512 */\n dup5\n /* \"#utility.yul\":1454:1533 */\n tag_18\n jump\t// in\n tag_38:\n /* \"#utility.yul\":1302:1540 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1546:1726 */\n tag_19:\n /* \"#utility.yul\":1594:1671 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1591:1592 */\n 0x00\n /* \"#utility.yul\":1584:1672 */\n mstore\n /* \"#utility.yul\":1691:1695 */\n 0x11\n /* \"#utility.yul\":1688:1689 */\n 0x04\n /* \"#utility.yul\":1681:1696 */\n mstore\n /* \"#utility.yul\":1715:1719 */\n 0x24\n /* \"#utility.yul\":1712:1713 */\n 0x00\n /* \"#utility.yul\":1705:1720 */\n revert\n /* \"#utility.yul\":1732:2142 */\n tag_11:\n /* \"#utility.yul\":1772:1779 */\n 0x00\n /* \"#utility.yul\":1795:1815 */\n tag_41\n /* \"#utility.yul\":1813:1814 */\n dup3\n /* \"#utility.yul\":1795:1815 */\n tag_15\n jump\t// in\n tag_41:\n /* \"#utility.yul\":1790:1815 */\n swap2\n pop\n /* \"#utility.yul\":1829:1849 */\n tag_42\n /* \"#utility.yul\":1847:1848 */\n dup4\n /* \"#utility.yul\":1829:1849 */\n tag_15\n jump\t// in\n tag_42:\n /* \"#utility.yul\":1824:1849 */\n swap3\n pop\n /* \"#utility.yul\":1884:1885 */\n dup3\n /* \"#utility.yul\":1881:1882 */\n dup3\n /* \"#utility.yul\":1877:1886 */\n mul\n /* \"#utility.yul\":1906:1936 */\n tag_43\n /* \"#utility.yul\":1924:1935 */\n dup2\n /* \"#utility.yul\":1906:1936 */\n tag_15\n jump\t// in\n tag_43:\n /* \"#utility.yul\":1895:1936 */\n swap2\n pop\n /* \"#utility.yul\":2085:2086 */\n dup3\n /* \"#utility.yul\":2076:2083 */\n dup3\n /* \"#utility.yul\":2072:2087 */\n div\n /* \"#utility.yul\":2069:2070 */\n dup5\n /* \"#utility.yul\":2066:2088 */\n eq\n /* \"#utility.yul\":2046:2047 */\n dup4\n /* \"#utility.yul\":2039:2048 */\n iszero\n /* \"#utility.yul\":2019:2102 */\n or\n /* \"#utility.yul\":1996:2135 */\n tag_44\n jumpi\n /* \"#utility.yul\":2115:2133 */\n tag_45\n tag_19\n jump\t// in\n tag_45:\n /* \"#utility.yul\":1996:2135 */\n tag_44:\n /* \"#utility.yul\":1780:2142 */\n pop\n /* \"#utility.yul\":1732:2142 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212206f9d8a461db4e2b455c9b182f5e4b1dfea31b610911328d6d1f706e0a0aceae064736f6c63430008190033\n}\n",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "6101be61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c806396e4ee3d14610038575b5f80fd5b610052600480360381019061004d91906100b4565b610068565b60405161005f9190610101565b60405180910390f35b5f81836100759190610147565b905092915050565b5f80fd5b5f819050919050565b61009381610081565b811461009d575f80fd5b50565b5f813590506100ae8161008a565b92915050565b5f80604083850312156100ca576100c961007d565b5b5f6100d7858286016100a0565b92505060206100e8858286016100a0565b9150509250929050565b6100fb81610081565b82525050565b5f6020820190506101145f8301846100f2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61015182610081565b915061015c83610081565b925082820261016a81610081565b915082820484148315176101815761018061011a565b5b509291505056fea26469706673582212206f9d8a461db4e2b455c9b182f5e4b1dfea31b610911328d6d1f706e0a0aceae064736f6c63430008190033",
"opcodes": "PUSH2 0x1BE PUSH2 0x4D PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x41 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x96E4EE3D EQ PUSH2 0x38 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x52 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4D SWAP2 SWAP1 PUSH2 0xB4 JUMP JUMPDEST PUSH2 0x68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F SWAP2 SWAP1 PUSH2 0x101 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 DUP2 DUP4 PUSH2 0x75 SWAP2 SWAP1 PUSH2 0x147 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x93 DUP2 PUSH2 0x81 JUMP JUMPDEST DUP2 EQ PUSH2 0x9D JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xAE DUP2 PUSH2 0x8A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCA JUMPI PUSH2 0xC9 PUSH2 0x7D JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0xD7 DUP6 DUP3 DUP7 ADD PUSH2 0xA0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xE8 DUP6 DUP3 DUP7 ADD PUSH2 0xA0 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0xFB DUP2 PUSH2 0x81 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x114 PUSH0 DUP4 ADD DUP5 PUSH2 0xF2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH2 0x151 DUP3 PUSH2 0x81 JUMP JUMPDEST SWAP2 POP PUSH2 0x15C DUP4 PUSH2 0x81 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 MUL PUSH2 0x16A DUP2 PUSH2 0x81 JUMP JUMPDEST SWAP2 POP DUP3 DUP3 DIV DUP5 EQ DUP4 ISZERO OR PUSH2 0x181 JUMPI PUSH2 0x180 PUSH2 0x11A JUMP JUMPDEST JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0x9D8A461DB4E2B455C9B182F5E4B1DFEA BALANCE 0xB6 LT SWAP2 SGT 0x28 0xD6 0xD1 0xF7 MOD 0xE0 LOG0 0xAC 0xEA 0xE0 PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ",
"sourceMap": "197:156:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {
"@convert_15": {
"entryPoint": 104,
"id": 15,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_uint256": {
"entryPoint": 160,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_uint256t_uint256": {
"entryPoint": 180,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"abi_encode_t_uint256_to_t_uint256_fromStack_library": {
"entryPoint": 242,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed": {
"entryPoint": 257,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"allocate_unbounded": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
},
"checked_mul_t_uint256": {
"entryPoint": 327,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"cleanup_t_uint256": {
"entryPoint": 129,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"panic_error_0x11": {
"entryPoint": 282,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
"entryPoint": 125,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"validator_revert_t_uint256": {
"entryPoint": 138,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
}
},
"generatedSources": [
{
"ast": {
"nativeSrc": "0:2145:2",
"nodeType": "YulBlock",
"src": "0:2145:2",
"statements": [
{
"body": {
"nativeSrc": "47:35:2",
"nodeType": "YulBlock",
"src": "47:35:2",
"statements": [
{
"nativeSrc": "57:19:2",
"nodeType": "YulAssignment",
"src": "57:19:2",
"value": {
"arguments": [
{
"kind": "number",
"nativeSrc": "73:2:2",
"nodeType": "YulLiteral",
"src": "73:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "67:5:2",
"nodeType": "YulIdentifier",
"src": "67:5:2"
},
"nativeSrc": "67:9:2",
"nodeType": "YulFunctionCall",
"src": "67:9:2"
},
"variableNames": [
{
"name": "memPtr",
"nativeSrc": "57:6:2",
"nodeType": "YulIdentifier",
"src": "57:6:2"
}
]
}
]
},
"name": "allocate_unbounded",
"nativeSrc": "7:75:2",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nativeSrc": "40:6:2",
"nodeType": "YulTypedName",
"src": "40:6:2",
"type": ""
}
],
"src": "7:75:2"
},
{
"body": {
"nativeSrc": "177:28:2",
"nodeType": "YulBlock",
"src": "177:28:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "194:1:2",
"nodeType": "YulLiteral",
"src": "194:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "197:1:2",
"nodeType": "YulLiteral",
"src": "197:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "187:6:2",
"nodeType": "YulIdentifier",
"src": "187:6:2"
},
"nativeSrc": "187:12:2",
"nodeType": "YulFunctionCall",
"src": "187:12:2"
},
"nativeSrc": "187:12:2",
"nodeType": "YulExpressionStatement",
"src": "187:12:2"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "88:117:2",
"nodeType": "YulFunctionDefinition",
"src": "88:117:2"
},
{
"body": {
"nativeSrc": "300:28:2",
"nodeType": "YulBlock",
"src": "300:28:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "317:1:2",
"nodeType": "YulLiteral",
"src": "317:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "320:1:2",
"nodeType": "YulLiteral",
"src": "320:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "310:6:2",
"nodeType": "YulIdentifier",
"src": "310:6:2"
},
"nativeSrc": "310:12:2",
"nodeType": "YulFunctionCall",
"src": "310:12:2"
},
"nativeSrc": "310:12:2",
"nodeType": "YulExpressionStatement",
"src": "310:12:2"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nativeSrc": "211:117:2",
"nodeType": "YulFunctionDefinition",
"src": "211:117:2"
},
{
"body": {
"nativeSrc": "379:32:2",
"nodeType": "YulBlock",
"src": "379:32:2",
"statements": [
{
"nativeSrc": "389:16:2",
"nodeType": "YulAssignment",
"src": "389:16:2",
"value": {
"name": "value",
"nativeSrc": "400:5:2",
"nodeType": "YulIdentifier",
"src": "400:5:2"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "389:7:2",
"nodeType": "YulIdentifier",
"src": "389:7:2"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nativeSrc": "334:77:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "361:5:2",
"nodeType": "YulTypedName",
"src": "361:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "371:7:2",
"nodeType": "YulTypedName",
"src": "371:7:2",
"type": ""
}
],
"src": "334:77:2"
},
{
"body": {
"nativeSrc": "460:79:2",
"nodeType": "YulBlock",
"src": "460:79:2",
"statements": [
{
"body": {
"nativeSrc": "517:16:2",
"nodeType": "YulBlock",
"src": "517:16:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "526:1:2",
"nodeType": "YulLiteral",
"src": "526:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "529:1:2",
"nodeType": "YulLiteral",
"src": "529:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "519:6:2",
"nodeType": "YulIdentifier",
"src": "519:6:2"
},
"nativeSrc": "519:12:2",
"nodeType": "YulFunctionCall",
"src": "519:12:2"
},
"nativeSrc": "519:12:2",
"nodeType": "YulExpressionStatement",
"src": "519:12:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "483:5:2",
"nodeType": "YulIdentifier",
"src": "483:5:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "508:5:2",
"nodeType": "YulIdentifier",
"src": "508:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "490:17:2",
"nodeType": "YulIdentifier",
"src": "490:17:2"
},
"nativeSrc": "490:24:2",
"nodeType": "YulFunctionCall",
"src": "490:24:2"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "480:2:2",
"nodeType": "YulIdentifier",
"src": "480:2:2"
},
"nativeSrc": "480:35:2",
"nodeType": "YulFunctionCall",
"src": "480:35:2"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "473:6:2",
"nodeType": "YulIdentifier",
"src": "473:6:2"
},
"nativeSrc": "473:43:2",
"nodeType": "YulFunctionCall",
"src": "473:43:2"
},
"nativeSrc": "470:63:2",
"nodeType": "YulIf",
"src": "470:63:2"
}
]
},
"name": "validator_revert_t_uint256",
"nativeSrc": "417:122:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "453:5:2",
"nodeType": "YulTypedName",
"src": "453:5:2",
"type": ""
}
],
"src": "417:122:2"
},
{
"body": {
"nativeSrc": "597:87:2",
"nodeType": "YulBlock",
"src": "597:87:2",
"statements": [
{
"nativeSrc": "607:29:2",
"nodeType": "YulAssignment",
"src": "607:29:2",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "629:6:2",
"nodeType": "YulIdentifier",
"src": "629:6:2"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "616:12:2",
"nodeType": "YulIdentifier",
"src": "616:12:2"
},
"nativeSrc": "616:20:2",
"nodeType": "YulFunctionCall",
"src": "616:20:2"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "607:5:2",
"nodeType": "YulIdentifier",
"src": "607:5:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "672:5:2",
"nodeType": "YulIdentifier",
"src": "672:5:2"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nativeSrc": "645:26:2",
"nodeType": "YulIdentifier",
"src": "645:26:2"
},
"nativeSrc": "645:33:2",
"nodeType": "YulFunctionCall",
"src": "645:33:2"
},
"nativeSrc": "645:33:2",
"nodeType": "YulExpressionStatement",
"src": "645:33:2"
}
]
},
"name": "abi_decode_t_uint256",
"nativeSrc": "545:139:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "575:6:2",
"nodeType": "YulTypedName",
"src": "575:6:2",
"type": ""
},
{
"name": "end",
"nativeSrc": "583:3:2",
"nodeType": "YulTypedName",
"src": "583:3:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "591:5:2",
"nodeType": "YulTypedName",
"src": "591:5:2",
"type": ""
}
],
"src": "545:139:2"
},
{
"body": {
"nativeSrc": "773:391:2",
"nodeType": "YulBlock",
"src": "773:391:2",
"statements": [
{
"body": {
"nativeSrc": "819:83:2",
"nodeType": "YulBlock",
"src": "819:83:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "821:77:2",
"nodeType": "YulIdentifier",
"src": "821:77:2"
},
"nativeSrc": "821:79:2",
"nodeType": "YulFunctionCall",
"src": "821:79:2"
},
"nativeSrc": "821:79:2",
"nodeType": "YulExpressionStatement",
"src": "821:79:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "794:7:2",
"nodeType": "YulIdentifier",
"src": "794:7:2"
},
{
"name": "headStart",
"nativeSrc": "803:9:2",
"nodeType": "YulIdentifier",
"src": "803:9:2"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "790:3:2",
"nodeType": "YulIdentifier",
"src": "790:3:2"
},
"nativeSrc": "790:23:2",
"nodeType": "YulFunctionCall",
"src": "790:23:2"
},
{
"kind": "number",
"nativeSrc": "815:2:2",
"nodeType": "YulLiteral",
"src": "815:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "786:3:2",
"nodeType": "YulIdentifier",
"src": "786:3:2"
},
"nativeSrc": "786:32:2",
"nodeType": "YulFunctionCall",
"src": "786:32:2"
},
"nativeSrc": "783:119:2",
"nodeType": "YulIf",
"src": "783:119:2"
},
{
"nativeSrc": "912:117:2",
"nodeType": "YulBlock",
"src": "912:117:2",
"statements": [
{
"nativeSrc": "927:15:2",
"nodeType": "YulVariableDeclaration",
"src": "927:15:2",
"value": {
"kind": "number",
"nativeSrc": "941:1:2",
"nodeType": "YulLiteral",
"src": "941:1:2",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "931:6:2",
"nodeType": "YulTypedName",
"src": "931:6:2",
"type": ""
}
]
},
{
"nativeSrc": "956:63:2",
"nodeType": "YulAssignment",
"src": "956:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "991:9:2",
"nodeType": "YulIdentifier",
"src": "991:9:2"
},
{
"name": "offset",
"nativeSrc": "1002:6:2",
"nodeType": "YulIdentifier",
"src": "1002:6:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "987:3:2",
"nodeType": "YulIdentifier",
"src": "987:3:2"
},
"nativeSrc": "987:22:2",
"nodeType": "YulFunctionCall",
"src": "987:22:2"
},
{
"name": "dataEnd",
"nativeSrc": "1011:7:2",
"nodeType": "YulIdentifier",
"src": "1011:7:2"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "966:20:2",
"nodeType": "YulIdentifier",
"src": "966:20:2"
},
"nativeSrc": "966:53:2",
"nodeType": "YulFunctionCall",
"src": "966:53:2"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "956:6:2",
"nodeType": "YulIdentifier",
"src": "956:6:2"
}
]
}
]
},
{
"nativeSrc": "1039:118:2",
"nodeType": "YulBlock",
"src": "1039:118:2",
"statements": [
{
"nativeSrc": "1054:16:2",
"nodeType": "YulVariableDeclaration",
"src": "1054:16:2",
"value": {
"kind": "number",
"nativeSrc": "1068:2:2",
"nodeType": "YulLiteral",
"src": "1068:2:2",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nativeSrc": "1058:6:2",
"nodeType": "YulTypedName",
"src": "1058:6:2",
"type": ""
}
]
},
{
"nativeSrc": "1084:63:2",
"nodeType": "YulAssignment",
"src": "1084:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1119:9:2",
"nodeType": "YulIdentifier",
"src": "1119:9:2"
},
{
"name": "offset",
"nativeSrc": "1130:6:2",
"nodeType": "YulIdentifier",
"src": "1130:6:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1115:3:2",
"nodeType": "YulIdentifier",
"src": "1115:3:2"
},
"nativeSrc": "1115:22:2",
"nodeType": "YulFunctionCall",
"src": "1115:22:2"
},
{
"name": "dataEnd",
"nativeSrc": "1139:7:2",
"nodeType": "YulIdentifier",
"src": "1139:7:2"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "1094:20:2",
"nodeType": "YulIdentifier",
"src": "1094:20:2"
},
"nativeSrc": "1094:53:2",
"nodeType": "YulFunctionCall",
"src": "1094:53:2"
},
"variableNames": [
{
"name": "value1",
"nativeSrc": "1084:6:2",
"nodeType": "YulIdentifier",
"src": "1084:6:2"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256t_uint256",
"nativeSrc": "690:474:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "735:9:2",
"nodeType": "YulTypedName",
"src": "735:9:2",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "746:7:2",
"nodeType": "YulTypedName",
"src": "746:7:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "758:6:2",
"nodeType": "YulTypedName",
"src": "758:6:2",
"type": ""
},
{
"name": "value1",
"nativeSrc": "766:6:2",
"nodeType": "YulTypedName",
"src": "766:6:2",
"type": ""
}
],
"src": "690:474:2"
},
{
"body": {
"nativeSrc": "1243:53:2",
"nodeType": "YulBlock",
"src": "1243:53:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "1260:3:2",
"nodeType": "YulIdentifier",
"src": "1260:3:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "1283:5:2",
"nodeType": "YulIdentifier",
"src": "1283:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1265:17:2",
"nodeType": "YulIdentifier",
"src": "1265:17:2"
},
"nativeSrc": "1265:24:2",
"nodeType": "YulFunctionCall",
"src": "1265:24:2"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1253:6:2",
"nodeType": "YulIdentifier",
"src": "1253:6:2"
},
"nativeSrc": "1253:37:2",
"nodeType": "YulFunctionCall",
"src": "1253:37:2"
},
"nativeSrc": "1253:37:2",
"nodeType": "YulExpressionStatement",
"src": "1253:37:2"
}
]
},
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nativeSrc": "1170:126:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1231:5:2",
"nodeType": "YulTypedName",
"src": "1231:5:2",
"type": ""
},
{
"name": "pos",
"nativeSrc": "1238:3:2",
"nodeType": "YulTypedName",
"src": "1238:3:2",
"type": ""
}
],
"src": "1170:126:2"
},
{
"body": {
"nativeSrc": "1408:132:2",
"nodeType": "YulBlock",
"src": "1408:132:2",
"statements": [
{
"nativeSrc": "1418:26:2",
"nodeType": "YulAssignment",
"src": "1418:26:2",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "1430:9:2",
"nodeType": "YulIdentifier",
"src": "1430:9:2"
},
{
"kind": "number",
"nativeSrc": "1441:2:2",
"nodeType": "YulLiteral",
"src": "1441:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1426:3:2",
"nodeType": "YulIdentifier",
"src": "1426:3:2"
},
"nativeSrc": "1426:18:2",
"nodeType": "YulFunctionCall",
"src": "1426:18:2"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "1418:4:2",
"nodeType": "YulIdentifier",
"src": "1418:4:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "1506:6:2",
"nodeType": "YulIdentifier",
"src": "1506:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1519:9:2",
"nodeType": "YulIdentifier",
"src": "1519:9:2"
},
{
"kind": "number",
"nativeSrc": "1530:1:2",
"nodeType": "YulLiteral",
"src": "1530:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1515:3:2",
"nodeType": "YulIdentifier",
"src": "1515:3:2"
},
"nativeSrc": "1515:17:2",
"nodeType": "YulFunctionCall",
"src": "1515:17:2"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nativeSrc": "1454:51:2",
"nodeType": "YulIdentifier",
"src": "1454:51:2"
},
"nativeSrc": "1454:79:2",
"nodeType": "YulFunctionCall",
"src": "1454:79:2"
},
"nativeSrc": "1454:79:2",
"nodeType": "YulExpressionStatement",
"src": "1454:79:2"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed",
"nativeSrc": "1302:238:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "1380:9:2",
"nodeType": "YulTypedName",
"src": "1380:9:2",
"type": ""
},
{
"name": "value0",
"nativeSrc": "1392:6:2",
"nodeType": "YulTypedName",
"src": "1392:6:2",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "1403:4:2",
"nodeType": "YulTypedName",
"src": "1403:4:2",
"type": ""
}
],
"src": "1302:238:2"
},
{
"body": {
"nativeSrc": "1574:152:2",
"nodeType": "YulBlock",
"src": "1574:152:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "1591:1:2",
"nodeType": "YulLiteral",
"src": "1591:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "1594:77:2",
"nodeType": "YulLiteral",
"src": "1594:77:2",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1584:6:2",
"nodeType": "YulIdentifier",
"src": "1584:6:2"
},
"nativeSrc": "1584:88:2",
"nodeType": "YulFunctionCall",
"src": "1584:88:2"
},
"nativeSrc": "1584:88:2",
"nodeType": "YulExpressionStatement",
"src": "1584:88:2"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "1688:1:2",
"nodeType": "YulLiteral",
"src": "1688:1:2",
"type": "",
"value": "4"
},
{
"kind": "number",
"nativeSrc": "1691:4:2",
"nodeType": "YulLiteral",
"src": "1691:4:2",
"type": "",
"value": "0x11"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1681:6:2",
"nodeType": "YulIdentifier",
"src": "1681:6:2"
},
"nativeSrc": "1681:15:2",
"nodeType": "YulFunctionCall",
"src": "1681:15:2"
},
"nativeSrc": "1681:15:2",
"nodeType": "YulExpressionStatement",
"src": "1681:15:2"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "1712:1:2",
"nodeType": "YulLiteral",
"src": "1712:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "1715:4:2",
"nodeType": "YulLiteral",
"src": "1715:4:2",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "1705:6:2",
"nodeType": "YulIdentifier",
"src": "1705:6:2"
},
"nativeSrc": "1705:15:2",
"nodeType": "YulFunctionCall",
"src": "1705:15:2"
},
"nativeSrc": "1705:15:2",
"nodeType": "YulExpressionStatement",
"src": "1705:15:2"
}
]
},
"name": "panic_error_0x11",
"nativeSrc": "1546:180:2",
"nodeType": "YulFunctionDefinition",
"src": "1546:180:2"
},
{
"body": {
"nativeSrc": "1780:362:2",
"nodeType": "YulBlock",
"src": "1780:362:2",
"statements": [
{
"nativeSrc": "1790:25:2",
"nodeType": "YulAssignment",
"src": "1790:25:2",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "1813:1:2",
"nodeType": "YulIdentifier",
"src": "1813:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1795:17:2",
"nodeType": "YulIdentifier",
"src": "1795:17:2"
},
"nativeSrc": "1795:20:2",
"nodeType": "YulFunctionCall",
"src": "1795:20:2"
},
"variableNames": [
{
"name": "x",
"nativeSrc": "1790:1:2",
"nodeType": "YulIdentifier",
"src": "1790:1:2"
}
]
},
{
"nativeSrc": "1824:25:2",
"nodeType": "YulAssignment",
"src": "1824:25:2",
"value": {
"arguments": [
{
"name": "y",
"nativeSrc": "1847:1:2",
"nodeType": "YulIdentifier",
"src": "1847:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1829:17:2",
"nodeType": "YulIdentifier",
"src": "1829:17:2"
},
"nativeSrc": "1829:20:2",
"nodeType": "YulFunctionCall",
"src": "1829:20:2"
},
"variableNames": [
{
"name": "y",
"nativeSrc": "1824:1:2",
"nodeType": "YulIdentifier",
"src": "1824:1:2"
}
]
},
{
"nativeSrc": "1858:28:2",
"nodeType": "YulVariableDeclaration",
"src": "1858:28:2",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "1881:1:2",
"nodeType": "YulIdentifier",
"src": "1881:1:2"
},
{
"name": "y",
"nativeSrc": "1884:1:2",
"nodeType": "YulIdentifier",
"src": "1884:1:2"
}
],
"functionName": {
"name": "mul",
"nativeSrc": "1877:3:2",
"nodeType": "YulIdentifier",
"src": "1877:3:2"
},
"nativeSrc": "1877:9:2",
"nodeType": "YulFunctionCall",
"src": "1877:9:2"
},
"variables": [
{
"name": "product_raw",
"nativeSrc": "1862:11:2",
"nodeType": "YulTypedName",
"src": "1862:11:2",
"type": ""
}
]
},
{
"nativeSrc": "1895:41:2",
"nodeType": "YulAssignment",
"src": "1895:41:2",
"value": {
"arguments": [
{
"name": "product_raw",
"nativeSrc": "1924:11:2",
"nodeType": "YulIdentifier",
"src": "1924:11:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1906:17:2",
"nodeType": "YulIdentifier",
"src": "1906:17:2"
},
"nativeSrc": "1906:30:2",
"nodeType": "YulFunctionCall",
"src": "1906:30:2"
},
"variableNames": [
{
"name": "product",
"nativeSrc": "1895:7:2",
"nodeType": "YulIdentifier",
"src": "1895:7:2"
}
]
},
{
"body": {
"nativeSrc": "2113:22:2",
"nodeType": "YulBlock",
"src": "2113:22:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nativeSrc": "2115:16:2",
"nodeType": "YulIdentifier",
"src": "2115:16:2"
},
"nativeSrc": "2115:18:2",
"nodeType": "YulFunctionCall",
"src": "2115:18:2"
},
"nativeSrc": "2115:18:2",
"nodeType": "YulExpressionStatement",
"src": "2115:18:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "x",
"nativeSrc": "2046:1:2",
"nodeType": "YulIdentifier",
"src": "2046:1:2"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "2039:6:2",
"nodeType": "YulIdentifier",
"src": "2039:6:2"
},
"nativeSrc": "2039:9:2",
"nodeType": "YulFunctionCall",
"src": "2039:9:2"
},
{
"arguments": [
{
"name": "y",
"nativeSrc": "2069:1:2",
"nodeType": "YulIdentifier",
"src": "2069:1:2"
},
{
"arguments": [
{
"name": "product",
"nativeSrc": "2076:7:2",
"nodeType": "YulIdentifier",
"src": "2076:7:2"
},
{
"name": "x",
"nativeSrc": "2085:1:2",
"nodeType": "YulIdentifier",
"src": "2085:1:2"
}
],
"functionName": {
"name": "div",
"nativeSrc": "2072:3:2",
"nodeType": "YulIdentifier",
"src": "2072:3:2"
},
"nativeSrc": "2072:15:2",
"nodeType": "YulFunctionCall",
"src": "2072:15:2"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "2066:2:2",
"nodeType": "YulIdentifier",
"src": "2066:2:2"
},
"nativeSrc": "2066:22:2",
"nodeType": "YulFunctionCall",
"src": "2066:22:2"
}
],
"functionName": {
"name": "or",
"nativeSrc": "2019:2:2",
"nodeType": "YulIdentifier",
"src": "2019:2:2"
},
"nativeSrc": "2019:83:2",
"nodeType": "YulFunctionCall",
"src": "2019:83:2"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "1999:6:2",
"nodeType": "YulIdentifier",
"src": "1999:6:2"
},
"nativeSrc": "1999:113:2",
"nodeType": "YulFunctionCall",
"src": "1999:113:2"
},
"nativeSrc": "1996:139:2",
"nodeType": "YulIf",
"src": "1996:139:2"
}
]
},
"name": "checked_mul_t_uint256",
"nativeSrc": "1732:410:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nativeSrc": "1763:1:2",
"nodeType": "YulTypedName",
"src": "1763:1:2",
"type": ""
},
{
"name": "y",
"nativeSrc": "1766:1:2",
"nodeType": "YulTypedName",
"src": "1766:1:2",
"type": ""
}
],
"returnVariables": [
{
"name": "product",
"nativeSrc": "1772:7:2",
"nodeType": "YulTypedName",
"src": "1772:7:2",
"type": ""
}
],
"src": "1732:410:2"
}
]
},
"contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n let product_raw := mul(x, y)\n product := cleanup_t_uint256(product_raw)\n\n // overflow, if x != 0 and y != product/x\n if iszero(\n or(\n iszero(x),\n eq(y, div(product, x))\n )\n ) { panic_error_0x11() }\n\n }\n\n}\n",
"id": 2,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {},
"object": "7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c806396e4ee3d14610038575b5f80fd5b610052600480360381019061004d91906100b4565b610068565b60405161005f9190610101565b60405180910390f35b5f81836100759190610147565b905092915050565b5f80fd5b5f819050919050565b61009381610081565b811461009d575f80fd5b50565b5f813590506100ae8161008a565b92915050565b5f80604083850312156100ca576100c961007d565b5b5f6100d7858286016100a0565b92505060206100e8858286016100a0565b9150509250929050565b6100fb81610081565b82525050565b5f6020820190506101145f8301846100f2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61015182610081565b915061015c83610081565b925082820261016a81610081565b915082820484148315176101815761018061011a565b5b509291505056fea26469706673582212206f9d8a461db4e2b455c9b182f5e4b1dfea31b610911328d6d1f706e0a0aceae064736f6c63430008190033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x96E4EE3D EQ PUSH2 0x38 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x52 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4D SWAP2 SWAP1 PUSH2 0xB4 JUMP JUMPDEST PUSH2 0x68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F SWAP2 SWAP1 PUSH2 0x101 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 DUP2 DUP4 PUSH2 0x75 SWAP2 SWAP1 PUSH2 0x147 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x93 DUP2 PUSH2 0x81 JUMP JUMPDEST DUP2 EQ PUSH2 0x9D JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xAE DUP2 PUSH2 0x8A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCA JUMPI PUSH2 0xC9 PUSH2 0x7D JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0xD7 DUP6 DUP3 DUP7 ADD PUSH2 0xA0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xE8 DUP6 DUP3 DUP7 ADD PUSH2 0xA0 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0xFB DUP2 PUSH2 0x81 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x114 PUSH0 DUP4 ADD DUP5 PUSH2 0xF2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH2 0x151 DUP3 PUSH2 0x81 JUMP JUMPDEST SWAP2 POP PUSH2 0x15C DUP4 PUSH2 0x81 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 MUL PUSH2 0x16A DUP2 PUSH2 0x81 JUMP JUMPDEST SWAP2 POP DUP3 DUP3 DIV DUP5 EQ DUP4 ISZERO OR PUSH2 0x181 JUMPI PUSH2 0x180 PUSH2 0x11A JUMP JUMPDEST JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0x9D8A461DB4E2B455C9B182F5E4B1DFEA BALANCE 0xB6 LT SWAP2 SGT 0x28 0xD6 0xD1 0xF7 MOD 0xE0 LOG0 0xAC 0xEA 0xE0 PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ",
"sourceMap": "197:156:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;218:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;290:20;333:14;324:6;:23;;;;:::i;:::-;317:30;;218:133;;;;:::o;88:117:2:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1265:24;1283:5;1265:24;:::i;:::-;1260:3;1253:37;1170:126;;:::o;1302:238::-;1403:4;1441:2;1430:9;1426:18;1418:26;;1454:79;1530:1;1519:9;1515:17;1506:6;1454:79;:::i;:::-;1302:238;;;;:::o;1546:180::-;1594:77;1591:1;1584:88;1691:4;1688:1;1681:15;1715:4;1712:1;1705:15;1732:410;1772:7;1795:20;1813:1;1795:20;:::i;:::-;1790:25;;1829:20;1847:1;1829:20;:::i;:::-;1824:25;;1884:1;1881;1877:9;1906:30;1924:11;1906:30;:::i;:::-;1895:41;;2085:1;2076:7;2072:15;2069:1;2066:22;2046:1;2039:9;2019:83;1996:139;;2115:18;;:::i;:::-;1996:139;1780:362;1732:410;;;;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "89200",
"executionCost": "161",
"totalCost": "89361"
},
"external": {
"convert(uint256,uint256)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 197,
"end": 353,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 197,
"end": 353,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "B"
},
{
"begin": 197,
"end": 353,
"name": "DUP3",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "DUP3",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "DUP3",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "CODECOPY",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "DUP1",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "MLOAD",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 197,
"end": 353,
"name": "BYTE",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "73"
},
{
"begin": 197,
"end": 353,
"name": "EQ",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH [tag]",
"source": 0,
"value": "1"
},
{
"begin": 197,
"end": 353,
"name": "JUMPI",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 197,
"end": 353,
"name": "MSTORE",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 197,
"end": 353,
"name": "MSTORE",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "24"
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 197,
"end": 353,
"name": "REVERT",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "tag",
"source": 0,
"value": "1"
},
{
"begin": 197,
"end": 353,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "ADDRESS",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 197,
"end": 353,
"name": "MSTORE",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "73"
},
{
"begin": 197,
"end": 353,
"name": "DUP2",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "MSTORE8",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "DUP3",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "DUP2",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "RETURN",
"source": 0
}
],
".data": {
"0": {
".auxdata": "a26469706673582212206f9d8a461db4e2b455c9b182f5e4b1dfea31b610911328d6d1f706e0a0aceae064736f6c63430008190033",
".code": [
{
"begin": 197,
"end": 353,
"name": "PUSHDEPLOYADDRESS",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "ADDRESS",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "EQ",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "80"
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "40"
},
{
"begin": 197,
"end": 353,
"name": "MSTORE",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 197,
"end": 353,
"name": "CALLDATASIZE",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "LT",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH [tag]",
"source": 0,
"value": "1"
},
{
"begin": 197,
"end": 353,
"name": "JUMPI",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 197,
"end": 353,
"name": "CALLDATALOAD",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "E0"
},
{
"begin": 197,
"end": 353,
"name": "SHR",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "DUP1",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "96E4EE3D"
},
{
"begin": 197,
"end": 353,
"name": "EQ",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH [tag]",
"source": 0,
"value": "2"
},
{
"begin": 197,
"end": 353,
"name": "JUMPI",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "tag",
"source": 0,
"value": "1"
},
{
"begin": 197,
"end": 353,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 197,
"end": 353,
"name": "DUP1",
"source": 0
},
{
"begin": 197,
"end": 353,
"name": "REVERT",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "tag",
"source": 0,
"value": "2"
},
{
"begin": 218,
"end": 351,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "PUSH [tag]",
"source": 0,
"value": "3"
},
{
"begin": 218,
"end": 351,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 218,
"end": 351,
"name": "DUP1",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "CALLDATASIZE",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "SUB",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "DUP2",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "ADD",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "SWAP1",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "PUSH [tag]",
"source": 0,
"value": "4"
},
{
"begin": 218,
"end": 351,
"name": "SWAP2",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "SWAP1",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "PUSH [tag]",
"source": 0,
"value": "5"
},
{
"begin": 218,
"end": 351,
"jumpType": "[in]",
"name": "JUMP",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "tag",
"source": 0,
"value": "4"
},
{
"begin": 218,
"end": 351,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "PUSH [tag]",
"source": 0,
"value": "6"
},
{
"begin": 218,
"end": 351,
"jumpType": "[in]",
"name": "JUMP",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "tag",
"source": 0,
"value": "3"
},
{
"begin": 218,
"end": 351,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "PUSH",
"source": 0,
"value": "40"
},
{
"begin": 218,
"end": 351,
"name": "MLOAD",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "PUSH [tag]",
"source": 0,
"value": "7"
},
{
"begin": 218,
"end": 351,
"name": "SWAP2",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "SWAP1",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "PUSH [tag]",
"source": 0,
"value": "8"
},
{
"begin": 218,
"end": 351,
"jumpType": "[in]",
"name": "JUMP",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "tag",
"source": 0,
"value": "7"
},
{
"begin": 218,
"end": 351,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "PUSH",
"source": 0,
"value": "40"
},
{
"begin": 218,
"end": 351,
"name": "MLOAD",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "DUP1",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "SWAP2",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "SUB",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "SWAP1",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "RETURN",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "tag",
"source": 0,
"value": "6"
},
{
"begin": 218,
"end": 351,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 290,
"end": 310,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 333,
"end": 347,
"name": "DUP2",
"source": 0
},
{
"begin": 324,
"end": 330,
"name": "DUP4",
"source": 0
},
{
"begin": 324,
"end": 347,
"name": "PUSH [tag]",
"source": 0,
"value": "10"
},
{
"begin": 324,
"end": 347,
"name": "SWAP2",
"source": 0
},
{
"begin": 324,
"end": 347,
"name": "SWAP1",
"source": 0
},
{
"begin": 324,
"end": 347,
"name": "PUSH [tag]",
"source": 0,
"value": "11"
},
{
"begin": 324,
"end": 347,
"jumpType": "[in]",
"name": "JUMP",
"source": 0
},
{
"begin": 324,
"end": 347,
"name": "tag",
"source": 0,
"value": "10"
},
{
"begin": 324,
"end": 347,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 317,
"end": 347,
"name": "SWAP1",
"source": 0
},
{
"begin": 317,
"end": 347,
"name": "POP",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "SWAP3",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "SWAP2",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "POP",
"source": 0
},
{
"begin": 218,
"end": 351,
"name": "POP",
"source": 0
},
{
"begin": 218,
"end": 351,
"jumpType": "[out]",
"name": "JUMP",
"source": 0
},
{
"begin": 88,
"end": 205,
"name": "tag",
"source": 2,
"value": "13"
},
{
"begin": 88,
"end": 205,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 197,
"end": 198,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 194,
"end": 195,
"name": "DUP1",
"source": 2
},
{
"begin": 187,
"end": 199,
"name": "REVERT",
"source": 2
},
{
"begin": 334,
"end": 411,
"name": "tag",
"source": 2,
"value": "15"
},
{
"begin": 334,
"end": 411,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 371,
"end": 378,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 400,
"end": 405,
"name": "DUP2",
"source": 2
},
{
"begin": 389,
"end": 405,
"name": "SWAP1",
"source": 2
},
{
"begin": 389,
"end": 405,
"name": "POP",
"source": 2
},
{
"begin": 334,
"end": 411,
"name": "SWAP2",
"source": 2
},
{
"begin": 334,
"end": 411,
"name": "SWAP1",
"source": 2
},
{
"begin": 334,
"end": 411,
"name": "POP",
"source": 2
},
{
"begin": 334,
"end": 411,
"jumpType": "[out]",
"name": "JUMP",
"source": 2
},
{
"begin": 417,
"end": 539,
"name": "tag",
"source": 2,
"value": "16"
},
{
"begin": 417,
"end": 539,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 490,
"end": 514,
"name": "PUSH [tag]",
"source": 2,
"value": "26"
},
{
"begin": 508,
"end": 513,
"name": "DUP2",
"source": 2
},
{
"begin": 490,
"end": 514,
"name": "PUSH [tag]",
"source": 2,
"value": "15"
},
{
"begin": 490,
"end": 514,
"jumpType": "[in]",
"name": "JUMP",
"source": 2
},
{
"begin": 490,
"end": 514,
"name": "tag",
"source": 2,
"value": "26"
},
{
"begin": 490,
"end": 514,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 483,
"end": 488,
"name": "DUP2",
"source": 2
},
{
"begin": 480,
"end": 515,
"name": "EQ",
"source": 2
},
{
"begin": 470,
"end": 533,
"name": "PUSH [tag]",
"source": 2,
"value": "27"
},
{
"begin": 470,
"end": 533,
"name": "JUMPI",
"source": 2
},
{
"begin": 529,
"end": 530,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 526,
"end": 527,
"name": "DUP1",
"source": 2
},
{
"begin": 519,
"end": 531,
"name": "REVERT",
"source": 2
},
{
"begin": 470,
"end": 533,
"name": "tag",
"source": 2,
"value": "27"
},
{
"begin": 470,
"end": 533,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 417,
"end": 539,
"name": "POP",
"source": 2
},
{
"begin": 417,
"end": 539,
"jumpType": "[out]",
"name": "JUMP",
"source": 2
},
{
"begin": 545,
"end": 684,
"name": "tag",
"source": 2,
"value": "17"
},
{
"begin": 545,
"end": 684,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 591,
"end": 596,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 629,
"end": 635,
"name": "DUP2",
"source": 2
},
{
"begin": 616,
"end": 636,
"name": "CALLDATALOAD",
"source": 2
},
{
"begin": 607,
"end": 636,
"name": "SWAP1",
"source": 2
},
{
"begin": 607,
"end": 636,
"name": "POP",
"source": 2
},
{
"begin": 645,
"end": 678,
"name": "PUSH [tag]",
"source": 2,
"value": "29"
},
{
"begin": 672,
"end": 677,
"name": "DUP2",
"source": 2
},
{
"begin": 645,
"end": 678,
"name": "PUSH [tag]",
"source": 2,
"value": "16"
},
{
"begin": 645,
"end": 678,
"jumpType": "[in]",
"name": "JUMP",
"source": 2
},
{
"begin": 645,
"end": 678,
"name": "tag",
"source": 2,
"value": "29"
},
{
"begin": 645,
"end": 678,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 545,
"end": 684,
"name": "SWAP3",
"source": 2
},
{
"begin": 545,
"end": 684,
"name": "SWAP2",
"source": 2
},
{
"begin": 545,
"end": 684,
"name": "POP",
"source": 2
},
{
"begin": 545,
"end": 684,
"name": "POP",
"source": 2
},
{
"begin": 545,
"end": 684,
"jumpType": "[out]",
"name": "JUMP",
"source": 2
},
{
"begin": 690,
"end": 1164,
"name": "tag",
"source": 2,
"value": "5"
},
{
"begin": 690,
"end": 1164,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 758,
"end": 764,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 766,
"end": 772,
"name": "DUP1",
"source": 2
},
{
"begin": 815,
"end": 817,
"name": "PUSH",
"source": 2,
"value": "40"
},
{
"begin": 803,
"end": 812,
"name": "DUP4",
"source": 2
},
{
"begin": 794,
"end": 801,
"name": "DUP6",
"source": 2
},
{
"begin": 790,
"end": 813,
"name": "SUB",
"source": 2
},
{
"begin": 786,
"end": 818,
"name": "SLT",
"source": 2
},
{
"begin": 783,
"end": 902,
"name": "ISZERO",
"source": 2
},
{
"begin": 783,
"end": 902,
"name": "PUSH [tag]",
"source": 2,
"value": "31"
},
{
"begin": 783,
"end": 902,
"name": "JUMPI",
"source": 2
},
{
"begin": 821,
"end": 900,
"name": "PUSH [tag]",
"source": 2,
"value": "32"
},
{
"begin": 821,
"end": 900,
"name": "PUSH [tag]",
"source": 2,
"value": "13"
},
{
"begin": 821,
"end": 900,
"jumpType": "[in]",
"name": "JUMP",
"source": 2
},
{
"begin": 821,
"end": 900,
"name": "tag",
"source": 2,
"value": "32"
},
{
"begin": 821,
"end": 900,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 783,
"end": 902,
"name": "tag",
"source": 2,
"value": "31"
},
{
"begin": 783,
"end": 902,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 941,
"end": 942,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 966,
"end": 1019,
"name": "PUSH [tag]",
"source": 2,
"value": "33"
},
{
"begin": 1011,
"end": 1018,
"name": "DUP6",
"source": 2
},
{
"begin": 1002,
"end": 1008,
"name": "DUP3",
"source": 2
},
{
"begin": 991,
"end": 1000,
"name": "DUP7",
"source": 2
},
{
"begin": 987,
"end": 1009,
"name": "ADD",
"source": 2
},
{
"begin": 966,
"end": 1019,
"name": "PUSH [tag]",
"source": 2,
"value": "17"
},
{
"begin": 966,
"end": 1019,
"jumpType": "[in]",
"name": "JUMP",
"source": 2
},
{
"begin": 966,
"end": 1019,
"name": "tag",
"source": 2,
"value": "33"
},
{
"begin": 966,
"end": 1019,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 956,
"end": 1019,
"name": "SWAP3",
"source": 2
},
{
"begin": 956,
"end": 1019,
"name": "POP",
"source": 2
},
{
"begin": 912,
"end": 1029,
"name": "POP",
"source": 2
},
{
"begin": 1068,
"end": 1070,
"name": "PUSH",
"source": 2,
"value": "20"
},
{
"begin": 1094,
"end": 1147,
"name": "PUSH [tag]",
"source": 2,
"value": "34"
},
{
"begin": 1139,
"end": 1146,
"name": "DUP6",
"source": 2
},
{
"begin": 1130,
"end": 1136,
"name": "DUP3",
"source": 2
},
{
"begin": 1119,
"end": 1128,
"name": "DUP7",
"source": 2
},
{
"begin": 1115,
"end": 1137,
"name": "ADD",
"source": 2
},
{
"begin": 1094,
"end": 1147,
"name": "PUSH [tag]",
"source": 2,
"value": "17"
},
{
"begin": 1094,
"end": 1147,
"jumpType": "[in]",
"name": "JUMP",
"source": 2
},
{
"begin": 1094,
"end": 1147,
"name": "tag",
"source": 2,
"value": "34"
},
{
"begin": 1094,
"end": 1147,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1084,
"end": 1147,
"name": "SWAP2",
"source": 2
},
{
"begin": 1084,
"end": 1147,
"name": "POP",
"source": 2
},
{
"begin": 1039,
"end": 1157,
"name": "POP",
"source": 2
},
{
"begin": 690,
"end": 1164,
"name": "SWAP3",
"source": 2
},
{
"begin": 690,
"end": 1164,
"name": "POP",
"source": 2
},
{
"begin": 690,
"end": 1164,
"name": "SWAP3",
"source": 2
},
{
"begin": 690,
"end": 1164,
"name": "SWAP1",
"source": 2
},
{
"begin": 690,
"end": 1164,
"name": "POP",
"source": 2
},
{
"begin": 690,
"end": 1164,
"jumpType": "[out]",
"name": "JUMP",
"source": 2
},
{
"begin": 1170,
"end": 1296,
"name": "tag",
"source": 2,
"value": "18"
},
{
"begin": 1170,
"end": 1296,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1265,
"end": 1289,
"name": "PUSH [tag]",
"source": 2,
"value": "36"
},
{
"begin": 1283,
"end": 1288,
"name": "DUP2",
"source": 2
},
{
"begin": 1265,
"end": 1289,
"name": "PUSH [tag]",
"source": 2,
"value": "15"
},
{
"begin": 1265,
"end": 1289,
"jumpType": "[in]",
"name": "JUMP",
"source": 2
},
{
"begin": 1265,
"end": 1289,
"name": "tag",
"source": 2,
"value": "36"
},
{
"begin": 1265,
"end": 1289,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1260,
"end": 1263,
"name": "DUP3",
"source": 2
},
{
"begin": 1253,
"end": 1290,
"name": "MSTORE",
"source": 2
},
{
"begin": 1170,
"end": 1296,
"name": "POP",
"source": 2
},
{
"begin": 1170,
"end": 1296,
"name": "POP",
"source": 2
},
{
"begin": 1170,
"end": 1296,
"jumpType": "[out]",
"name": "JUMP",
"source": 2
},
{
"begin": 1302,
"end": 1540,
"name": "tag",
"source": 2,
"value": "8"
},
{
"begin": 1302,
"end": 1540,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1403,
"end": 1407,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 1441,
"end": 1443,
"name": "PUSH",
"source": 2,
"value": "20"
},
{
"begin": 1430,
"end": 1439,
"name": "DUP3",
"source": 2
},
{
"begin": 1426,
"end": 1444,
"name": "ADD",
"source": 2
},
{
"begin": 1418,
"end": 1444,
"name": "SWAP1",
"source": 2
},
{
"begin": 1418,
"end": 1444,
"name": "POP",
"source": 2
},
{
"begin": 1454,
"end": 1533,
"name": "PUSH [tag]",
"source": 2,
"value": "38"
},
{
"begin": 1530,
"end": 1531,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 1519,
"end": 1528,
"name": "DUP4",
"source": 2
},
{
"begin": 1515,
"end": 1532,
"name": "ADD",
"source": 2
},
{
"begin": 1506,
"end": 1512,
"name": "DUP5",
"source": 2
},
{
"begin": 1454,
"end": 1533,
"name": "PUSH [tag]",
"source": 2,
"value": "18"
},
{
"begin": 1454,
"end": 1533,
"jumpType": "[in]",
"name": "JUMP",
"source": 2
},
{
"begin": 1454,
"end": 1533,
"name": "tag",
"source": 2,
"value": "38"
},
{
"begin": 1454,
"end": 1533,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1302,
"end": 1540,
"name": "SWAP3",
"source": 2
},
{
"begin": 1302,
"end": 1540,
"name": "SWAP2",
"source": 2
},
{
"begin": 1302,
"end": 1540,
"name": "POP",
"source": 2
},
{
"begin": 1302,
"end": 1540,
"name": "POP",
"source": 2
},
{
"begin": 1302,
"end": 1540,
"jumpType": "[out]",
"name": "JUMP",
"source": 2
},
{
"begin": 1546,
"end": 1726,
"name": "tag",
"source": 2,
"value": "19"
},
{
"begin": 1546,
"end": 1726,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1594,
"end": 1671,
"name": "PUSH",
"source": 2,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 1591,
"end": 1592,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 1584,
"end": 1672,
"name": "MSTORE",
"source": 2
},
{
"begin": 1691,
"end": 1695,
"name": "PUSH",
"source": 2,
"value": "11"
},
{
"begin": 1688,
"end": 1689,
"name": "PUSH",
"source": 2,
"value": "4"
},
{
"begin": 1681,
"end": 1696,
"name": "MSTORE",
"source": 2
},
{
"begin": 1715,
"end": 1719,
"name": "PUSH",
"source": 2,
"value": "24"
},
{
"begin": 1712,
"end": 1713,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 1705,
"end": 1720,
"name": "REVERT",
"source": 2
},
{
"begin": 1732,
"end": 2142,
"name": "tag",
"source": 2,
"value": "11"
},
{
"begin": 1732,
"end": 2142,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1772,
"end": 1779,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 1795,
"end": 1815,
"name": "PUSH [tag]",
"source": 2,
"value": "41"
},
{
"begin": 1813,
"end": 1814,
"name": "DUP3",
"source": 2
},
{
"begin": 1795,
"end": 1815,
"name": "PUSH [tag]",
"source": 2,
"value": "15"
},
{
"begin": 1795,
"end": 1815,
"jumpType": "[in]",
"name": "JUMP",
"source": 2
},
{
"begin": 1795,
"end": 1815,
"name": "tag",
"source": 2,
"value": "41"
},
{
"begin": 1795,
"end": 1815,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1790,
"end": 1815,
"name": "SWAP2",
"source": 2
},
{
"begin": 1790,
"end": 1815,
"name": "POP",
"source": 2
},
{
"begin": 1829,
"end": 1849,
"name": "PUSH [tag]",
"source": 2,
"value": "42"
},
{
"begin": 1847,
"end": 1848,
"name": "DUP4",
"source": 2
},
{
"begin": 1829,
"end": 1849,
"name": "PUSH [tag]",
"source": 2,
"value": "15"
},
{
"begin": 1829,
"end": 1849,
"jumpType": "[in]",
"name": "JUMP",
"source": 2
},
{
"begin": 1829,
"end": 1849,
"name": "tag",
"source": 2,
"value": "42"
},
{
"begin": 1829,
"end": 1849,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1824,
"end": 1849,
"name": "SWAP3",
"source": 2
},
{
"begin": 1824,
"end": 1849,
"name": "POP",
"source": 2
},
{
"begin": 1884,
"end": 1885,
"name": "DUP3",
"source": 2
},
{
"begin": 1881,
"end": 1882,
"name": "DUP3",
"source": 2
},
{
"begin": 1877,
"end": 1886,
"name": "MUL",
"source": 2
},
{
"begin": 1906,
"end": 1936,
"name": "PUSH [tag]",
"source": 2,
"value": "43"
},
{
"begin": 1924,
"end": 1935,
"name": "DUP2",
"source": 2
},
{
"begin": 1906,
"end": 1936,
"name": "PUSH [tag]",
"source": 2,
"value": "15"
},
{
"begin": 1906,
"end": 1936,
"jumpType": "[in]",
"name": "JUMP",
"source": 2
},
{
"begin": 1906,
"end": 1936,
"name": "tag",
"source": 2,
"value": "43"
},
{
"begin": 1906,
"end": 1936,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1895,
"end": 1936,
"name": "SWAP2",
"source": 2
},
{
"begin": 1895,
"end": 1936,
"name": "POP",
"source": 2
},
{
"begin": 2085,
"end": 2086,
"name": "DUP3",
"source": 2
},
{
"begin": 2076,
"end": 2083,
"name": "DUP3",
"source": 2
},
{
"begin": 2072,
"end": 2087,
"name": "DIV",
"source": 2
},
{
"begin": 2069,
"end": 2070,
"name": "DUP5",
"source": 2
},
{
"begin": 2066,
"end": 2088,
"name": "EQ",
"source": 2
},
{
"begin": 2046,
"end": 2047,
"name": "DUP4",
"source": 2
},
{
"begin": 2039,
"end": 2048,
"name": "ISZERO",
"source": 2
},
{
"begin": 2019,
"end": 2102,
"name": "OR",
"source": 2
},
{
"begin": 1996,
"end": 2135,
"name": "PUSH [tag]",
"source": 2,
"value": "44"
},
{
"begin": 1996,
"end": 2135,
"name": "JUMPI",
"source": 2
},
{
"begin": 2115,
"end": 2133,
"name": "PUSH [tag]",
"source": 2,
"value": "45"
},
{
"begin": 2115,
"end": 2133,
"name": "PUSH [tag]",
"source": 2,
"value": "19"
},
{
"begin": 2115,
"end": 2133,
"jumpType": "[in]",
"name": "JUMP",
"source": 2
},
{
"begin": 2115,
"end": 2133,
"name": "tag",
"source": 2,
"value": "45"
},
{
"begin": 2115,
"end": 2133,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1996,
"end": 2135,
"name": "tag",
"source": 2,
"value": "44"
},
{
"begin": 1996,
"end": 2135,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 1780,
"end": 2142,
"name": "POP",
"source": 2
},
{
"begin": 1732,
"end": 2142,
"name": "SWAP3",
"source": 2
},
{
"begin": 1732,
"end": 2142,
"name": "SWAP2",
"source": 2
},
{
"begin": 1732,
"end": 2142,
"name": "POP",
"source": 2
},
{
"begin": 1732,
"end": 2142,
"name": "POP",
"source": 2
},
{
"begin": 1732,
"end": 2142,
"jumpType": "[out]",
"name": "JUMP",
"source": 2
}
]
}
},
"sourceList": [
"ConvertLib.sol",
"MetaCoin.sol",
"#utility.yul"
]
},
"methodIdentifiers": {
"convert(uint256,uint256)": "96e4ee3d"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"conversionRate\",\"type\":\"uint256\"}],\"name\":\"convert\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"convertedAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"ConvertLib.sol\":\"ConvertLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"ConvertLib.sol\":{\"keccak256\":\"0x3ee33e6e8cf55bad996568ba3cd311ac174c8b4fd9fd51cd6aabf6000d5c9643\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://de003f417b98896601d7f63ab7cee95f38f237af4d56712019221644954a7509\",\"dweb:/ipfs/QmQb7FVshbroABJCpCsn6hf2gu7nqUdXvFHkWNwjRSVwkm\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"MetaCoin.sol": {
"MetaCoin": {
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "getBalanceInEth",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "sendCoin",
"outputs": [
{
"internalType": "bool",
"name": "sufficient",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"MetaCoin.sol\":310:977 contract MetaCoin {... */\n mstore(0x40, 0x80)\n /* \"MetaCoin.sol\":447:496 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"MetaCoin.sol\":487:492 10000 */\n 0x2710\n /* \"MetaCoin.sol\":465:473 balances */\n 0x00\n /* \"MetaCoin.sol\":465:484 balances[tx.origin] */\n dup1\n /* \"MetaCoin.sol\":474:483 tx.origin */\n origin\n /* \"MetaCoin.sol\":465:484 balances[tx.origin] */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n mstore\n 0x20\n add\n swap1\n dup2\n mstore\n 0x20\n add\n 0x00\n keccak256\n /* \"MetaCoin.sol\":465:492 balances[tx.origin] = 10000 */\n dup2\n swap1\n sstore\n pop\n /* \"MetaCoin.sol\":310:977 contract MetaCoin {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"MetaCoin.sol\":310:977 contract MetaCoin {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x7bd703e8\n eq\n tag_3\n jumpi\n dup1\n 0x90b98a11\n eq\n tag_4\n jumpi\n dup1\n 0xf8b2cb4f\n eq\n tag_5\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"MetaCoin.sol\":766:883 function getBalanceInEth(address addr) public view returns(uint){... */\n tag_3:\n tag_6\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n tag_9\n jump\t// in\n tag_6:\n mload(0x40)\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"MetaCoin.sol\":499:763 function sendCoin(address receiver, uint amount) public returns(bool sufficient) {... */\n tag_4:\n tag_12\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_13\n swap2\n swap1\n tag_14\n jump\t// in\n tag_13:\n tag_15\n jump\t// in\n tag_12:\n mload(0x40)\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"MetaCoin.sol\":886:975 function getBalance(address addr) public view returns(uint) {... */\n tag_5:\n tag_18\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_19\n swap2\n swap1\n tag_8\n jump\t// in\n tag_19:\n tag_20\n jump\t// in\n tag_18:\n mload(0x40)\n tag_21\n swap2\n swap1\n tag_11\n jump\t// in\n tag_21:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"MetaCoin.sol\":766:883 function getBalanceInEth(address addr) public view returns(uint){... */\n tag_9:\n /* \"MetaCoin.sol\":825:829 uint */\n 0x00\n /* \"MetaCoin.sol\":841:851 ConvertLib */\n linkerSymbol(\"c1e9661f796f9214b5c8076e394fd5a419fdece7270a742f363c5f3b0687df0b\")\n /* \"MetaCoin.sol\":841:859 ConvertLib.convert */\n 0x96e4ee3d\n /* \"MetaCoin.sol\":860:876 getBalance(addr) */\n tag_23\n /* \"MetaCoin.sol\":871:875 addr */\n dup5\n /* \"MetaCoin.sol\":860:870 getBalance */\n tag_20\n /* \"MetaCoin.sol\":860:876 getBalance(addr) */\n jump\t// in\n tag_23:\n /* \"MetaCoin.sol\":877:878 2 */\n 0x02\n /* \"MetaCoin.sol\":841:879 ConvertLib.convert(getBalance(addr),2) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_24\n swap3\n swap2\n swap1\n tag_25\n jump\t// in\n tag_24:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n delegatecall\n iszero\n dup1\n iszero\n tag_27\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_27:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_28\n swap2\n swap1\n tag_29\n jump\t// in\n tag_28:\n /* \"MetaCoin.sol\":834:879 return ConvertLib.convert(getBalance(addr),2) */\n swap1\n pop\n /* \"MetaCoin.sol\":766:883 function getBalanceInEth(address addr) public view returns(uint){... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"MetaCoin.sol\":499:763 function sendCoin(address receiver, uint amount) public returns(bool sufficient) {... */\n tag_15:\n /* \"MetaCoin.sol\":563:578 bool sufficient */\n 0x00\n /* \"MetaCoin.sol\":611:617 amount */\n dup2\n /* \"MetaCoin.sol\":588:596 balances */\n 0x00\n /* \"MetaCoin.sol\":588:608 balances[msg.sender] */\n dup1\n /* \"MetaCoin.sol\":597:607 msg.sender */\n caller\n /* \"MetaCoin.sol\":588:608 balances[msg.sender] */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n mstore\n 0x20\n add\n swap1\n dup2\n mstore\n 0x20\n add\n 0x00\n keccak256\n sload\n /* \"MetaCoin.sol\":588:617 balances[msg.sender] < amount */\n lt\n /* \"MetaCoin.sol\":584:631 if (balances[msg.sender] < amount) return false */\n iszero\n tag_31\n jumpi\n /* \"MetaCoin.sol\":626:631 false */\n 0x00\n /* \"MetaCoin.sol\":619:631 return false */\n swap1\n pop\n jump(tag_30)\n /* \"MetaCoin.sol\":584:631 if (balances[msg.sender] < amount) return false */\n tag_31:\n /* \"MetaCoin.sol\":659:665 amount */\n dup2\n /* \"MetaCoin.sol\":635:643 balances */\n 0x00\n /* \"MetaCoin.sol\":635:655 balances[msg.sender] */\n dup1\n /* \"MetaCoin.sol\":644:654 msg.sender */\n caller\n /* \"MetaCoin.sol\":635:655 balances[msg.sender] */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n mstore\n 0x20\n add\n swap1\n dup2\n mstore\n 0x20\n add\n 0x00\n keccak256\n 0x00\n /* \"MetaCoin.sol\":635:665 balances[msg.sender] -= amount */\n dup3\n dup3\n sload\n tag_32\n swap2\n swap1\n tag_33\n jump\t// in\n tag_32:\n swap3\n pop\n pop\n dup2\n swap1\n sstore\n pop\n /* \"MetaCoin.sol\":691:697 amount */\n dup2\n /* \"MetaCoin.sol\":669:677 balances */\n 0x00\n /* \"MetaCoin.sol\":669:687 balances[receiver] */\n dup1\n /* \"MetaCoin.sol\":678:686 receiver */\n dup6\n /* \"MetaCoin.sol\":669:687 balances[receiver] */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n mstore\n 0x20\n add\n swap1\n dup2\n mstore\n 0x20\n add\n 0x00\n keccak256\n 0x00\n /* \"MetaCoin.sol\":669:697 balances[receiver] += amount */\n dup3\n dup3\n sload\n tag_34\n swap2\n swap1\n tag_35\n jump\t// in\n tag_34:\n swap3\n pop\n pop\n dup2\n swap1\n sstore\n pop\n /* \"MetaCoin.sol\":727:735 receiver */\n dup3\n /* \"MetaCoin.sol\":706:744 Transfer(msg.sender, receiver, amount) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"MetaCoin.sol\":715:725 msg.sender */\n caller\n /* \"MetaCoin.sol\":706:744 Transfer(msg.sender, receiver, amount) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n /* \"MetaCoin.sol\":737:743 amount */\n dup5\n /* \"MetaCoin.sol\":706:744 Transfer(msg.sender, receiver, amount) */\n mload(0x40)\n tag_36\n swap2\n swap1\n tag_11\n jump\t// in\n tag_36:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log3\n /* \"MetaCoin.sol\":755:759 true */\n 0x01\n /* \"MetaCoin.sol\":748:759 return true */\n swap1\n pop\n /* \"MetaCoin.sol\":499:763 function sendCoin(address receiver, uint amount) public returns(bool sufficient) {... */\n tag_30:\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"MetaCoin.sol\":886:975 function getBalance(address addr) public view returns(uint) {... */\n tag_20:\n /* \"MetaCoin.sol\":940:944 uint */\n 0x00\n /* \"MetaCoin.sol\":957:965 balances */\n dup1\n /* \"MetaCoin.sol\":957:971 balances[addr] */\n 0x00\n /* \"MetaCoin.sol\":966:970 addr */\n dup4\n /* \"MetaCoin.sol\":957:971 balances[addr] */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n mstore\n 0x20\n add\n swap1\n dup2\n mstore\n 0x20\n add\n 0x00\n keccak256\n sload\n /* \"MetaCoin.sol\":950:971 return balances[addr] */\n swap1\n pop\n /* \"MetaCoin.sol\":886:975 function getBalance(address addr) public view returns(uint) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_39:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:460 */\n tag_41:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":411:453 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":404:409 */\n dup3\n /* \"#utility.yul\":400:454 */\n and\n /* \"#utility.yul\":389:454 */\n swap1\n pop\n /* \"#utility.yul\":334:460 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":466:562 */\n tag_42:\n /* \"#utility.yul\":503:510 */\n 0x00\n /* \"#utility.yul\":532:556 */\n tag_64\n /* \"#utility.yul\":550:555 */\n dup3\n /* \"#utility.yul\":532:556 */\n tag_41\n jump\t// in\n tag_64:\n /* \"#utility.yul\":521:556 */\n swap1\n pop\n /* \"#utility.yul\":466:562 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":568:690 */\n tag_43:\n /* \"#utility.yul\":641:665 */\n tag_66\n /* \"#utility.yul\":659:664 */\n dup2\n /* \"#utility.yul\":641:665 */\n tag_42\n jump\t// in\n tag_66:\n /* \"#utility.yul\":634:639 */\n dup2\n /* \"#utility.yul\":631:666 */\n eq\n /* \"#utility.yul\":621:684 */\n tag_67\n jumpi\n /* \"#utility.yul\":680:681 */\n 0x00\n /* \"#utility.yul\":677:678 */\n dup1\n /* \"#utility.yul\":670:682 */\n revert\n /* \"#utility.yul\":621:684 */\n tag_67:\n /* \"#utility.yul\":568:690 */\n pop\n jump\t// out\n /* \"#utility.yul\":696:835 */\n tag_44:\n /* \"#utility.yul\":742:747 */\n 0x00\n /* \"#utility.yul\":780:786 */\n dup2\n /* \"#utility.yul\":767:787 */\n calldataload\n /* \"#utility.yul\":758:787 */\n swap1\n pop\n /* \"#utility.yul\":796:829 */\n tag_69\n /* \"#utility.yul\":823:828 */\n dup2\n /* \"#utility.yul\":796:829 */\n tag_43\n jump\t// in\n tag_69:\n /* \"#utility.yul\":696:835 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":841:1170 */\n tag_8:\n /* \"#utility.yul\":900:906 */\n 0x00\n /* \"#utility.yul\":949:951 */\n 0x20\n /* \"#utility.yul\":937:946 */\n dup3\n /* \"#utility.yul\":928:935 */\n dup5\n /* \"#utility.yul\":924:947 */\n sub\n /* \"#utility.yul\":920:952 */\n slt\n /* \"#utility.yul\":917:1036 */\n iszero\n tag_71\n jumpi\n /* \"#utility.yul\":955:1034 */\n tag_72\n tag_39\n jump\t// in\n tag_72:\n /* \"#utility.yul\":917:1036 */\n tag_71:\n /* \"#utility.yul\":1075:1076 */\n 0x00\n /* \"#utility.yul\":1100:1153 */\n tag_73\n /* \"#utility.yul\":1145:1152 */\n dup5\n /* \"#utility.yul\":1136:1142 */\n dup3\n /* \"#utility.yul\":1125:1134 */\n dup6\n /* \"#utility.yul\":1121:1143 */\n add\n /* \"#utility.yul\":1100:1153 */\n tag_44\n jump\t// in\n tag_73:\n /* \"#utility.yul\":1090:1153 */\n swap2\n pop\n /* \"#utility.yul\":1046:1163 */\n pop\n /* \"#utility.yul\":841:1170 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1176:1253 */\n tag_45:\n /* \"#utility.yul\":1213:1220 */\n 0x00\n /* \"#utility.yul\":1242:1247 */\n dup2\n /* \"#utility.yul\":1231:1247 */\n swap1\n pop\n /* \"#utility.yul\":1176:1253 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1259:1377 */\n tag_46:\n /* \"#utility.yul\":1346:1370 */\n tag_76\n /* \"#utility.yul\":1364:1369 */\n dup2\n /* \"#utility.yul\":1346:1370 */\n tag_45\n jump\t// in\n tag_76:\n /* \"#utility.yul\":1341:1344 */\n dup3\n /* \"#utility.yul\":1334:1371 */\n mstore\n /* \"#utility.yul\":1259:1377 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1383:1605 */\n tag_11:\n /* \"#utility.yul\":1476:1480 */\n 0x00\n /* \"#utility.yul\":1514:1516 */\n 0x20\n /* \"#utility.yul\":1503:1512 */\n dup3\n /* \"#utility.yul\":1499:1517 */\n add\n /* \"#utility.yul\":1491:1517 */\n swap1\n pop\n /* \"#utility.yul\":1527:1598 */\n tag_78\n /* \"#utility.yul\":1595:1596 */\n 0x00\n /* \"#utility.yul\":1584:1593 */\n dup4\n /* \"#utility.yul\":1580:1597 */\n add\n /* \"#utility.yul\":1571:1577 */\n dup5\n /* \"#utility.yul\":1527:1598 */\n tag_46\n jump\t// in\n tag_78:\n /* \"#utility.yul\":1383:1605 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1611:1733 */\n tag_47:\n /* \"#utility.yul\":1684:1708 */\n tag_80\n /* \"#utility.yul\":1702:1707 */\n dup2\n /* \"#utility.yul\":1684:1708 */\n tag_45\n jump\t// in\n tag_80:\n /* \"#utility.yul\":1677:1682 */\n dup2\n /* \"#utility.yul\":1674:1709 */\n eq\n /* \"#utility.yul\":1664:1727 */\n tag_81\n jumpi\n /* \"#utility.yul\":1723:1724 */\n 0x00\n /* \"#utility.yul\":1720:1721 */\n dup1\n /* \"#utility.yul\":1713:1725 */\n revert\n /* \"#utility.yul\":1664:1727 */\n tag_81:\n /* \"#utility.yul\":1611:1733 */\n pop\n jump\t// out\n /* \"#utility.yul\":1739:1878 */\n tag_48:\n /* \"#utility.yul\":1785:1790 */\n 0x00\n /* \"#utility.yul\":1823:1829 */\n dup2\n /* \"#utility.yul\":1810:1830 */\n calldataload\n /* \"#utility.yul\":1801:1830 */\n swap1\n pop\n /* \"#utility.yul\":1839:1872 */\n tag_83\n /* \"#utility.yul\":1866:1871 */\n dup2\n /* \"#utility.yul\":1839:1872 */\n tag_47\n jump\t// in\n tag_83:\n /* \"#utility.yul\":1739:1878 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1884:2358 */\n tag_14:\n /* \"#utility.yul\":1952:1958 */\n 0x00\n /* \"#utility.yul\":1960:1966 */\n dup1\n /* \"#utility.yul\":2009:2011 */\n 0x40\n /* \"#utility.yul\":1997:2006 */\n dup4\n /* \"#utility.yul\":1988:1995 */\n dup6\n /* \"#utility.yul\":1984:2007 */\n sub\n /* \"#utility.yul\":1980:2012 */\n slt\n /* \"#utility.yul\":1977:2096 */\n iszero\n tag_85\n jumpi\n /* \"#utility.yul\":2015:2094 */\n tag_86\n tag_39\n jump\t// in\n tag_86:\n /* \"#utility.yul\":1977:2096 */\n tag_85:\n /* \"#utility.yul\":2135:2136 */\n 0x00\n /* \"#utility.yul\":2160:2213 */\n tag_87\n /* \"#utility.yul\":2205:2212 */\n dup6\n /* \"#utility.yul\":2196:2202 */\n dup3\n /* \"#utility.yul\":2185:2194 */\n dup7\n /* \"#utility.yul\":2181:2203 */\n add\n /* \"#utility.yul\":2160:2213 */\n tag_44\n jump\t// in\n tag_87:\n /* \"#utility.yul\":2150:2213 */\n swap3\n pop\n /* \"#utility.yul\":2106:2223 */\n pop\n /* \"#utility.yul\":2262:2264 */\n 0x20\n /* \"#utility.yul\":2288:2341 */\n tag_88\n /* \"#utility.yul\":2333:2340 */\n dup6\n /* \"#utility.yul\":2324:2330 */\n dup3\n /* \"#utility.yul\":2313:2322 */\n dup7\n /* \"#utility.yul\":2309:2331 */\n add\n /* \"#utility.yul\":2288:2341 */\n tag_48\n jump\t// in\n tag_88:\n /* \"#utility.yul\":2278:2341 */\n swap2\n pop\n /* \"#utility.yul\":2233:2351 */\n pop\n /* \"#utility.yul\":1884:2358 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2364:2454 */\n tag_49:\n /* \"#utility.yul\":2398:2405 */\n 0x00\n /* \"#utility.yul\":2441:2446 */\n dup2\n /* \"#utility.yul\":2434:2447 */\n iszero\n /* \"#utility.yul\":2427:2448 */\n iszero\n /* \"#utility.yul\":2416:2448 */\n swap1\n pop\n /* \"#utility.yul\":2364:2454 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2460:2569 */\n tag_50:\n /* \"#utility.yul\":2541:2562 */\n tag_91\n /* \"#utility.yul\":2556:2561 */\n dup2\n /* \"#utility.yul\":2541:2562 */\n tag_49\n jump\t// in\n tag_91:\n /* \"#utility.yul\":2536:2539 */\n dup3\n /* \"#utility.yul\":2529:2563 */\n mstore\n /* \"#utility.yul\":2460:2569 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2575:2785 */\n tag_17:\n /* \"#utility.yul\":2662:2666 */\n 0x00\n /* \"#utility.yul\":2700:2702 */\n 0x20\n /* \"#utility.yul\":2689:2698 */\n dup3\n /* \"#utility.yul\":2685:2703 */\n add\n /* \"#utility.yul\":2677:2703 */\n swap1\n pop\n /* \"#utility.yul\":2713:2778 */\n tag_93\n /* \"#utility.yul\":2775:2776 */\n 0x00\n /* \"#utility.yul\":2764:2773 */\n dup4\n /* \"#utility.yul\":2760:2777 */\n add\n /* \"#utility.yul\":2751:2757 */\n dup5\n /* \"#utility.yul\":2713:2778 */\n tag_50\n jump\t// in\n tag_93:\n /* \"#utility.yul\":2575:2785 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2791:2917 */\n tag_51:\n /* \"#utility.yul\":2886:2910 */\n tag_95\n /* \"#utility.yul\":2904:2909 */\n dup2\n /* \"#utility.yul\":2886:2910 */\n tag_45\n jump\t// in\n tag_95:\n /* \"#utility.yul\":2881:2884 */\n dup3\n /* \"#utility.yul\":2874:2911 */\n mstore\n /* \"#utility.yul\":2791:2917 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2923:3008 */\n tag_52:\n /* \"#utility.yul\":2968:2975 */\n 0x00\n /* \"#utility.yul\":2997:3002 */\n dup2\n /* \"#utility.yul\":2986:3002 */\n swap1\n pop\n /* \"#utility.yul\":2923:3008 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3014:3074 */\n tag_53:\n /* \"#utility.yul\":3042:3045 */\n 0x00\n /* \"#utility.yul\":3063:3068 */\n dup2\n /* \"#utility.yul\":3056:3068 */\n swap1\n pop\n /* \"#utility.yul\":3014:3074 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3080:3238 */\n tag_54:\n /* \"#utility.yul\":3138:3147 */\n 0x00\n /* \"#utility.yul\":3171:3232 */\n tag_99\n /* \"#utility.yul\":3189:3231 */\n tag_100\n /* \"#utility.yul\":3198:3230 */\n tag_101\n /* \"#utility.yul\":3224:3229 */\n dup5\n /* \"#utility.yul\":3198:3230 */\n tag_52\n jump\t// in\n tag_101:\n /* \"#utility.yul\":3189:3231 */\n tag_53\n jump\t// in\n tag_100:\n /* \"#utility.yul\":3171:3232 */\n tag_45\n jump\t// in\n tag_99:\n /* \"#utility.yul\":3158:3232 */\n swap1\n pop\n /* \"#utility.yul\":3080:3238 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3244:3399 */\n tag_55:\n /* \"#utility.yul\":3347:3392 */\n tag_103\n /* \"#utility.yul\":3386:3391 */\n dup2\n /* \"#utility.yul\":3347:3392 */\n tag_54\n jump\t// in\n tag_103:\n /* \"#utility.yul\":3342:3345 */\n dup3\n /* \"#utility.yul\":3335:3393 */\n mstore\n /* \"#utility.yul\":3244:3399 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3405:3777 */\n tag_25:\n /* \"#utility.yul\":3542:3546 */\n 0x00\n /* \"#utility.yul\":3580:3582 */\n 0x40\n /* \"#utility.yul\":3569:3578 */\n dup3\n /* \"#utility.yul\":3565:3583 */\n add\n /* \"#utility.yul\":3557:3583 */\n swap1\n pop\n /* \"#utility.yul\":3593:3672 */\n tag_105\n /* \"#utility.yul\":3669:3670 */\n 0x00\n /* \"#utility.yul\":3658:3667 */\n dup4\n /* \"#utility.yul\":3654:3671 */\n add\n /* \"#utility.yul\":3645:3651 */\n dup6\n /* \"#utility.yul\":3593:3672 */\n tag_51\n jump\t// in\n tag_105:\n /* \"#utility.yul\":3682:3770 */\n tag_106\n /* \"#utility.yul\":3766:3768 */\n 0x20\n /* \"#utility.yul\":3755:3764 */\n dup4\n /* \"#utility.yul\":3751:3769 */\n add\n /* \"#utility.yul\":3742:3748 */\n dup5\n /* \"#utility.yul\":3682:3770 */\n tag_55\n jump\t// in\n tag_106:\n /* \"#utility.yul\":3405:3777 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3783:3926 */\n tag_56:\n /* \"#utility.yul\":3840:3845 */\n 0x00\n /* \"#utility.yul\":3871:3877 */\n dup2\n /* \"#utility.yul\":3865:3878 */\n mload\n /* \"#utility.yul\":3856:3878 */\n swap1\n pop\n /* \"#utility.yul\":3887:3920 */\n tag_108\n /* \"#utility.yul\":3914:3919 */\n dup2\n /* \"#utility.yul\":3887:3920 */\n tag_47\n jump\t// in\n tag_108:\n /* \"#utility.yul\":3783:3926 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3932:4283 */\n tag_29:\n /* \"#utility.yul\":4002:4008 */\n 0x00\n /* \"#utility.yul\":4051:4053 */\n 0x20\n /* \"#utility.yul\":4039:4048 */\n dup3\n /* \"#utility.yul\":4030:4037 */\n dup5\n /* \"#utility.yul\":4026:4049 */\n sub\n /* \"#utility.yul\":4022:4054 */\n slt\n /* \"#utility.yul\":4019:4138 */\n iszero\n tag_110\n jumpi\n /* \"#utility.yul\":4057:4136 */\n tag_111\n tag_39\n jump\t// in\n tag_111:\n /* \"#utility.yul\":4019:4138 */\n tag_110:\n /* \"#utility.yul\":4177:4178 */\n 0x00\n /* \"#utility.yul\":4202:4266 */\n tag_112\n /* \"#utility.yul\":4258:4265 */\n dup5\n /* \"#utility.yul\":4249:4255 */\n dup3\n /* \"#utility.yul\":4238:4247 */\n dup6\n /* \"#utility.yul\":4234:4256 */\n add\n /* \"#utility.yul\":4202:4266 */\n tag_56\n jump\t// in\n tag_112:\n /* \"#utility.yul\":4192:4266 */\n swap2\n pop\n /* \"#utility.yul\":4148:4276 */\n pop\n /* \"#utility.yul\":3932:4283 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4289:4469 */\n tag_57:\n /* \"#utility.yul\":4337:4414 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":4334:4335 */\n 0x00\n /* \"#utility.yul\":4327:4415 */\n mstore\n /* \"#utility.yul\":4434:4438 */\n 0x11\n /* \"#utility.yul\":4431:4432 */\n 0x04\n /* \"#utility.yul\":4424:4439 */\n mstore\n /* \"#utility.yul\":4458:4462 */\n 0x24\n /* \"#utility.yul\":4455:4456 */\n 0x00\n /* \"#utility.yul\":4448:4463 */\n revert\n /* \"#utility.yul\":4475:4669 */\n tag_33:\n /* \"#utility.yul\":4515:4519 */\n 0x00\n /* \"#utility.yul\":4535:4555 */\n tag_115\n /* \"#utility.yul\":4553:4554 */\n dup3\n /* \"#utility.yul\":4535:4555 */\n tag_45\n jump\t// in\n tag_115:\n /* \"#utility.yul\":4530:4555 */\n swap2\n pop\n /* \"#utility.yul\":4569:4589 */\n tag_116\n /* \"#utility.yul\":4587:4588 */\n dup4\n /* \"#utility.yul\":4569:4589 */\n tag_45\n jump\t// in\n tag_116:\n /* \"#utility.yul\":4564:4589 */\n swap3\n pop\n /* \"#utility.yul\":4613:4614 */\n dup3\n /* \"#utility.yul\":4610:4611 */\n dup3\n /* \"#utility.yul\":4606:4615 */\n sub\n /* \"#utility.yul\":4598:4615 */\n swap1\n pop\n /* \"#utility.yul\":4637:4638 */\n dup2\n /* \"#utility.yul\":4631:4635 */\n dup2\n /* \"#utility.yul\":4628:4639 */\n gt\n /* \"#utility.yul\":4625:4662 */\n iszero\n tag_117\n jumpi\n /* \"#utility.yul\":4642:4660 */\n tag_118\n tag_57\n jump\t// in\n tag_118:\n /* \"#utility.yul\":4625:4662 */\n tag_117:\n /* \"#utility.yul\":4475:4669 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4675:4866 */\n tag_35:\n /* \"#utility.yul\":4715:4718 */\n 0x00\n /* \"#utility.yul\":4734:4754 */\n tag_120\n /* \"#utility.yul\":4752:4753 */\n dup3\n /* \"#utility.yul\":4734:4754 */\n tag_45\n jump\t// in\n tag_120:\n /* \"#utility.yul\":4729:4754 */\n swap2\n pop\n /* \"#utility.yul\":4768:4788 */\n tag_121\n /* \"#utility.yul\":4786:4787 */\n dup4\n /* \"#utility.yul\":4768:4788 */\n tag_45\n jump\t// in\n tag_121:\n /* \"#utility.yul\":4763:4788 */\n swap3\n pop\n /* \"#utility.yul\":4811:4812 */\n dup3\n /* \"#utility.yul\":4808:4809 */\n dup3\n /* \"#utility.yul\":4804:4813 */\n add\n /* \"#utility.yul\":4797:4813 */\n swap1\n pop\n /* \"#utility.yul\":4832:4835 */\n dup1\n /* \"#utility.yul\":4829:4830 */\n dup3\n /* \"#utility.yul\":4826:4836 */\n gt\n /* \"#utility.yul\":4823:4859 */\n iszero\n tag_122\n jumpi\n /* \"#utility.yul\":4839:4857 */\n tag_123\n tag_57\n jump\t// in\n tag_123:\n /* \"#utility.yul\":4823:4859 */\n tag_122:\n /* \"#utility.yul\":4675:4866 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220d1bc4f81c05cce3769cc157fc9df9c4113adc0bc3934e33d318fb615fcd3897f64736f6c63430008190033\n}\n",
"bytecode": {
"functionDebugData": {
"@_42": {
"entryPoint": null,
"id": 42,
"parameterSlots": 0,
"returnSlots": 0
}
},
"generatedSources": [],
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": [
{
"length": 20,
"start": 309
}
]
}
},
"object": "6080604052348015600e575f80fd5b506127105f803273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506105d78061005f5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c80637bd703e81461004357806390b98a1114610073578063f8b2cb4f146100a3575b5f80fd5b61005d60048036038101906100589190610360565b6100d3565b60405161006a91906103a3565b60405180910390f35b61008d600480360381019061008891906103e6565b61015c565b60405161009a919061043e565b60405180910390f35b6100bd60048036038101906100b89190610360565b6102bd565b6040516100ca91906103a3565b60405180910390f35b5f73__$c1e9661f796f9214b5c8076e394fd5a419$__6396e4ee3d6100f7846102bd565b60026040518363ffffffff1660e01b81526004016101169291906104a8565b602060405180830381865af4158015610131573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061015591906104e3565b9050919050565b5f815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156101a9575f90506102b7565b815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546101f4919061053b565b92505081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610246919061056e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516102aa91906103a3565b60405180910390a3600190505b92915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61032f82610306565b9050919050565b61033f81610325565b8114610349575f80fd5b50565b5f8135905061035a81610336565b92915050565b5f6020828403121561037557610374610302565b5b5f6103828482850161034c565b91505092915050565b5f819050919050565b61039d8161038b565b82525050565b5f6020820190506103b65f830184610394565b92915050565b6103c58161038b565b81146103cf575f80fd5b50565b5f813590506103e0816103bc565b92915050565b5f80604083850312156103fc576103fb610302565b5b5f6104098582860161034c565b925050602061041a858286016103d2565b9150509250929050565b5f8115159050919050565b61043881610424565b82525050565b5f6020820190506104515f83018461042f565b92915050565b6104608161038b565b82525050565b5f819050919050565b5f819050919050565b5f61049261048d61048884610466565b61046f565b61038b565b9050919050565b6104a281610478565b82525050565b5f6040820190506104bb5f830185610457565b6104c86020830184610499565b9392505050565b5f815190506104dd816103bc565b92915050565b5f602082840312156104f8576104f7610302565b5b5f610505848285016104cf565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6105458261038b565b91506105508361038b565b92508282039050818111156105685761056761050e565b5b92915050565b5f6105788261038b565b91506105838361038b565b925082820190508082111561059b5761059a61050e565b5b9291505056fea2646970667358221220d1bc4f81c05cce3769cc157fc9df9c4113adc0bc3934e33d318fb615fcd3897f64736f6c63430008190033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 PUSH0 DUP1 ORIGIN PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x5D7 DUP1 PUSH2 0x5F PUSH0 CODECOPY PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7BD703E8 EQ PUSH2 0x43 JUMPI DUP1 PUSH4 0x90B98A11 EQ PUSH2 0x73 JUMPI DUP1 PUSH4 0xF8B2CB4F EQ PUSH2 0xA3 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x5D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x58 SWAP2 SWAP1 PUSH2 0x360 JUMP JUMPDEST PUSH2 0xD3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6A SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x8D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x88 SWAP2 SWAP1 PUSH2 0x3E6 JUMP JUMPDEST PUSH2 0x15C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBD PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xB8 SWAP2 SWAP1 PUSH2 0x360 JUMP JUMPDEST PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCA SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH20 0x0 PUSH4 0x96E4EE3D PUSH2 0xF7 DUP5 PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x2 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x116 SWAP3 SWAP2 SWAP1 PUSH2 0x4A8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x131 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 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 0x155 SWAP2 SWAP1 PUSH2 0x4E3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 PUSH0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 SLOAD LT ISZERO PUSH2 0x1A9 JUMPI PUSH0 SWAP1 POP PUSH2 0x2B7 JUMP JUMPDEST DUP2 PUSH0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x53B JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD PUSH2 0x246 SWAP2 SWAP1 PUSH2 0x56E JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x2AA SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x32F DUP3 PUSH2 0x306 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x33F DUP2 PUSH2 0x325 JUMP JUMPDEST DUP2 EQ PUSH2 0x349 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x35A DUP2 PUSH2 0x336 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x375 JUMPI PUSH2 0x374 PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x382 DUP5 DUP3 DUP6 ADD PUSH2 0x34C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x39D DUP2 PUSH2 0x38B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x3B6 PUSH0 DUP4 ADD DUP5 PUSH2 0x394 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3C5 DUP2 PUSH2 0x38B JUMP JUMPDEST DUP2 EQ PUSH2 0x3CF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x3E0 DUP2 PUSH2 0x3BC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FC JUMPI PUSH2 0x3FB PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x409 DUP6 DUP3 DUP7 ADD PUSH2 0x34C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x41A DUP6 DUP3 DUP7 ADD PUSH2 0x3D2 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x438 DUP2 PUSH2 0x424 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x451 PUSH0 DUP4 ADD DUP5 PUSH2 0x42F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x460 DUP2 PUSH2 0x38B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x492 PUSH2 0x48D PUSH2 0x488 DUP5 PUSH2 0x466 JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH2 0x38B JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4A2 DUP2 PUSH2 0x478 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x4BB PUSH0 DUP4 ADD DUP6 PUSH2 0x457 JUMP JUMPDEST PUSH2 0x4C8 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x499 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP PUSH2 0x4DD DUP2 PUSH2 0x3BC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F8 JUMPI PUSH2 0x4F7 PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x505 DUP5 DUP3 DUP6 ADD PUSH2 0x4CF JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH2 0x545 DUP3 PUSH2 0x38B JUMP JUMPDEST SWAP2 POP PUSH2 0x550 DUP4 PUSH2 0x38B JUMP JUMPDEST SWAP3 POP DUP3 DUP3 SUB SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0x568 JUMPI PUSH2 0x567 PUSH2 0x50E JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x578 DUP3 PUSH2 0x38B JUMP JUMPDEST SWAP2 POP PUSH2 0x583 DUP4 PUSH2 0x38B JUMP JUMPDEST SWAP3 POP DUP3 DUP3 ADD SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x59B JUMPI PUSH2 0x59A PUSH2 0x50E JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 0xBC 0x4F DUP2 0xC0 TLOAD 0xCE CALLDATACOPY PUSH10 0xCC157FC9DF9C4113ADC0 0xBC CODECOPY CALLVALUE 0xE3 RETURNDATASIZE BALANCE DUP16 0xB6 ISZERO 0xFC 0xD3 DUP10 PUSH32 0x64736F6C63430008190033000000000000000000000000000000000000000000 ",
"sourceMap": "310:667:1:-:0;;;447:49;;;;;;;;;;487:5;465:8;:19;474:9;465:19;;;;;;;;;;;;;;;:27;;;;310:667;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {
"@getBalanceInEth_99": {
"entryPoint": 211,
"id": 99,
"parameterSlots": 1,
"returnSlots": 1
},
"@getBalance_111": {
"entryPoint": 701,
"id": 111,
"parameterSlots": 1,
"returnSlots": 1
},
"@sendCoin_83": {
"entryPoint": 348,
"id": 83,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_address": {
"entryPoint": 844,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_uint256": {
"entryPoint": 978,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_uint256_fromMemory": {
"entryPoint": 1231,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_address": {
"entryPoint": 864,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_addresst_uint256": {
"entryPoint": 998,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"abi_decode_tuple_t_uint256_fromMemory": {
"entryPoint": 1251,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_bool_to_t_bool_fromStack": {
"entryPoint": 1071,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library": {
"entryPoint": 1177,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_uint256_to_t_uint256_fromStack": {
"entryPoint": 916,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_uint256_to_t_uint256_fromStack_library": {
"entryPoint": 1111,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
"entryPoint": 1086,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
"entryPoint": 931,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_uint256_t_rational_2_by_1__to_t_uint256_t_uint256__fromStack_library_reversed": {
"entryPoint": 1192,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"allocate_unbounded": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
},
"checked_add_t_uint256": {
"entryPoint": 1390,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"checked_sub_t_uint256": {
"entryPoint": 1339,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"cleanup_t_address": {
"entryPoint": 805,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_bool": {
"entryPoint": 1060,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_rational_2_by_1": {
"entryPoint": 1126,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint160": {
"entryPoint": 774,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint256": {
"entryPoint": 907,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"convert_t_rational_2_by_1_to_t_uint256": {
"entryPoint": 1144,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"identity": {
"entryPoint": 1135,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"panic_error_0x11": {
"entryPoint": 1294,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
"entryPoint": 770,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"validator_revert_t_address": {
"entryPoint": 822,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"validator_revert_t_uint256": {
"entryPoint": 956,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
}
},
"generatedSources": [
{
"ast": {
"nativeSrc": "0:4869:2",
"nodeType": "YulBlock",
"src": "0:4869:2",
"statements": [
{
"body": {
"nativeSrc": "47:35:2",
"nodeType": "YulBlock",
"src": "47:35:2",
"statements": [
{
"nativeSrc": "57:19:2",
"nodeType": "YulAssignment",
"src": "57:19:2",
"value": {
"arguments": [
{
"kind": "number",
"nativeSrc": "73:2:2",
"nodeType": "YulLiteral",
"src": "73:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "67:5:2",
"nodeType": "YulIdentifier",
"src": "67:5:2"
},
"nativeSrc": "67:9:2",
"nodeType": "YulFunctionCall",
"src": "67:9:2"
},
"variableNames": [
{
"name": "memPtr",
"nativeSrc": "57:6:2",
"nodeType": "YulIdentifier",
"src": "57:6:2"
}
]
}
]
},
"name": "allocate_unbounded",
"nativeSrc": "7:75:2",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nativeSrc": "40:6:2",
"nodeType": "YulTypedName",
"src": "40:6:2",
"type": ""
}
],
"src": "7:75:2"
},
{
"body": {
"nativeSrc": "177:28:2",
"nodeType": "YulBlock",
"src": "177:28:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "194:1:2",
"nodeType": "YulLiteral",
"src": "194:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "197:1:2",
"nodeType": "YulLiteral",
"src": "197:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "187:6:2",
"nodeType": "YulIdentifier",
"src": "187:6:2"
},
"nativeSrc": "187:12:2",
"nodeType": "YulFunctionCall",
"src": "187:12:2"
},
"nativeSrc": "187:12:2",
"nodeType": "YulExpressionStatement",
"src": "187:12:2"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "88:117:2",
"nodeType": "YulFunctionDefinition",
"src": "88:117:2"
},
{
"body": {
"nativeSrc": "300:28:2",
"nodeType": "YulBlock",
"src": "300:28:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "317:1:2",
"nodeType": "YulLiteral",
"src": "317:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "320:1:2",
"nodeType": "YulLiteral",
"src": "320:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "310:6:2",
"nodeType": "YulIdentifier",
"src": "310:6:2"
},
"nativeSrc": "310:12:2",
"nodeType": "YulFunctionCall",
"src": "310:12:2"
},
"nativeSrc": "310:12:2",
"nodeType": "YulExpressionStatement",
"src": "310:12:2"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nativeSrc": "211:117:2",
"nodeType": "YulFunctionDefinition",
"src": "211:117:2"
},
{
"body": {
"nativeSrc": "379:81:2",
"nodeType": "YulBlock",
"src": "379:81:2",
"statements": [
{
"nativeSrc": "389:65:2",
"nodeType": "YulAssignment",
"src": "389:65:2",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "404:5:2",
"nodeType": "YulIdentifier",
"src": "404:5:2"
},
{
"kind": "number",
"nativeSrc": "411:42:2",
"nodeType": "YulLiteral",
"src": "411:42:2",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nativeSrc": "400:3:2",
"nodeType": "YulIdentifier",
"src": "400:3:2"
},
"nativeSrc": "400:54:2",
"nodeType": "YulFunctionCall",
"src": "400:54:2"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "389:7:2",
"nodeType": "YulIdentifier",
"src": "389:7:2"
}
]
}
]
},
"name": "cleanup_t_uint160",
"nativeSrc": "334:126:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "361:5:2",
"nodeType": "YulTypedName",
"src": "361:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "371:7:2",
"nodeType": "YulTypedName",
"src": "371:7:2",
"type": ""
}
],
"src": "334:126:2"
},
{
"body": {
"nativeSrc": "511:51:2",
"nodeType": "YulBlock",
"src": "511:51:2",
"statements": [
{
"nativeSrc": "521:35:2",
"nodeType": "YulAssignment",
"src": "521:35:2",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "550:5:2",
"nodeType": "YulIdentifier",
"src": "550:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint160",
"nativeSrc": "532:17:2",
"nodeType": "YulIdentifier",
"src": "532:17:2"
},
"nativeSrc": "532:24:2",
"nodeType": "YulFunctionCall",
"src": "532:24:2"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "521:7:2",
"nodeType": "YulIdentifier",
"src": "521:7:2"
}
]
}
]
},
"name": "cleanup_t_address",
"nativeSrc": "466:96:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "493:5:2",
"nodeType": "YulTypedName",
"src": "493:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "503:7:2",
"nodeType": "YulTypedName",
"src": "503:7:2",
"type": ""
}
],
"src": "466:96:2"
},
{
"body": {
"nativeSrc": "611:79:2",
"nodeType": "YulBlock",
"src": "611:79:2",
"statements": [
{
"body": {
"nativeSrc": "668:16:2",
"nodeType": "YulBlock",
"src": "668:16:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "677:1:2",
"nodeType": "YulLiteral",
"src": "677:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "680:1:2",
"nodeType": "YulLiteral",
"src": "680:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "670:6:2",
"nodeType": "YulIdentifier",
"src": "670:6:2"
},
"nativeSrc": "670:12:2",
"nodeType": "YulFunctionCall",
"src": "670:12:2"
},
"nativeSrc": "670:12:2",
"nodeType": "YulExpressionStatement",
"src": "670:12:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "634:5:2",
"nodeType": "YulIdentifier",
"src": "634:5:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "659:5:2",
"nodeType": "YulIdentifier",
"src": "659:5:2"
}
],
"functionName": {
"name": "cleanup_t_address",
"nativeSrc": "641:17:2",
"nodeType": "YulIdentifier",
"src": "641:17:2"
},
"nativeSrc": "641:24:2",
"nodeType": "YulFunctionCall",
"src": "641:24:2"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "631:2:2",
"nodeType": "YulIdentifier",
"src": "631:2:2"
},
"nativeSrc": "631:35:2",
"nodeType": "YulFunctionCall",
"src": "631:35:2"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "624:6:2",
"nodeType": "YulIdentifier",
"src": "624:6:2"
},
"nativeSrc": "624:43:2",
"nodeType": "YulFunctionCall",
"src": "624:43:2"
},
"nativeSrc": "621:63:2",
"nodeType": "YulIf",
"src": "621:63:2"
}
]
},
"name": "validator_revert_t_address",
"nativeSrc": "568:122:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "604:5:2",
"nodeType": "YulTypedName",
"src": "604:5:2",
"type": ""
}
],
"src": "568:122:2"
},
{
"body": {
"nativeSrc": "748:87:2",
"nodeType": "YulBlock",
"src": "748:87:2",
"statements": [
{
"nativeSrc": "758:29:2",
"nodeType": "YulAssignment",
"src": "758:29:2",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "780:6:2",
"nodeType": "YulIdentifier",
"src": "780:6:2"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "767:12:2",
"nodeType": "YulIdentifier",
"src": "767:12:2"
},
"nativeSrc": "767:20:2",
"nodeType": "YulFunctionCall",
"src": "767:20:2"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "758:5:2",
"nodeType": "YulIdentifier",
"src": "758:5:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "823:5:2",
"nodeType": "YulIdentifier",
"src": "823:5:2"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nativeSrc": "796:26:2",
"nodeType": "YulIdentifier",
"src": "796:26:2"
},
"nativeSrc": "796:33:2",
"nodeType": "YulFunctionCall",
"src": "796:33:2"
},
"nativeSrc": "796:33:2",
"nodeType": "YulExpressionStatement",
"src": "796:33:2"
}
]
},
"name": "abi_decode_t_address",
"nativeSrc": "696:139:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "726:6:2",
"nodeType": "YulTypedName",
"src": "726:6:2",
"type": ""
},
{
"name": "end",
"nativeSrc": "734:3:2",
"nodeType": "YulTypedName",
"src": "734:3:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "742:5:2",
"nodeType": "YulTypedName",
"src": "742:5:2",
"type": ""
}
],
"src": "696:139:2"
},
{
"body": {
"nativeSrc": "907:263:2",
"nodeType": "YulBlock",
"src": "907:263:2",
"statements": [
{
"body": {
"nativeSrc": "953:83:2",
"nodeType": "YulBlock",
"src": "953:83:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "955:77:2",
"nodeType": "YulIdentifier",
"src": "955:77:2"
},
"nativeSrc": "955:79:2",
"nodeType": "YulFunctionCall",
"src": "955:79:2"
},
"nativeSrc": "955:79:2",
"nodeType": "YulExpressionStatement",
"src": "955:79:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "928:7:2",
"nodeType": "YulIdentifier",
"src": "928:7:2"
},
{
"name": "headStart",
"nativeSrc": "937:9:2",
"nodeType": "YulIdentifier",
"src": "937:9:2"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "924:3:2",
"nodeType": "YulIdentifier",
"src": "924:3:2"
},
"nativeSrc": "924:23:2",
"nodeType": "YulFunctionCall",
"src": "924:23:2"
},
{
"kind": "number",
"nativeSrc": "949:2:2",
"nodeType": "YulLiteral",
"src": "949:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "920:3:2",
"nodeType": "YulIdentifier",
"src": "920:3:2"
},
"nativeSrc": "920:32:2",
"nodeType": "YulFunctionCall",
"src": "920:32:2"
},
"nativeSrc": "917:119:2",
"nodeType": "YulIf",
"src": "917:119:2"
},
{
"nativeSrc": "1046:117:2",
"nodeType": "YulBlock",
"src": "1046:117:2",
"statements": [
{
"nativeSrc": "1061:15:2",
"nodeType": "YulVariableDeclaration",
"src": "1061:15:2",
"value": {
"kind": "number",
"nativeSrc": "1075:1:2",
"nodeType": "YulLiteral",
"src": "1075:1:2",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "1065:6:2",
"nodeType": "YulTypedName",
"src": "1065:6:2",
"type": ""
}
]
},
{
"nativeSrc": "1090:63:2",
"nodeType": "YulAssignment",
"src": "1090:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1125:9:2",
"nodeType": "YulIdentifier",
"src": "1125:9:2"
},
{
"name": "offset",
"nativeSrc": "1136:6:2",
"nodeType": "YulIdentifier",
"src": "1136:6:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1121:3:2",
"nodeType": "YulIdentifier",
"src": "1121:3:2"
},
"nativeSrc": "1121:22:2",
"nodeType": "YulFunctionCall",
"src": "1121:22:2"
},
{
"name": "dataEnd",
"nativeSrc": "1145:7:2",
"nodeType": "YulIdentifier",
"src": "1145:7:2"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "1100:20:2",
"nodeType": "YulIdentifier",
"src": "1100:20:2"
},
"nativeSrc": "1100:53:2",
"nodeType": "YulFunctionCall",
"src": "1100:53:2"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "1090:6:2",
"nodeType": "YulIdentifier",
"src": "1090:6:2"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_address",
"nativeSrc": "841:329:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "877:9:2",
"nodeType": "YulTypedName",
"src": "877:9:2",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "888:7:2",
"nodeType": "YulTypedName",
"src": "888:7:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "900:6:2",
"nodeType": "YulTypedName",
"src": "900:6:2",
"type": ""
}
],
"src": "841:329:2"
},
{
"body": {
"nativeSrc": "1221:32:2",
"nodeType": "YulBlock",
"src": "1221:32:2",
"statements": [
{
"nativeSrc": "1231:16:2",
"nodeType": "YulAssignment",
"src": "1231:16:2",
"value": {
"name": "value",
"nativeSrc": "1242:5:2",
"nodeType": "YulIdentifier",
"src": "1242:5:2"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "1231:7:2",
"nodeType": "YulIdentifier",
"src": "1231:7:2"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nativeSrc": "1176:77:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1203:5:2",
"nodeType": "YulTypedName",
"src": "1203:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "1213:7:2",
"nodeType": "YulTypedName",
"src": "1213:7:2",
"type": ""
}
],
"src": "1176:77:2"
},
{
"body": {
"nativeSrc": "1324:53:2",
"nodeType": "YulBlock",
"src": "1324:53:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "1341:3:2",
"nodeType": "YulIdentifier",
"src": "1341:3:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "1364:5:2",
"nodeType": "YulIdentifier",
"src": "1364:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1346:17:2",
"nodeType": "YulIdentifier",
"src": "1346:17:2"
},
"nativeSrc": "1346:24:2",
"nodeType": "YulFunctionCall",
"src": "1346:24:2"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1334:6:2",
"nodeType": "YulIdentifier",
"src": "1334:6:2"
},
"nativeSrc": "1334:37:2",
"nodeType": "YulFunctionCall",
"src": "1334:37:2"
},
"nativeSrc": "1334:37:2",
"nodeType": "YulExpressionStatement",
"src": "1334:37:2"
}
]
},
"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
"nativeSrc": "1259:118:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1312:5:2",
"nodeType": "YulTypedName",
"src": "1312:5:2",
"type": ""
},
{
"name": "pos",
"nativeSrc": "1319:3:2",
"nodeType": "YulTypedName",
"src": "1319:3:2",
"type": ""
}
],
"src": "1259:118:2"
},
{
"body": {
"nativeSrc": "1481:124:2",
"nodeType": "YulBlock",
"src": "1481:124:2",
"statements": [
{
"nativeSrc": "1491:26:2",
"nodeType": "YulAssignment",
"src": "1491:26:2",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "1503:9:2",
"nodeType": "YulIdentifier",
"src": "1503:9:2"
},
{
"kind": "number",
"nativeSrc": "1514:2:2",
"nodeType": "YulLiteral",
"src": "1514:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1499:3:2",
"nodeType": "YulIdentifier",
"src": "1499:3:2"
},
"nativeSrc": "1499:18:2",
"nodeType": "YulFunctionCall",
"src": "1499:18:2"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "1491:4:2",
"nodeType": "YulIdentifier",
"src": "1491:4:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "1571:6:2",
"nodeType": "YulIdentifier",
"src": "1571:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1584:9:2",
"nodeType": "YulIdentifier",
"src": "1584:9:2"
},
{
"kind": "number",
"nativeSrc": "1595:1:2",
"nodeType": "YulLiteral",
"src": "1595:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1580:3:2",
"nodeType": "YulIdentifier",
"src": "1580:3:2"
},
"nativeSrc": "1580:17:2",
"nodeType": "YulFunctionCall",
"src": "1580:17:2"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
"nativeSrc": "1527:43:2",
"nodeType": "YulIdentifier",
"src": "1527:43:2"
},
"nativeSrc": "1527:71:2",
"nodeType": "YulFunctionCall",
"src": "1527:71:2"
},
"nativeSrc": "1527:71:2",
"nodeType": "YulExpressionStatement",
"src": "1527:71:2"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
"nativeSrc": "1383:222:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "1453:9:2",
"nodeType": "YulTypedName",
"src": "1453:9:2",
"type": ""
},
{
"name": "value0",
"nativeSrc": "1465:6:2",
"nodeType": "YulTypedName",
"src": "1465:6:2",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "1476:4:2",
"nodeType": "YulTypedName",
"src": "1476:4:2",
"type": ""
}
],
"src": "1383:222:2"
},
{
"body": {
"nativeSrc": "1654:79:2",
"nodeType": "YulBlock",
"src": "1654:79:2",
"statements": [
{
"body": {
"nativeSrc": "1711:16:2",
"nodeType": "YulBlock",
"src": "1711:16:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "1720:1:2",
"nodeType": "YulLiteral",
"src": "1720:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "1723:1:2",
"nodeType": "YulLiteral",
"src": "1723:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "1713:6:2",
"nodeType": "YulIdentifier",
"src": "1713:6:2"
},
"nativeSrc": "1713:12:2",
"nodeType": "YulFunctionCall",
"src": "1713:12:2"
},
"nativeSrc": "1713:12:2",
"nodeType": "YulExpressionStatement",
"src": "1713:12:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "1677:5:2",
"nodeType": "YulIdentifier",
"src": "1677:5:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "1702:5:2",
"nodeType": "YulIdentifier",
"src": "1702:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "1684:17:2",
"nodeType": "YulIdentifier",
"src": "1684:17:2"
},
"nativeSrc": "1684:24:2",
"nodeType": "YulFunctionCall",
"src": "1684:24:2"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "1674:2:2",
"nodeType": "YulIdentifier",
"src": "1674:2:2"
},
"nativeSrc": "1674:35:2",
"nodeType": "YulFunctionCall",
"src": "1674:35:2"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "1667:6:2",
"nodeType": "YulIdentifier",
"src": "1667:6:2"
},
"nativeSrc": "1667:43:2",
"nodeType": "YulFunctionCall",
"src": "1667:43:2"
},
"nativeSrc": "1664:63:2",
"nodeType": "YulIf",
"src": "1664:63:2"
}
]
},
"name": "validator_revert_t_uint256",
"nativeSrc": "1611:122:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1647:5:2",
"nodeType": "YulTypedName",
"src": "1647:5:2",
"type": ""
}
],
"src": "1611:122:2"
},
{
"body": {
"nativeSrc": "1791:87:2",
"nodeType": "YulBlock",
"src": "1791:87:2",
"statements": [
{
"nativeSrc": "1801:29:2",
"nodeType": "YulAssignment",
"src": "1801:29:2",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "1823:6:2",
"nodeType": "YulIdentifier",
"src": "1823:6:2"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "1810:12:2",
"nodeType": "YulIdentifier",
"src": "1810:12:2"
},
"nativeSrc": "1810:20:2",
"nodeType": "YulFunctionCall",
"src": "1810:20:2"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "1801:5:2",
"nodeType": "YulIdentifier",
"src": "1801:5:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "1866:5:2",
"nodeType": "YulIdentifier",
"src": "1866:5:2"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nativeSrc": "1839:26:2",
"nodeType": "YulIdentifier",
"src": "1839:26:2"
},
"nativeSrc": "1839:33:2",
"nodeType": "YulFunctionCall",
"src": "1839:33:2"
},
"nativeSrc": "1839:33:2",
"nodeType": "YulExpressionStatement",
"src": "1839:33:2"
}
]
},
"name": "abi_decode_t_uint256",
"nativeSrc": "1739:139:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "1769:6:2",
"nodeType": "YulTypedName",
"src": "1769:6:2",
"type": ""
},
{
"name": "end",
"nativeSrc": "1777:3:2",
"nodeType": "YulTypedName",
"src": "1777:3:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "1785:5:2",
"nodeType": "YulTypedName",
"src": "1785:5:2",
"type": ""
}
],
"src": "1739:139:2"
},
{
"body": {
"nativeSrc": "1967:391:2",
"nodeType": "YulBlock",
"src": "1967:391:2",
"statements": [
{
"body": {
"nativeSrc": "2013:83:2",
"nodeType": "YulBlock",
"src": "2013:83:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "2015:77:2",
"nodeType": "YulIdentifier",
"src": "2015:77:2"
},
"nativeSrc": "2015:79:2",
"nodeType": "YulFunctionCall",
"src": "2015:79:2"
},
"nativeSrc": "2015:79:2",
"nodeType": "YulExpressionStatement",
"src": "2015:79:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "1988:7:2",
"nodeType": "YulIdentifier",
"src": "1988:7:2"
},
{
"name": "headStart",
"nativeSrc": "1997:9:2",
"nodeType": "YulIdentifier",
"src": "1997:9:2"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "1984:3:2",
"nodeType": "YulIdentifier",
"src": "1984:3:2"
},
"nativeSrc": "1984:23:2",
"nodeType": "YulFunctionCall",
"src": "1984:23:2"
},
{
"kind": "number",
"nativeSrc": "2009:2:2",
"nodeType": "YulLiteral",
"src": "2009:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "1980:3:2",
"nodeType": "YulIdentifier",
"src": "1980:3:2"
},
"nativeSrc": "1980:32:2",
"nodeType": "YulFunctionCall",
"src": "1980:32:2"
},
"nativeSrc": "1977:119:2",
"nodeType": "YulIf",
"src": "1977:119:2"
},
{
"nativeSrc": "2106:117:2",
"nodeType": "YulBlock",
"src": "2106:117:2",
"statements": [
{
"nativeSrc": "2121:15:2",
"nodeType": "YulVariableDeclaration",
"src": "2121:15:2",
"value": {
"kind": "number",
"nativeSrc": "2135:1:2",
"nodeType": "YulLiteral",
"src": "2135:1:2",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "2125:6:2",
"nodeType": "YulTypedName",
"src": "2125:6:2",
"type": ""
}
]
},
{
"nativeSrc": "2150:63:2",
"nodeType": "YulAssignment",
"src": "2150:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "2185:9:2",
"nodeType": "YulIdentifier",
"src": "2185:9:2"
},
{
"name": "offset",
"nativeSrc": "2196:6:2",
"nodeType": "YulIdentifier",
"src": "2196:6:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2181:3:2",
"nodeType": "YulIdentifier",
"src": "2181:3:2"
},
"nativeSrc": "2181:22:2",
"nodeType": "YulFunctionCall",
"src": "2181:22:2"
},
{
"name": "dataEnd",
"nativeSrc": "2205:7:2",
"nodeType": "YulIdentifier",
"src": "2205:7:2"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "2160:20:2",
"nodeType": "YulIdentifier",
"src": "2160:20:2"
},
"nativeSrc": "2160:53:2",
"nodeType": "YulFunctionCall",
"src": "2160:53:2"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "2150:6:2",
"nodeType": "YulIdentifier",
"src": "2150:6:2"
}
]
}
]
},
{
"nativeSrc": "2233:118:2",
"nodeType": "YulBlock",
"src": "2233:118:2",
"statements": [
{
"nativeSrc": "2248:16:2",
"nodeType": "YulVariableDeclaration",
"src": "2248:16:2",
"value": {
"kind": "number",
"nativeSrc": "2262:2:2",
"nodeType": "YulLiteral",
"src": "2262:2:2",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nativeSrc": "2252:6:2",
"nodeType": "YulTypedName",
"src": "2252:6:2",
"type": ""
}
]
},
{
"nativeSrc": "2278:63:2",
"nodeType": "YulAssignment",
"src": "2278:63:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "2313:9:2",
"nodeType": "YulIdentifier",
"src": "2313:9:2"
},
{
"name": "offset",
"nativeSrc": "2324:6:2",
"nodeType": "YulIdentifier",
"src": "2324:6:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2309:3:2",
"nodeType": "YulIdentifier",
"src": "2309:3:2"
},
"nativeSrc": "2309:22:2",
"nodeType": "YulFunctionCall",
"src": "2309:22:2"
},
{
"name": "dataEnd",
"nativeSrc": "2333:7:2",
"nodeType": "YulIdentifier",
"src": "2333:7:2"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "2288:20:2",
"nodeType": "YulIdentifier",
"src": "2288:20:2"
},
"nativeSrc": "2288:53:2",
"nodeType": "YulFunctionCall",
"src": "2288:53:2"
},
"variableNames": [
{
"name": "value1",
"nativeSrc": "2278:6:2",
"nodeType": "YulIdentifier",
"src": "2278:6:2"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_uint256",
"nativeSrc": "1884:474:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "1929:9:2",
"nodeType": "YulTypedName",
"src": "1929:9:2",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "1940:7:2",
"nodeType": "YulTypedName",
"src": "1940:7:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "1952:6:2",
"nodeType": "YulTypedName",
"src": "1952:6:2",
"type": ""
},
{
"name": "value1",
"nativeSrc": "1960:6:2",
"nodeType": "YulTypedName",
"src": "1960:6:2",
"type": ""
}
],
"src": "1884:474:2"
},
{
"body": {
"nativeSrc": "2406:48:2",
"nodeType": "YulBlock",
"src": "2406:48:2",
"statements": [
{
"nativeSrc": "2416:32:2",
"nodeType": "YulAssignment",
"src": "2416:32:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "2441:5:2",
"nodeType": "YulIdentifier",
"src": "2441:5:2"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "2434:6:2",
"nodeType": "YulIdentifier",
"src": "2434:6:2"
},
"nativeSrc": "2434:13:2",
"nodeType": "YulFunctionCall",
"src": "2434:13:2"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "2427:6:2",
"nodeType": "YulIdentifier",
"src": "2427:6:2"
},
"nativeSrc": "2427:21:2",
"nodeType": "YulFunctionCall",
"src": "2427:21:2"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "2416:7:2",
"nodeType": "YulIdentifier",
"src": "2416:7:2"
}
]
}
]
},
"name": "cleanup_t_bool",
"nativeSrc": "2364:90:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2388:5:2",
"nodeType": "YulTypedName",
"src": "2388:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "2398:7:2",
"nodeType": "YulTypedName",
"src": "2398:7:2",
"type": ""
}
],
"src": "2364:90:2"
},
{
"body": {
"nativeSrc": "2519:50:2",
"nodeType": "YulBlock",
"src": "2519:50:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "2536:3:2",
"nodeType": "YulIdentifier",
"src": "2536:3:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "2556:5:2",
"nodeType": "YulIdentifier",
"src": "2556:5:2"
}
],
"functionName": {
"name": "cleanup_t_bool",
"nativeSrc": "2541:14:2",
"nodeType": "YulIdentifier",
"src": "2541:14:2"
},
"nativeSrc": "2541:21:2",
"nodeType": "YulFunctionCall",
"src": "2541:21:2"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "2529:6:2",
"nodeType": "YulIdentifier",
"src": "2529:6:2"
},
"nativeSrc": "2529:34:2",
"nodeType": "YulFunctionCall",
"src": "2529:34:2"
},
"nativeSrc": "2529:34:2",
"nodeType": "YulExpressionStatement",
"src": "2529:34:2"
}
]
},
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nativeSrc": "2460:109:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2507:5:2",
"nodeType": "YulTypedName",
"src": "2507:5:2",
"type": ""
},
{
"name": "pos",
"nativeSrc": "2514:3:2",
"nodeType": "YulTypedName",
"src": "2514:3:2",
"type": ""
}
],
"src": "2460:109:2"
},
{
"body": {
"nativeSrc": "2667:118:2",
"nodeType": "YulBlock",
"src": "2667:118:2",
"statements": [
{
"nativeSrc": "2677:26:2",
"nodeType": "YulAssignment",
"src": "2677:26:2",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "2689:9:2",
"nodeType": "YulIdentifier",
"src": "2689:9:2"
},
{
"kind": "number",
"nativeSrc": "2700:2:2",
"nodeType": "YulLiteral",
"src": "2700:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2685:3:2",
"nodeType": "YulIdentifier",
"src": "2685:3:2"
},
"nativeSrc": "2685:18:2",
"nodeType": "YulFunctionCall",
"src": "2685:18:2"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "2677:4:2",
"nodeType": "YulIdentifier",
"src": "2677:4:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "2751:6:2",
"nodeType": "YulIdentifier",
"src": "2751:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "2764:9:2",
"nodeType": "YulIdentifier",
"src": "2764:9:2"
},
{
"kind": "number",
"nativeSrc": "2775:1:2",
"nodeType": "YulLiteral",
"src": "2775:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2760:3:2",
"nodeType": "YulIdentifier",
"src": "2760:3:2"
},
"nativeSrc": "2760:17:2",
"nodeType": "YulFunctionCall",
"src": "2760:17:2"
}
],
"functionName": {
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nativeSrc": "2713:37:2",
"nodeType": "YulIdentifier",
"src": "2713:37:2"
},
"nativeSrc": "2713:65:2",
"nodeType": "YulFunctionCall",
"src": "2713:65:2"
},
"nativeSrc": "2713:65:2",
"nodeType": "YulExpressionStatement",
"src": "2713:65:2"
}
]
},
"name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
"nativeSrc": "2575:210:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "2639:9:2",
"nodeType": "YulTypedName",
"src": "2639:9:2",
"type": ""
},
{
"name": "value0",
"nativeSrc": "2651:6:2",
"nodeType": "YulTypedName",
"src": "2651:6:2",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "2662:4:2",
"nodeType": "YulTypedName",
"src": "2662:4:2",
"type": ""
}
],
"src": "2575:210:2"
},
{
"body": {
"nativeSrc": "2864:53:2",
"nodeType": "YulBlock",
"src": "2864:53:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "2881:3:2",
"nodeType": "YulIdentifier",
"src": "2881:3:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "2904:5:2",
"nodeType": "YulIdentifier",
"src": "2904:5:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "2886:17:2",
"nodeType": "YulIdentifier",
"src": "2886:17:2"
},
"nativeSrc": "2886:24:2",
"nodeType": "YulFunctionCall",
"src": "2886:24:2"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "2874:6:2",
"nodeType": "YulIdentifier",
"src": "2874:6:2"
},
"nativeSrc": "2874:37:2",
"nodeType": "YulFunctionCall",
"src": "2874:37:2"
},
"nativeSrc": "2874:37:2",
"nodeType": "YulExpressionStatement",
"src": "2874:37:2"
}
]
},
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nativeSrc": "2791:126:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2852:5:2",
"nodeType": "YulTypedName",
"src": "2852:5:2",
"type": ""
},
{
"name": "pos",
"nativeSrc": "2859:3:2",
"nodeType": "YulTypedName",
"src": "2859:3:2",
"type": ""
}
],
"src": "2791:126:2"
},
{
"body": {
"nativeSrc": "2976:32:2",
"nodeType": "YulBlock",
"src": "2976:32:2",
"statements": [
{
"nativeSrc": "2986:16:2",
"nodeType": "YulAssignment",
"src": "2986:16:2",
"value": {
"name": "value",
"nativeSrc": "2997:5:2",
"nodeType": "YulIdentifier",
"src": "2997:5:2"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "2986:7:2",
"nodeType": "YulIdentifier",
"src": "2986:7:2"
}
]
}
]
},
"name": "cleanup_t_rational_2_by_1",
"nativeSrc": "2923:85:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2958:5:2",
"nodeType": "YulTypedName",
"src": "2958:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "2968:7:2",
"nodeType": "YulTypedName",
"src": "2968:7:2",
"type": ""
}
],
"src": "2923:85:2"
},
{
"body": {
"nativeSrc": "3046:28:2",
"nodeType": "YulBlock",
"src": "3046:28:2",
"statements": [
{
"nativeSrc": "3056:12:2",
"nodeType": "YulAssignment",
"src": "3056:12:2",
"value": {
"name": "value",
"nativeSrc": "3063:5:2",
"nodeType": "YulIdentifier",
"src": "3063:5:2"
},
"variableNames": [
{
"name": "ret",
"nativeSrc": "3056:3:2",
"nodeType": "YulIdentifier",
"src": "3056:3:2"
}
]
}
]
},
"name": "identity",
"nativeSrc": "3014:60:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "3032:5:2",
"nodeType": "YulTypedName",
"src": "3032:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nativeSrc": "3042:3:2",
"nodeType": "YulTypedName",
"src": "3042:3:2",
"type": ""
}
],
"src": "3014:60:2"
},
{
"body": {
"nativeSrc": "3148:90:2",
"nodeType": "YulBlock",
"src": "3148:90:2",
"statements": [
{
"nativeSrc": "3158:74:2",
"nodeType": "YulAssignment",
"src": "3158:74:2",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "3224:5:2",
"nodeType": "YulIdentifier",
"src": "3224:5:2"
}
],
"functionName": {
"name": "cleanup_t_rational_2_by_1",
"nativeSrc": "3198:25:2",
"nodeType": "YulIdentifier",
"src": "3198:25:2"
},
"nativeSrc": "3198:32:2",
"nodeType": "YulFunctionCall",
"src": "3198:32:2"
}
],
"functionName": {
"name": "identity",
"nativeSrc": "3189:8:2",
"nodeType": "YulIdentifier",
"src": "3189:8:2"
},
"nativeSrc": "3189:42:2",
"nodeType": "YulFunctionCall",
"src": "3189:42:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "3171:17:2",
"nodeType": "YulIdentifier",
"src": "3171:17:2"
},
"nativeSrc": "3171:61:2",
"nodeType": "YulFunctionCall",
"src": "3171:61:2"
},
"variableNames": [
{
"name": "converted",
"nativeSrc": "3158:9:2",
"nodeType": "YulIdentifier",
"src": "3158:9:2"
}
]
}
]
},
"name": "convert_t_rational_2_by_1_to_t_uint256",
"nativeSrc": "3080:158:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "3128:5:2",
"nodeType": "YulTypedName",
"src": "3128:5:2",
"type": ""
}
],
"returnVariables": [
{
"name": "converted",
"nativeSrc": "3138:9:2",
"nodeType": "YulTypedName",
"src": "3138:9:2",
"type": ""
}
],
"src": "3080:158:2"
},
{
"body": {
"nativeSrc": "3325:74:2",
"nodeType": "YulBlock",
"src": "3325:74:2",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "3342:3:2",
"nodeType": "YulIdentifier",
"src": "3342:3:2"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "3386:5:2",
"nodeType": "YulIdentifier",
"src": "3386:5:2"
}
],
"functionName": {
"name": "convert_t_rational_2_by_1_to_t_uint256",
"nativeSrc": "3347:38:2",
"nodeType": "YulIdentifier",
"src": "3347:38:2"
},
"nativeSrc": "3347:45:2",
"nodeType": "YulFunctionCall",
"src": "3347:45:2"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "3335:6:2",
"nodeType": "YulIdentifier",
"src": "3335:6:2"
},
"nativeSrc": "3335:58:2",
"nodeType": "YulFunctionCall",
"src": "3335:58:2"
},
"nativeSrc": "3335:58:2",
"nodeType": "YulExpressionStatement",
"src": "3335:58:2"
}
]
},
"name": "abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library",
"nativeSrc": "3244:155:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "3313:5:2",
"nodeType": "YulTypedName",
"src": "3313:5:2",
"type": ""
},
{
"name": "pos",
"nativeSrc": "3320:3:2",
"nodeType": "YulTypedName",
"src": "3320:3:2",
"type": ""
}
],
"src": "3244:155:2"
},
{
"body": {
"nativeSrc": "3547:230:2",
"nodeType": "YulBlock",
"src": "3547:230:2",
"statements": [
{
"nativeSrc": "3557:26:2",
"nodeType": "YulAssignment",
"src": "3557:26:2",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "3569:9:2",
"nodeType": "YulIdentifier",
"src": "3569:9:2"
},
{
"kind": "number",
"nativeSrc": "3580:2:2",
"nodeType": "YulLiteral",
"src": "3580:2:2",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nativeSrc": "3565:3:2",
"nodeType": "YulIdentifier",
"src": "3565:3:2"
},
"nativeSrc": "3565:18:2",
"nodeType": "YulFunctionCall",
"src": "3565:18:2"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "3557:4:2",
"nodeType": "YulIdentifier",
"src": "3557:4:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "3645:6:2",
"nodeType": "YulIdentifier",
"src": "3645:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "3658:9:2",
"nodeType": "YulIdentifier",
"src": "3658:9:2"
},
{
"kind": "number",
"nativeSrc": "3669:1:2",
"nodeType": "YulLiteral",
"src": "3669:1:2",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "3654:3:2",
"nodeType": "YulIdentifier",
"src": "3654:3:2"
},
"nativeSrc": "3654:17:2",
"nodeType": "YulFunctionCall",
"src": "3654:17:2"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack_library",
"nativeSrc": "3593:51:2",
"nodeType": "YulIdentifier",
"src": "3593:51:2"
},
"nativeSrc": "3593:79:2",
"nodeType": "YulFunctionCall",
"src": "3593:79:2"
},
"nativeSrc": "3593:79:2",
"nodeType": "YulExpressionStatement",
"src": "3593:79:2"
},
{
"expression": {
"arguments": [
{
"name": "value1",
"nativeSrc": "3742:6:2",
"nodeType": "YulIdentifier",
"src": "3742:6:2"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "3755:9:2",
"nodeType": "YulIdentifier",
"src": "3755:9:2"
},
{
"kind": "number",
"nativeSrc": "3766:2:2",
"nodeType": "YulLiteral",
"src": "3766:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "3751:3:2",
"nodeType": "YulIdentifier",
"src": "3751:3:2"
},
"nativeSrc": "3751:18:2",
"nodeType": "YulFunctionCall",
"src": "3751:18:2"
}
],
"functionName": {
"name": "abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library",
"nativeSrc": "3682:59:2",
"nodeType": "YulIdentifier",
"src": "3682:59:2"
},
"nativeSrc": "3682:88:2",
"nodeType": "YulFunctionCall",
"src": "3682:88:2"
},
"nativeSrc": "3682:88:2",
"nodeType": "YulExpressionStatement",
"src": "3682:88:2"
}
]
},
"name": "abi_encode_tuple_t_uint256_t_rational_2_by_1__to_t_uint256_t_uint256__fromStack_library_reversed",
"nativeSrc": "3405:372:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "3511:9:2",
"nodeType": "YulTypedName",
"src": "3511:9:2",
"type": ""
},
{
"name": "value1",
"nativeSrc": "3523:6:2",
"nodeType": "YulTypedName",
"src": "3523:6:2",
"type": ""
},
{
"name": "value0",
"nativeSrc": "3531:6:2",
"nodeType": "YulTypedName",
"src": "3531:6:2",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "3542:4:2",
"nodeType": "YulTypedName",
"src": "3542:4:2",
"type": ""
}
],
"src": "3405:372:2"
},
{
"body": {
"nativeSrc": "3846:80:2",
"nodeType": "YulBlock",
"src": "3846:80:2",
"statements": [
{
"nativeSrc": "3856:22:2",
"nodeType": "YulAssignment",
"src": "3856:22:2",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "3871:6:2",
"nodeType": "YulIdentifier",
"src": "3871:6:2"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "3865:5:2",
"nodeType": "YulIdentifier",
"src": "3865:5:2"
},
"nativeSrc": "3865:13:2",
"nodeType": "YulFunctionCall",
"src": "3865:13:2"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "3856:5:2",
"nodeType": "YulIdentifier",
"src": "3856:5:2"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "3914:5:2",
"nodeType": "YulIdentifier",
"src": "3914:5:2"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nativeSrc": "3887:26:2",
"nodeType": "YulIdentifier",
"src": "3887:26:2"
},
"nativeSrc": "3887:33:2",
"nodeType": "YulFunctionCall",
"src": "3887:33:2"
},
"nativeSrc": "3887:33:2",
"nodeType": "YulExpressionStatement",
"src": "3887:33:2"
}
]
},
"name": "abi_decode_t_uint256_fromMemory",
"nativeSrc": "3783:143:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "3824:6:2",
"nodeType": "YulTypedName",
"src": "3824:6:2",
"type": ""
},
{
"name": "end",
"nativeSrc": "3832:3:2",
"nodeType": "YulTypedName",
"src": "3832:3:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "3840:5:2",
"nodeType": "YulTypedName",
"src": "3840:5:2",
"type": ""
}
],
"src": "3783:143:2"
},
{
"body": {
"nativeSrc": "4009:274:2",
"nodeType": "YulBlock",
"src": "4009:274:2",
"statements": [
{
"body": {
"nativeSrc": "4055:83:2",
"nodeType": "YulBlock",
"src": "4055:83:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "4057:77:2",
"nodeType": "YulIdentifier",
"src": "4057:77:2"
},
"nativeSrc": "4057:79:2",
"nodeType": "YulFunctionCall",
"src": "4057:79:2"
},
"nativeSrc": "4057:79:2",
"nodeType": "YulExpressionStatement",
"src": "4057:79:2"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "4030:7:2",
"nodeType": "YulIdentifier",
"src": "4030:7:2"
},
{
"name": "headStart",
"nativeSrc": "4039:9:2",
"nodeType": "YulIdentifier",
"src": "4039:9:2"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "4026:3:2",
"nodeType": "YulIdentifier",
"src": "4026:3:2"
},
"nativeSrc": "4026:23:2",
"nodeType": "YulFunctionCall",
"src": "4026:23:2"
},
{
"kind": "number",
"nativeSrc": "4051:2:2",
"nodeType": "YulLiteral",
"src": "4051:2:2",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "4022:3:2",
"nodeType": "YulIdentifier",
"src": "4022:3:2"
},
"nativeSrc": "4022:32:2",
"nodeType": "YulFunctionCall",
"src": "4022:32:2"
},
"nativeSrc": "4019:119:2",
"nodeType": "YulIf",
"src": "4019:119:2"
},
{
"nativeSrc": "4148:128:2",
"nodeType": "YulBlock",
"src": "4148:128:2",
"statements": [
{
"nativeSrc": "4163:15:2",
"nodeType": "YulVariableDeclaration",
"src": "4163:15:2",
"value": {
"kind": "number",
"nativeSrc": "4177:1:2",
"nodeType": "YulLiteral",
"src": "4177:1:2",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "4167:6:2",
"nodeType": "YulTypedName",
"src": "4167:6:2",
"type": ""
}
]
},
{
"nativeSrc": "4192:74:2",
"nodeType": "YulAssignment",
"src": "4192:74:2",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "4238:9:2",
"nodeType": "YulIdentifier",
"src": "4238:9:2"
},
{
"name": "offset",
"nativeSrc": "4249:6:2",
"nodeType": "YulIdentifier",
"src": "4249:6:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "4234:3:2",
"nodeType": "YulIdentifier",
"src": "4234:3:2"
},
"nativeSrc": "4234:22:2",
"nodeType": "YulFunctionCall",
"src": "4234:22:2"
},
{
"name": "dataEnd",
"nativeSrc": "4258:7:2",
"nodeType": "YulIdentifier",
"src": "4258:7:2"
}
],
"functionName": {
"name": "abi_decode_t_uint256_fromMemory",
"nativeSrc": "4202:31:2",
"nodeType": "YulIdentifier",
"src": "4202:31:2"
},
"nativeSrc": "4202:64:2",
"nodeType": "YulFunctionCall",
"src": "4202:64:2"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "4192:6:2",
"nodeType": "YulIdentifier",
"src": "4192:6:2"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256_fromMemory",
"nativeSrc": "3932:351:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "3979:9:2",
"nodeType": "YulTypedName",
"src": "3979:9:2",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "3990:7:2",
"nodeType": "YulTypedName",
"src": "3990:7:2",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "4002:6:2",
"nodeType": "YulTypedName",
"src": "4002:6:2",
"type": ""
}
],
"src": "3932:351:2"
},
{
"body": {
"nativeSrc": "4317:152:2",
"nodeType": "YulBlock",
"src": "4317:152:2",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "4334:1:2",
"nodeType": "YulLiteral",
"src": "4334:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "4337:77:2",
"nodeType": "YulLiteral",
"src": "4337:77:2",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "4327:6:2",
"nodeType": "YulIdentifier",
"src": "4327:6:2"
},
"nativeSrc": "4327:88:2",
"nodeType": "YulFunctionCall",
"src": "4327:88:2"
},
"nativeSrc": "4327:88:2",
"nodeType": "YulExpressionStatement",
"src": "4327:88:2"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "4431:1:2",
"nodeType": "YulLiteral",
"src": "4431:1:2",
"type": "",
"value": "4"
},
{
"kind": "number",
"nativeSrc": "4434:4:2",
"nodeType": "YulLiteral",
"src": "4434:4:2",
"type": "",
"value": "0x11"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "4424:6:2",
"nodeType": "YulIdentifier",
"src": "4424:6:2"
},
"nativeSrc": "4424:15:2",
"nodeType": "YulFunctionCall",
"src": "4424:15:2"
},
"nativeSrc": "4424:15:2",
"nodeType": "YulExpressionStatement",
"src": "4424:15:2"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "4455:1:2",
"nodeType": "YulLiteral",
"src": "4455:1:2",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "4458:4:2",
"nodeType": "YulLiteral",
"src": "4458:4:2",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "4448:6:2",
"nodeType": "YulIdentifier",
"src": "4448:6:2"
},
"nativeSrc": "4448:15:2",
"nodeType": "YulFunctionCall",
"src": "4448:15:2"
},
"nativeSrc": "4448:15:2",
"nodeType": "YulExpressionStatement",
"src": "4448:15:2"
}
]
},
"name": "panic_error_0x11",
"nativeSrc": "4289:180:2",
"nodeType": "YulFunctionDefinition",
"src": "4289:180:2"
},
{
"body": {
"nativeSrc": "4520:149:2",
"nodeType": "YulBlock",
"src": "4520:149:2",
"statements": [
{
"nativeSrc": "4530:25:2",
"nodeType": "YulAssignment",
"src": "4530:25:2",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "4553:1:2",
"nodeType": "YulIdentifier",
"src": "4553:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "4535:17:2",
"nodeType": "YulIdentifier",
"src": "4535:17:2"
},
"nativeSrc": "4535:20:2",
"nodeType": "YulFunctionCall",
"src": "4535:20:2"
},
"variableNames": [
{
"name": "x",
"nativeSrc": "4530:1:2",
"nodeType": "YulIdentifier",
"src": "4530:1:2"
}
]
},
{
"nativeSrc": "4564:25:2",
"nodeType": "YulAssignment",
"src": "4564:25:2",
"value": {
"arguments": [
{
"name": "y",
"nativeSrc": "4587:1:2",
"nodeType": "YulIdentifier",
"src": "4587:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "4569:17:2",
"nodeType": "YulIdentifier",
"src": "4569:17:2"
},
"nativeSrc": "4569:20:2",
"nodeType": "YulFunctionCall",
"src": "4569:20:2"
},
"variableNames": [
{
"name": "y",
"nativeSrc": "4564:1:2",
"nodeType": "YulIdentifier",
"src": "4564:1:2"
}
]
},
{
"nativeSrc": "4598:17:2",
"nodeType": "YulAssignment",
"src": "4598:17:2",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "4610:1:2",
"nodeType": "YulIdentifier",
"src": "4610:1:2"
},
{
"name": "y",
"nativeSrc": "4613:1:2",
"nodeType": "YulIdentifier",
"src": "4613:1:2"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "4606:3:2",
"nodeType": "YulIdentifier",
"src": "4606:3:2"
},
"nativeSrc": "4606:9:2",
"nodeType": "YulFunctionCall",
"src": "4606:9:2"
},
"variableNames": [
{
"name": "diff",
"nativeSrc": "4598:4:2",
"nodeType": "YulIdentifier",
"src": "4598:4:2"
}
]
},
{
"body": {
"nativeSrc": "4640:22:2",
"nodeType": "YulBlock",
"src": "4640:22:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nativeSrc": "4642:16:2",
"nodeType": "YulIdentifier",
"src": "4642:16:2"
},
"nativeSrc": "4642:18:2",
"nodeType": "YulFunctionCall",
"src": "4642:18:2"
},
"nativeSrc": "4642:18:2",
"nodeType": "YulExpressionStatement",
"src": "4642:18:2"
}
]
},
"condition": {
"arguments": [
{
"name": "diff",
"nativeSrc": "4631:4:2",
"nodeType": "YulIdentifier",
"src": "4631:4:2"
},
{
"name": "x",
"nativeSrc": "4637:1:2",
"nodeType": "YulIdentifier",
"src": "4637:1:2"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "4628:2:2",
"nodeType": "YulIdentifier",
"src": "4628:2:2"
},
"nativeSrc": "4628:11:2",
"nodeType": "YulFunctionCall",
"src": "4628:11:2"
},
"nativeSrc": "4625:37:2",
"nodeType": "YulIf",
"src": "4625:37:2"
}
]
},
"name": "checked_sub_t_uint256",
"nativeSrc": "4475:194:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nativeSrc": "4506:1:2",
"nodeType": "YulTypedName",
"src": "4506:1:2",
"type": ""
},
{
"name": "y",
"nativeSrc": "4509:1:2",
"nodeType": "YulTypedName",
"src": "4509:1:2",
"type": ""
}
],
"returnVariables": [
{
"name": "diff",
"nativeSrc": "4515:4:2",
"nodeType": "YulTypedName",
"src": "4515:4:2",
"type": ""
}
],
"src": "4475:194:2"
},
{
"body": {
"nativeSrc": "4719:147:2",
"nodeType": "YulBlock",
"src": "4719:147:2",
"statements": [
{
"nativeSrc": "4729:25:2",
"nodeType": "YulAssignment",
"src": "4729:25:2",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "4752:1:2",
"nodeType": "YulIdentifier",
"src": "4752:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "4734:17:2",
"nodeType": "YulIdentifier",
"src": "4734:17:2"
},
"nativeSrc": "4734:20:2",
"nodeType": "YulFunctionCall",
"src": "4734:20:2"
},
"variableNames": [
{
"name": "x",
"nativeSrc": "4729:1:2",
"nodeType": "YulIdentifier",
"src": "4729:1:2"
}
]
},
{
"nativeSrc": "4763:25:2",
"nodeType": "YulAssignment",
"src": "4763:25:2",
"value": {
"arguments": [
{
"name": "y",
"nativeSrc": "4786:1:2",
"nodeType": "YulIdentifier",
"src": "4786:1:2"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "4768:17:2",
"nodeType": "YulIdentifier",
"src": "4768:17:2"
},
"nativeSrc": "4768:20:2",
"nodeType": "YulFunctionCall",
"src": "4768:20:2"
},
"variableNames": [
{
"name": "y",
"nativeSrc": "4763:1:2",
"nodeType": "YulIdentifier",
"src": "4763:1:2"
}
]
},
{
"nativeSrc": "4797:16:2",
"nodeType": "YulAssignment",
"src": "4797:16:2",
"value": {
"arguments": [
{
"name": "x",
"nativeSrc": "4808:1:2",
"nodeType": "YulIdentifier",
"src": "4808:1:2"
},
{
"name": "y",
"nativeSrc": "4811:1:2",
"nodeType": "YulIdentifier",
"src": "4811:1:2"
}
],
"functionName": {
"name": "add",
"nativeSrc": "4804:3:2",
"nodeType": "YulIdentifier",
"src": "4804:3:2"
},
"nativeSrc": "4804:9:2",
"nodeType": "YulFunctionCall",
"src": "4804:9:2"
},
"variableNames": [
{
"name": "sum",
"nativeSrc": "4797:3:2",
"nodeType": "YulIdentifier",
"src": "4797:3:2"
}
]
},
{
"body": {
"nativeSrc": "4837:22:2",
"nodeType": "YulBlock",
"src": "4837:22:2",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nativeSrc": "4839:16:2",
"nodeType": "YulIdentifier",
"src": "4839:16:2"
},
"nativeSrc": "4839:18:2",
"nodeType": "YulFunctionCall",
"src": "4839:18:2"
},
"nativeSrc": "4839:18:2",
"nodeType": "YulExpressionStatement",
"src": "4839:18:2"
}
]
},
"condition": {
"arguments": [
{
"name": "x",
"nativeSrc": "4829:1:2",
"nodeType": "YulIdentifier",
"src": "4829:1:2"
},
{
"name": "sum",
"nativeSrc": "4832:3:2",
"nodeType": "YulIdentifier",
"src": "4832:3:2"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "4826:2:2",
"nodeType": "YulIdentifier",
"src": "4826:2:2"
},
"nativeSrc": "4826:10:2",
"nodeType": "YulFunctionCall",
"src": "4826:10:2"
},
"nativeSrc": "4823:36:2",
"nodeType": "YulIf",
"src": "4823:36:2"
}
]
},
"name": "checked_add_t_uint256",
"nativeSrc": "4675:191:2",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nativeSrc": "4706:1:2",
"nodeType": "YulTypedName",
"src": "4706:1:2",
"type": ""
},
{
"name": "y",
"nativeSrc": "4709:1:2",
"nodeType": "YulTypedName",
"src": "4709:1:2",
"type": ""
}
],
"returnVariables": [
{
"name": "sum",
"nativeSrc": "4715:3:2",
"nodeType": "YulTypedName",
"src": "4715:3:2",
"type": ""
}
],
"src": "4675:191:2"
}
]
},
"contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bool_to_t_bool_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function cleanup_t_rational_2_by_1(value) -> cleaned {\n cleaned := value\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_rational_2_by_1_to_t_uint256(value) -> converted {\n converted := cleanup_t_uint256(identity(cleanup_t_rational_2_by_1(value)))\n }\n\n function abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, convert_t_rational_2_by_1_to_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256_t_rational_2_by_1__to_t_uint256_t_uint256__fromStack_library_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n abi_encode_t_rational_2_by_1_to_t_uint256_fromStack_library(value1, add(headStart, 32))\n\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_sub_t_uint256(x, y) -> diff {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n diff := sub(x, y)\n\n if gt(diff, x) { panic_error_0x11() }\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n sum := add(x, y)\n\n if gt(x, sum) { panic_error_0x11() }\n\n }\n\n}\n",
"id": 2,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {
"ConvertLib.sol": {
"ConvertLib": [
{
"length": 20,
"start": 214
}
]
}
},
"object": "608060405234801561000f575f80fd5b506004361061003f575f3560e01c80637bd703e81461004357806390b98a1114610073578063f8b2cb4f146100a3575b5f80fd5b61005d60048036038101906100589190610360565b6100d3565b60405161006a91906103a3565b60405180910390f35b61008d600480360381019061008891906103e6565b61015c565b60405161009a919061043e565b60405180910390f35b6100bd60048036038101906100b89190610360565b6102bd565b6040516100ca91906103a3565b60405180910390f35b5f73__$c1e9661f796f9214b5c8076e394fd5a419$__6396e4ee3d6100f7846102bd565b60026040518363ffffffff1660e01b81526004016101169291906104a8565b602060405180830381865af4158015610131573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061015591906104e3565b9050919050565b5f815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156101a9575f90506102b7565b815f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546101f4919061053b565b92505081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610246919061056e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516102aa91906103a3565b60405180910390a3600190505b92915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61032f82610306565b9050919050565b61033f81610325565b8114610349575f80fd5b50565b5f8135905061035a81610336565b92915050565b5f6020828403121561037557610374610302565b5b5f6103828482850161034c565b91505092915050565b5f819050919050565b61039d8161038b565b82525050565b5f6020820190506103b65f830184610394565b92915050565b6103c58161038b565b81146103cf575f80fd5b50565b5f813590506103e0816103bc565b92915050565b5f80604083850312156103fc576103fb610302565b5b5f6104098582860161034c565b925050602061041a858286016103d2565b9150509250929050565b5f8115159050919050565b61043881610424565b82525050565b5f6020820190506104515f83018461042f565b92915050565b6104608161038b565b82525050565b5f819050919050565b5f819050919050565b5f61049261048d61048884610466565b61046f565b61038b565b9050919050565b6104a281610478565b82525050565b5f6040820190506104bb5f830185610457565b6104c86020830184610499565b9392505050565b5f815190506104dd816103bc565b92915050565b5f602082840312156104f8576104f7610302565b5b5f610505848285016104cf565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6105458261038b565b91506105508361038b565b92508282039050818111156105685761056761050e565b5b92915050565b5f6105788261038b565b91506105838361038b565b925082820190508082111561059b5761059a61050e565b5b9291505056fea2646970667358221220d1bc4f81c05cce3769cc157fc9df9c4113adc0bc3934e33d318fb615fcd3897f64736f6c63430008190033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7BD703E8 EQ PUSH2 0x43 JUMPI DUP1 PUSH4 0x90B98A11 EQ PUSH2 0x73 JUMPI DUP1 PUSH4 0xF8B2CB4F EQ PUSH2 0xA3 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x5D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x58 SWAP2 SWAP1 PUSH2 0x360 JUMP JUMPDEST PUSH2 0xD3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6A SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x8D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x88 SWAP2 SWAP1 PUSH2 0x3E6 JUMP JUMPDEST PUSH2 0x15C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBD PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xB8 SWAP2 SWAP1 PUSH2 0x360 JUMP JUMPDEST PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCA SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH20 0x0 PUSH4 0x96E4EE3D PUSH2 0xF7 DUP5 PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x2 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x116 SWAP3 SWAP2 SWAP1 PUSH2 0x4A8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x131 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 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 0x155 SWAP2 SWAP1 PUSH2 0x4E3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 PUSH0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 SLOAD LT ISZERO PUSH2 0x1A9 JUMPI PUSH0 SWAP1 POP PUSH2 0x2B7 JUMP JUMPDEST DUP2 PUSH0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x53B JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD PUSH2 0x246 SWAP2 SWAP1 PUSH2 0x56E JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x2AA SWAP2 SWAP1 PUSH2 0x3A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x32F DUP3 PUSH2 0x306 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x33F DUP2 PUSH2 0x325 JUMP JUMPDEST DUP2 EQ PUSH2 0x349 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x35A DUP2 PUSH2 0x336 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x375 JUMPI PUSH2 0x374 PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x382 DUP5 DUP3 DUP6 ADD PUSH2 0x34C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x39D DUP2 PUSH2 0x38B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x3B6 PUSH0 DUP4 ADD DUP5 PUSH2 0x394 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3C5 DUP2 PUSH2 0x38B JUMP JUMPDEST DUP2 EQ PUSH2 0x3CF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x3E0 DUP2 PUSH2 0x3BC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FC JUMPI PUSH2 0x3FB PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x409 DUP6 DUP3 DUP7 ADD PUSH2 0x34C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x41A DUP6 DUP3 DUP7 ADD PUSH2 0x3D2 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x438 DUP2 PUSH2 0x424 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x451 PUSH0 DUP4 ADD DUP5 PUSH2 0x42F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x460 DUP2 PUSH2 0x38B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x492 PUSH2 0x48D PUSH2 0x488 DUP5 PUSH2 0x466 JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH2 0x38B JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4A2 DUP2 PUSH2 0x478 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x4BB PUSH0 DUP4 ADD DUP6 PUSH2 0x457 JUMP JUMPDEST PUSH2 0x4C8 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x499 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP PUSH2 0x4DD DUP2 PUSH2 0x3BC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F8 JUMPI PUSH2 0x4F7 PUSH2 0x302 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x505 DUP5 DUP3 DUP6 ADD PUSH2 0x4CF JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH2 0x545 DUP3 PUSH2 0x38B JUMP JUMPDEST SWAP2 POP PUSH2 0x550 DUP4 PUSH2 0x38B JUMP JUMPDEST SWAP3 POP DUP3 DUP3 SUB SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0x568 JUMPI PUSH2 0x567 PUSH2 0x50E JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x578 DUP3 PUSH2 0x38B JUMP JUMPDEST SWAP2 POP PUSH2 0x583 DUP4 PUSH2 0x38B JUMP JUMPDEST SWAP3 POP DUP3 DUP3 ADD SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x59B JUMPI PUSH2 0x59A PUSH2 0x50E JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 0xBC 0x4F DUP2 0xC0 TLOAD 0xCE CALLDATACOPY PUSH10 0xCC157FC9DF9C4113ADC0 0xBC CODECOPY CALLVALUE 0xE3 RETURNDATASIZE BALANCE DUP16 0xB6 ISZERO 0xFC 0xD3 DUP10 PUSH32 0x64736F6C63430008190033000000000000000000000000000000000000000000 ",
"sourceMap": "310:667:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;766:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;499:264;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;886:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;766:117;825:4;841:10;:18;860:16;871:4;860:10;:16::i;:::-;877:1;841:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;834:45;;766:117;;;:::o;499:264::-;563:15;611:6;588:8;:20;597:10;588:20;;;;;;;;;;;;;;;;:29;584:47;;;626:5;619:12;;;;584:47;659:6;635:8;:20;644:10;635:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;691:6;669:8;:18;678:8;669:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;727:8;706:38;;715:10;706:38;;;737:6;706:38;;;;;;:::i;:::-;;;;;;;;755:4;748:11;;499:264;;;;;:::o;886:89::-;940:4;957:8;:14;966:4;957:14;;;;;;;;;;;;;;;;950:21;;886:89;;;:::o;88:117:2:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:474::-;1952:6;1960;2009:2;1997:9;1988:7;1984:23;1980:32;1977:119;;;2015:79;;:::i;:::-;1977:119;2135:1;2160:53;2205:7;2196:6;2185:9;2181:22;2160:53;:::i;:::-;2150:63;;2106:117;2262:2;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2233:118;1884:474;;;;;:::o;2364:90::-;2398:7;2441:5;2434:13;2427:21;2416:32;;2364:90;;;:::o;2460:109::-;2541:21;2556:5;2541:21;:::i;:::-;2536:3;2529:34;2460:109;;:::o;2575:210::-;2662:4;2700:2;2689:9;2685:18;2677:26;;2713:65;2775:1;2764:9;2760:17;2751:6;2713:65;:::i;:::-;2575:210;;;;:::o;2791:126::-;2886:24;2904:5;2886:24;:::i;:::-;2881:3;2874:37;2791:126;;:::o;2923:85::-;2968:7;2997:5;2986:16;;2923:85;;;:::o;3014:60::-;3042:3;3063:5;3056:12;;3014:60;;;:::o;3080:158::-;3138:9;3171:61;3189:42;3198:32;3224:5;3198:32;:::i;:::-;3189:42;:::i;:::-;3171:61;:::i;:::-;3158:74;;3080:158;;;:::o;3244:155::-;3347:45;3386:5;3347:45;:::i;:::-;3342:3;3335:58;3244:155;;:::o;3405:372::-;3542:4;3580:2;3569:9;3565:18;3557:26;;3593:79;3669:1;3658:9;3654:17;3645:6;3593:79;:::i;:::-;3682:88;3766:2;3755:9;3751:18;3742:6;3682:88;:::i;:::-;3405:372;;;;;:::o;3783:143::-;3840:5;3871:6;3865:13;3856:22;;3887:33;3914:5;3887:33;:::i;:::-;3783:143;;;;:::o;3932:351::-;4002:6;4051:2;4039:9;4030:7;4026:23;4022:32;4019:119;;;4057:79;;:::i;:::-;4019:119;4177:1;4202:64;4258:7;4249:6;4238:9;4234:22;4202:64;:::i;:::-;4192:74;;4148:128;3932:351;;;;:::o;4289:180::-;4337:77;4334:1;4327:88;4434:4;4431:1;4424:15;4458:4;4455:1;4448:15;4475:194;4515:4;4535:20;4553:1;4535:20;:::i;:::-;4530:25;;4569:20;4587:1;4569:20;:::i;:::-;4564:25;;4613:1;4610;4606:9;4598:17;;4637:1;4631:4;4628:11;4625:37;;;4642:18;;:::i;:::-;4625:37;4475:194;;;;:::o;4675:191::-;4715:3;4734:20;4752:1;4734:20;:::i;:::-;4729:25;;4768:20;4786:1;4768:20;:::i;:::-;4763:25;;4811:1;4808;4804:9;4797:16;;4832:3;4829:1;4826:10;4823:36;;;4839:18;;:::i;:::-;4823:36;4675:191;;;;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "299000",
"executionCost": "22536",
"totalCost": "321536"
},
"external": {
"getBalance(address)": "2851",
"getBalanceInEth(address)": "infinite",
"sendCoin(address,uint256)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "80"
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "40"
},
{
"begin": 310,
"end": 977,
"name": "MSTORE",
"source": 1
},
{
"begin": 447,
"end": 496,
"name": "CALLVALUE",
"source": 1
},
{
"begin": 447,
"end": 496,
"name": "DUP1",
"source": 1
},
{
"begin": 447,
"end": 496,
"name": "ISZERO",
"source": 1
},
{
"begin": 447,
"end": 496,
"name": "PUSH [tag]",
"source": 1,
"value": "1"
},
{
"begin": 447,
"end": 496,
"name": "JUMPI",
"source": 1
},
{
"begin": 447,
"end": 496,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 447,
"end": 496,
"name": "DUP1",
"source": 1
},
{
"begin": 447,
"end": 496,
"name": "REVERT",
"source": 1
},
{
"begin": 447,
"end": 496,
"name": "tag",
"source": 1,
"value": "1"
},
{
"begin": 447,
"end": 496,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 447,
"end": 496,
"name": "POP",
"source": 1
},
{
"begin": 487,
"end": 492,
"name": "PUSH",
"source": 1,
"value": "2710"
},
{
"begin": 465,
"end": 473,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 465,
"end": 484,
"name": "DUP1",
"source": 1
},
{
"begin": 474,
"end": 483,
"name": "ORIGIN",
"source": 1
},
{
"begin": 465,
"end": 484,
"name": "PUSH",
"source": 1,
"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
},
{
"begin": 465,
"end": 484,
"name": "AND",
"source": 1
},
{
"begin": 465,
"end": 484,
"name": "PUSH",
"source": 1,
"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
},
{
"begin": 465,
"end": 484,
"name": "AND",
"source": 1
},
{
"begin": 465,
"end": 484,
"name": "DUP2",
"source": 1
},
{
"begin": 465,
"end": 484,
"name": "MSTORE",
"source": 1
},
{
"begin": 465,
"end": 484,
"name": "PUSH",
"source": 1,
"value": "20"
},
{
"begin": 465,
"end": 484,
"name": "ADD",
"source": 1
},
{
"begin": 465,
"end": 484,
"name": "SWAP1",
"source": 1
},
{
"begin": 465,
"end": 484,
"name": "DUP2",
"source": 1
},
{
"begin": 465,
"end": 484,
"name": "MSTORE",
"source": 1
},
{
"begin": 465,
"end": 484,
"name": "PUSH",
"source": 1,
"value": "20"
},
{
"begin": 465,
"end": 484,
"name": "ADD",
"source": 1
},
{
"begin": 465,
"end": 484,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 465,
"end": 484,
"name": "KECCAK256",
"source": 1
},
{
"begin": 465,
"end": 492,
"name": "DUP2",
"source": 1
},
{
"begin": 465,
"end": 492,
"name": "SWAP1",
"source": 1
},
{
"begin": 465,
"end": 492,
"name": "SSTORE",
"source": 1
},
{
"begin": 465,
"end": 492,
"name": "POP",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH #[$]",
"source": 1,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 310,
"end": 977,
"name": "DUP1",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH [$]",
"source": 1,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 310,
"end": 977,
"name": "CODECOPY",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 310,
"end": 977,
"name": "RETURN",
"source": 1
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220d1bc4f81c05cce3769cc157fc9df9c4113adc0bc3934e33d318fb615fcd3897f64736f6c63430008190033",
".code": [
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "80"
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "40"
},
{
"begin": 310,
"end": 977,
"name": "MSTORE",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "CALLVALUE",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "DUP1",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "ISZERO",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH [tag]",
"source": 1,
"value": "1"
},
{
"begin": 310,
"end": 977,
"name": "JUMPI",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 310,
"end": 977,
"name": "DUP1",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "REVERT",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "tag",
"source": 1,
"value": "1"
},
{
"begin": 310,
"end": 977,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "POP",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "4"
},
{
"begin": 310,
"end": 977,
"name": "CALLDATASIZE",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "LT",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH [tag]",
"source": 1,
"value": "2"
},
{
"begin": 310,
"end": 977,
"name": "JUMPI",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 310,
"end": 977,
"name": "CALLDATALOAD",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "E0"
},
{
"begin": 310,
"end": 977,
"name": "SHR",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "DUP1",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "7BD703E8"
},
{
"begin": 310,
"end": 977,
"name": "EQ",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH [tag]",
"source": 1,
"value": "3"
},
{
"begin": 310,
"end": 977,
"name": "JUMPI",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "DUP1",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "90B98A11"
},
{
"begin": 310,
"end": 977,
"name": "EQ",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH [tag]",
"source": 1,
"value": "4"
},
{
"begin": 310,
"end": 977,
"name": "JUMPI",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "DUP1",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "F8B2CB4F"
},
{
"begin": 310,
"end": 977,
"name": "EQ",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH [tag]",
"source": 1,
"value": "5"
},
{
"begin": 310,
"end": 977,
"name": "JUMPI",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "tag",
"source": 1,
"value": "2"
},
{
"begin": 310,
"end": 977,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 310,
"end": 977,
"name": "DUP1",
"source": 1
},
{
"begin": 310,
"end": 977,
"name": "REVERT",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "tag",
"source": 1,
"value": "3"
},
{
"begin": 766,
"end": 883,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "PUSH [tag]",
"source": 1,
"value": "6"
},
{
"begin": 766,
"end": 883,
"name": "PUSH",
"source": 1,
"value": "4"
},
{
"begin": 766,
"end": 883,
"name": "DUP1",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "CALLDATASIZE",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "SUB",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "DUP2",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "ADD",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "SWAP1",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "PUSH [tag]",
"source": 1,
"value": "7"
},
{
"begin": 766,
"end": 883,
"name": "SWAP2",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "SWAP1",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "PUSH [tag]",
"source": 1,
"value": "8"
},
{
"begin": 766,
"end": 883,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "tag",
"source": 1,
"value": "7"
},
{
"begin": 766,
"end": 883,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "PUSH [tag]",
"source": 1,
"value": "9"
},
{
"begin": 766,
"end": 883,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "tag",
"source": 1,
"value": "6"
},
{
"begin": 766,
"end": 883,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "PUSH",
"source": 1,
"value": "40"
},
{
"begin": 766,
"end": 883,
"name": "MLOAD",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "PUSH [tag]",
"source": 1,
"value": "10"
},
{
"begin": 766,
"end": 883,
"name": "SWAP2",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "SWAP1",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "PUSH [tag]",
"source": 1,
"value": "11"
},
{
"begin": 766,
"end": 883,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "tag",
"source": 1,
"value": "10"
},
{
"begin": 766,
"end": 883,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "PUSH",
"source": 1,
"value": "40"
},
{
"begin": 766,
"end": 883,
"name": "MLOAD",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "DUP1",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "SWAP2",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "SUB",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "SWAP1",
"source": 1
},
{
"begin": 766,
"end": 883,
"name": "RETURN",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "tag",
"source": 1,
"value": "4"
},
{
"begin": 499,
"end": 763,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "PUSH [tag]",
"source": 1,
"value": "12"
},
{
"begin": 499,
"end": 763,
"name": "PUSH",
"source": 1,
"value": "4"
},
{
"begin": 499,
"end": 763,
"name": "DUP1",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "CALLDATASIZE",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "SUB",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "DUP2",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "ADD",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "SWAP1",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "PUSH [tag]",
"source": 1,
"value": "13"
},
{
"begin": 499,
"end": 763,
"name": "SWAP2",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "SWAP1",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "PUSH [tag]",
"source": 1,
"value": "14"
},
{
"begin": 499,
"end": 763,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "tag",
"source": 1,
"value": "13"
},
{
"begin": 499,
"end": 763,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "PUSH [tag]",
"source": 1,
"value": "15"
},
{
"begin": 499,
"end": 763,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "tag",
"source": 1,
"value": "12"
},
{
"begin": 499,
"end": 763,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "PUSH",
"source": 1,
"value": "40"
},
{
"begin": 499,
"end": 763,
"name": "MLOAD",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "PUSH [tag]",
"source": 1,
"value": "16"
},
{
"begin": 499,
"end": 763,
"name": "SWAP2",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "SWAP1",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "PUSH [tag]",
"source": 1,
"value": "17"
},
{
"begin": 499,
"end": 763,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "tag",
"source": 1,
"value": "16"
},
{
"begin": 499,
"end": 763,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "PUSH",
"source": 1,
"value": "40"
},
{
"begin": 499,
"end": 763,
"name": "MLOAD",
"source": 1
},
{
"begin": 499,
"end": 763,
"name": "DUP1",
"source": 1
},
{
"begin": 499,
"end": 763,
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment