{
  "contractName": "Optimistic_Roll_In",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_logic_address",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_lock_time",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_required_bond",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "accuser",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "suspect",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "transition_index",
          "type": "uint256"
        }
      ],
      "name": "ORI_Fraud_Proven",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "suspect",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "accuser",
          "type": "address"
        }
      ],
      "name": "ORI_Locked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "block_time",
          "type": "uint256"
        }
      ],
      "name": "ORI_New_Optimistic_State",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "block_time",
          "type": "uint256"
        }
      ],
      "name": "ORI_New_Optimistic_States",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "new_state",
          "type": "bytes32"
        }
      ],
      "name": "ORI_New_State",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tree_size",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "block_time",
          "type": "uint256"
        }
      ],
      "name": "ORI_Rolled_Back",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "suspect",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "accuser",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "block_time",
          "type": "uint256"
        }
      ],
      "name": "ORI_Unlocked",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "account_states",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "balances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "lock_time",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "locked_timestamps",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lockers",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "logic_contract",
      "outputs": [
        {
          "internalType": "contract Optimistic_Roll_In_Compatible",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "required_bond",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rollback_sizes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "stateMutability": "payable",
      "type": "receive",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "bond",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "destination",
          "type": "address"
        }
      ],
      "name": "unbond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "destination",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "destination",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "call_data_root",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "state",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "last_time",
          "type": "uint256"
        }
      ],
      "name": "archive",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unarchive",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "call_data",
          "type": "bytes"
        }
      ],
      "name": "perform",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "call_data",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "call_data_root",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "last_time",
          "type": "uint256"
        }
      ],
      "name": "perform_and_exit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "call_data",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "new_state",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[]",
          "name": "proof",
          "type": "bytes32[]"
        }
      ],
      "name": "perform_optimistically_and_enter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "call_data",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "new_state",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "call_data_root",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[]",
          "name": "proof",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint256",
          "name": "last_time",
          "type": "uint256"
        }
      ],
      "name": "perform_optimistically",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "call_data",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32",
          "name": "new_state",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[]",
          "name": "proof",
          "type": "bytes32[]"
        }
      ],
      "name": "perform_many_optimistically_and_enter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "call_data",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32",
          "name": "new_state",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "call_data_root",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[]",
          "name": "proof",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint256",
          "name": "last_time",
          "type": "uint256"
        }
      ],
      "name": "perform_many_optimistically",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "suspect",
          "type": "address"
        }
      ],
      "name": "lock",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "suspect",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "state",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "call_data_root",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "last_time",
          "type": "uint256"
        }
      ],
      "name": "unlock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "suspect",
          "type": "address"
        },
        {
          "internalType": "bytes[]",
          "name": "call_data",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32",
          "name": "state",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "call_data_root",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[]",
          "name": "proof",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint256",
          "name": "last_time",
          "type": "uint256"
        }
      ],
      "name": "prove_fraud",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "rolled_back_call_data_root",
          "type": "bytes32"
        },
        {
          "internalType": "bytes[]",
          "name": "rolled_back_call_data",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "roll_back_proof",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint256",
          "name": "current_size",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "current_size_proof",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "call_data_root",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "state",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "last_time",
          "type": "uint256"
        }
      ],
      "name": "rollback",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.3+commit.9bfce1f6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic_address\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_lock_time\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_required_bond\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"accuser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"suspect\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"transition_index\",\"type\":\"uint256\"}],\"name\":\"ORI_Fraud_Proven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"suspect\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"accuser\",\"type\":\"address\"}],\"name\":\"ORI_Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"block_time\",\"type\":\"uint256\"}],\"name\":\"ORI_New_Optimistic_State\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"block_time\",\"type\":\"uint256\"}],\"name\":\"ORI_New_Optimistic_States\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"new_state\",\"type\":\"bytes32\"}],\"name\":\"ORI_New_State\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tree_size\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"block_time\",\"type\":\"uint256\"}],\"name\":\"ORI_Rolled_Back\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"suspect\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"accuser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"block_time\",\"type\":\"uint256\"}],\"name\":\"ORI_Unlocked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"account_states\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"call_data_root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"state\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"last_time\",\"type\":\"uint256\"}],\"name\":\"archive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"suspect\",\"type\":\"address\"}],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lock_time\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"locked_timestamps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"lockers\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"logic_contract\",\"outputs\":[{\"internalType\":\"contract Optimistic_Roll_In_Compatible\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"call_data\",\"type\":\"bytes\"}],\"name\":\"perform\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"call_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"call_data_root\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"last_time\",\"type\":\"uint256\"}],\"name\":\"perform_and_exit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"call_data\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"new_state\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"call_data_root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"last_time\",\"type\":\"uint256\"}],\"name\":\"perform_many_optimistically\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"call_data\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"new_state\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"perform_many_optimistically_and_enter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"call_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"new_state\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"call_data_root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"last_time\",\"type\":\"uint256\"}],\"name\":\"perform_optimistically\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"call_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"new_state\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"perform_optimistically_and_enter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"suspect\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"call_data\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"state\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"call_data_root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"last_time\",\"type\":\"uint256\"}],\"name\":\"prove_fraud\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"required_bond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rolled_back_call_data_root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes[]\",\"name\":\"rolled_back_call_data\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"roll_back_proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"current_size\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"current_size_proof\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"call_data_root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"state\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"last_time\",\"type\":\"uint256\"}],\"name\":\"rollback\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rollback_sizes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unarchive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"suspect\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"state\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"call_data_root\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"last_time\",\"type\":\"uint256\"}],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/optimistic-roll-in.sol\":\"Optimistic_Roll_In\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/optimistic-roll-in-compatible.sol\":{\"keccak256\":\"0xa52cbbdb46293c2e4ec580da44dbf4f44a95deffd7eeda5b98a4804a986c1f52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://064c9204543aa06dd8091476ee29119932ec0edd0bd1c69aaaffd81709311874\",\"dweb:/ipfs/QmYmbqGTbsps7ZpsA7MrZDyXrNmZeETi5h6jzi2VfoLdHk\"]},\"/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/optimistic-roll-in.sol\":{\"keccak256\":\"0x443ae4e9848131234377fb288bc0df1a974b6bcf0d07763ebe02b72a8742e312\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://924313052f6d89e49800a9ee5ad51bf2c791ec24cbfa4168520fc359733ae21e\",\"dweb:/ipfs/QmcTLPBHehHJHbjx7RYjbU8YNKUabDyzuJSiCrssjya4Mu\"]},\"merkle-trees/eth/contracts/internal-merkle-library.sol\":{\"keccak256\":\"0xcc65e5ea6dd6f08ce553491b0e2ba7b68fa462e8a93119cb18668df332573646\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d31eefd1635ebd52e4480612e2e5d16dc6976915ebaecb969ec2b300a36460c\",\"dweb:/ipfs/QmcrnP3TvcVA4XtocUaTALFxyGXiDV66UMo8nEqAzwwkUk\"]}},\"version\":1}",
  "bytecode": "0x60e06040523480156200001157600080fd5b5060405162003e9838038062003e98833981016040819052620000349162000053565b60609290921b6001600160601b03191660805260a05260c05262000096565b60008060006060848603121562000068578283fd5b83516001600160a01b03811681146200007f578384fd5b602085015160409095015190969495509392505050565b60805160601c60a05160c051613da0620000f860003980610460528061048e52806105175280610788528061126352508061062452806106bb5280610b77528061174b5250806106df52806109a3528061208652806122d05250613da06000f3fe60806040526004361061018f5760003560e01c80637ad246f8116100d6578063bb6ae2cb1161007f578063e4da61ab11610059578063e4da61ab146103e5578063e6a6479914610405578063f435f5a714610425576101a0565b8063bb6ae2cb1461039f578063c45481bb146103b2578063e1124200146103d2576101a0565b8063a68f5913116100b0578063a68f59131461034a578063af7b5a411461036a578063b20554001461038a576101a0565b80637ad246f81461031a5780638129fc1c146103225780638ee16d131461032a576101a0565b80632c8e7a211161013857806351cff8d91161011257806351cff8d9146102ba5780636a8dddef146102da5780637a9f05b5146102fa576101a0565b80632c8e7a2114610263578063480bb7c4146102905780634de94320146102a5576101a0565b8063247ce85b11610169578063247ce85b1461020757806327e235e31461021a5780632a41545414610250576101a0565b806308542bb1146101a55780631646d051146101c7578063177f15c5146101e7576101a0565b366101a05761019d33610438565b50005b600080fd5b3480156101b157600080fd5b506101c56101c0366004613407565b610542565b005b3480156101d357600080fd5b506101c56101e2366004613651565b61055a565b3480156101f357600080fd5b506101c5610202366004613617565b610573565b6101c5610215366004613302565b610584565b34801561022657600080fd5b5061023a610235366004613302565b6105c7565b6040516102479190613776565b60405180910390f35b6101c561025e3660046136b4565b6105d9565b34801561026f57600080fd5b5061028361027e366004613302565b610691565b6040516102479190613755565b34801561029c57600080fd5b5061023a6106b9565b3480156102b157600080fd5b506102836106dd565b3480156102c657600080fd5b506101c56102d5366004613302565b610701565b3480156102e657600080fd5b506101c56102f536600461347e565b61083e565b34801561030657600080fd5b5061023a610315366004613302565b61084e565b6101c5610860565b6101c561094a565b34801561033657600080fd5b506101c56103453660046133f2565b610aec565b34801561035657600080fd5b506101c5610365366004613358565b610e58565b34801561037657600080fd5b5061023a610385366004613302565b61124f565b34801561039657600080fd5b5061023a611261565b6101c56103ad3660046135d7565b611285565b3480156103be57600080fd5b5061023a6103cd366004613302565b611297565b6101c56103e0366004613537565b6112a9565b3480156103f157600080fd5b506101c5610400366004613302565b611629565b34801561041157600080fd5b506101c561042036600461331e565b6116ea565b6101c5610433366004613302565b6118fb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120547f0000000000000000000000000000000000000000000000000000000000000000141561048c57503461053d565b7f00000000000000000000000000000000000000000000000000000000000000003410156104ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c86565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090207f00000000000000000000000000000000000000000000000000000000000000009081905534035b919050565b610553338686866000878782611ad4565b5050505050565b61056a3388888888888888611d08565b50505050505050565b610553338686866000878782611d08565b61058d81610438565b156105c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c4f565b50565b60016020526000908152604090205481565b3360008181526004602052604090205415610620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e69061383a565b81427f000000000000000000000000000000000000000000000000000000000000000082011061067c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613be1565b6106893387878787611ec2565b505050505050565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff161561075e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b33600081815260208181526040808320546001909252822054901515918261078657816107aa565b7f000000000000000000000000000000000000000000000000000000000000000082035b9050818111156107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613b05565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082208486039055519188169183156108fc0291849190818181858888f1935050505015801561056a573d6000803e3d6000fd5b61056a3388888888888888611ad4565b60036020526000908152604090205481565b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff166108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613a29565b336108c681610438565b156108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c4f565b73ffffffffffffffffffffffffffffffffffffffff16600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550565b3360008181526020819052604090205415610991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906138a8565b33600061099d82610438565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637ed3068983856040518363ffffffff1660e01b81526004016109fb9190613755565b6020604051808303818588803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a4d919061351f565b604051909150610a66906000908390829060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff87166000818152928390529282205583927f0f5025cc4f20aa47a346d1b7d9da6ba8c68cc8e83b75e813da4b4490d55365ae9190a350505050565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260026020526040902054859116610b4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613a29565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260409020548590427f00000000000000000000000000000000000000000000000000000000000000009091011115610bd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613b3c565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902054869015610c30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e69061383a565b73ffffffffffffffffffffffffffffffffffffffff871660009081526020818152604091829020549151610c6a9188918a9189910161373f565b6040516020818303038152906040528051906020012014610cb7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b73ffffffffffffffffffffffffffffffffffffffff808816600081815260026020818152604080842080547fffffffffffffffffffffffff000000000000000000000000000000000000000080821690925560038085528387208790559716808652938352818520805490911690559481528483208390556001905283822080549083905592825292902080548201905585610db05760008273ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fd896484469c47833eb445d62b95b9dd6b28d0c050a9b7f2ce8902d137316500e60405160405180910390a4505061056a565b604051610dc59088908a90429060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff808e1660008181529384905293832091909155429390861692917fd896484469c47833eb445d62b95b9dd6b28d0c050a9b7f2ce8902d137316500e91a4505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff808916600090815260026020526040902054899116610eb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613a29565b73ffffffffffffffffffffffffffffffffffffffff8981166000908152600260205260409020543391168114610f1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906137cc565b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526020818152604091829020549151610f549189918b9188910161373f565b6040516020818303038152906040528051906020012014610fa1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b610fae868a8a88886121b3565b610fe4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613871565b6060610ff28a8a88886121eb565b905060008160008151811061100357fe5b602002602001015190508a8a9050600114156110d0578686600081811061102657fe5b9050602002013560001c816001011461106b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906138df565b6110948c8c8c600081811061107c57fe5b905060200281019061108e9190613cbd565b8c61223d565b156110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e69061394d565b611177565b816001815181106110dd57fe5b602002602001015181600101146110f357600080fd5b8a8a600181811061110057fe5b90506020028101906111129190613cbd565b611120916024908290613d20565b81019061112d9190613507565b98506111408c8c8c600081811061107c57fe5b15611177576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e69061394d565b73ffffffffffffffffffffffffffffffffffffffff808d166000818152600160209081526040808320805490849055948816808452818420805487019055600280845282852080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556003808652848720879055878752600486528487208a905591855283862080549091168717905590925280832083905551939850849390917f55469cdf3fd81a478fed2a1491832e3d145bf2ab3c6a6fbb187022b3885b90fd91a4505050505050505050505050565b60006020819052908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b611293338383600080611ec2565b5050565b60046020526000908152604090205481565b33600081815260046020526040902054806112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613a60565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260409182902054915161132a918891889188910161373f565b6040516020818303038152906040528051906020012014611377576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b611382858888612382565b6113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139f2565b6000898960008181106113c757fe5b9050602002013560001c905087811061140c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613803565b81811015611446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613ace565b856114548e8e8e8e8e6123b3565b1461148b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613b73565b8b8b600081811061149857fe5b90506020028101906114aa9190613cbd565b6114b8916024908290613d20565b8101906114c59190613507565b6040519095506114dd908e908790429060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012073ffffffffffffffffffffffffffffffffffffffff8616600090815292839052912055808214156115955773ffffffffffffffffffffffffffffffffffffffff8316600090815260026020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560049091528120555b61159e83610438565b156115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c4f565b42818473ffffffffffffffffffffffffffffffffffffffff167f4d7ed8c49e6b03daee23a18f4bd14bd7e4628e5ed54c57bf84407a693867eca960405160405180910390a450505050505050505050505050565b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611686576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b3360008181526001602090815260408083208054908490559183905280832083905551909173ffffffffffffffffffffffffffffffffffffffff86169183156108fc0291849190818181858888f19350505050158015610553573d6000803e3d6000fd5b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611747576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b81427f00000000000000000000000000000000000000000000000000000000000000008201106117a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613be1565b33600081815260208181526040918290205491516117c7918991899189910161373f565b6040516020818303038152906040528051906020012014611814576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b60405161182a906000908790829060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff8086166000818152808552858120939093556002845284832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055600190925291822080549083905592908a169183156108fc02918491818181858888f193505050501580156118f0573d6000803e3d6000fd5b505050505050505050565b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611958576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260026020526040902054839116156119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602081815260408084208054337fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255600380855283872042908190558388529585528387208054909216831790915590925290922055611a3d81610438565b15611a74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c4f565b8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8773bde6581ad6ddd421210de867340039fb65ce3df41edba7b5de6d24ae7a5160405160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff80891660009081526002602052604090205489911615611b35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b878760018111611b71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613a97565b60008a8a6000818110611b8057fe5b9050602002810190611b929190613cbd565b611ba0916024908290613d20565b810190611bad9190613507565b73ffffffffffffffffffffffffffffffffffffffff8d16600090815260208181526040918290205491519293509091611bec918b9185918a910161373f565b6040516020818303038152906040528051906020012014611c39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b611c46888c8c8a8a6123b3565b604051909150611c5e9082908b90429060200161373f565b604051602081830303815290604052805190602001206000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550428c73ffffffffffffffffffffffffffffffffffffffff167f0b87b136840d19f5f25329273082c00833265a189b70137e06df6315ddc7839e60405160405180910390a3505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff80891660009081526002602052604090205489911615611d69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b6000611d78886024818c613d20565b810190611d859190613507565b73ffffffffffffffffffffffffffffffffffffffff8b16600090815260208181526040918290205491519293509091611dc4918991859188910161373f565b6040516020818303038152906040528051906020012014611e11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b611e1e868a8a8888612490565b604051909150611e369082908990429060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff8e166000818152928390529282205542927f4779c4b07abff82b16061ec9a47d081e7f4981c29088395cdb7ff87e322cbbc69190a350505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526002602052604090205486911615611f23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b611f308460048188613d20565b810190611f3d9190613302565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614611fa1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c18565b6000611fb08560248189613d20565b810190611fbd9190613507565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260208181526040918290205491519293509091611ffc918791859188910161373f565b6040516020818303038152906040528051906020012014612049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b6040517f8517c18700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690638517c1879034906120bf908a908a9060040161377f565b6020604051808303818588803b1580156120d857600080fd5b505af11580156120ec573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612111919061351f565b60405190915061212a906000908390829060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff8b166000818152928390529282205583927f0f5025cc4f20aa47a346d1b7d9da6ba8c68cc8e83b75e813da4b4490d55365ae9190a350505050505050565b6000856121de848460008181106121c657fe5b905060200201356121d98888888861255b565b612571565b1490505b95945050505050565b606061223284848460018181106121fe57fe5b905060200201358585600281811061221257fe5b905060200201358686600381811061222657fe5b90506020020135612580565b90505b949350505050565b600061224c8360048187613d20565b8101906122599190613302565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461229357506000612235565b6040517f8821e2b100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690638821e2b190612307908790879060040161377f565b60206040518083038186803b15801561231f57600080fd5b505afa92505050801561236d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261236a9181019061351f565b60015b61237957506000612235565b82149050612235565b600083158015612390575082155b1561239d575060016123ac565b836123a88484612571565b1490505b9392505050565b600080838360008181106123c357fe5b60200291909101359150508615811514612409576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613984565b866124245761241c856121d988826128a0565b9150506121e2565b6000612432878787876128b4565b93509050876124418383612571565b14612478576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613916565b61248482870184612571565b98975050505050505050565b600080838360008181106124a057fe5b602002919091013591505086158115146124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613984565b866124fa5761241c60016121d988886128d8565b60006125088787878761290e565b93509050876125178383612571565b1461254e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613916565b6124846001830184612571565b600061223261256a868661294d565b8484612a57565b60009182526020526040902090565b60608467ffffffffffffffff8111801561259957600080fd5b506040519080825280602002602001820160405280156125c3578160200160208202803683370190505b50905060608567ffffffffffffffff811180156125df57600080fd5b50604051908082528060200260200182016040528015612609578160200160208202803683370190505b50905060608667ffffffffffffffff8111801561262557600080fd5b5060405190808252806020026020018201604052801561264f578160200160208202803683370190505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90970196905086600160008080805b848c169350848b169250848a16915087868151811061269b57fe5b60200260200101516001901b90508483141561274257848414156126c6575050505050505050612235565b8786815181106126d257fe5b6020908102919091010180516001019052856126f0578c9550612736565b86517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8701968891811061272057fe5b602002602001015161273157612736565b6126c6565b600185901b9450612680565b84841415612809575b84821415612773578089878151811061276057fe5b6020026020010181815117915081815250505b87868151811061277f57fe5b60209081029190910101805160010190528561279d578c9550612809565b8686815181106127a957fe5b60200260200101516127df576001878780600190039850815181106127ca57fe5b91151560209283029190910190910152612809565b6001878780600190039850815181106127f457fe5b9115156020928302919091019091015261274b565b848214612830578089878151811061281d57fe5b6020026020010181815117915081815250505b87868151811061283c57fe5b60209081029190910101805160010190528561285a578c9550612736565b86517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8701968891811061288a57fe5b602002602001015161289b57612736565b612809565b60006123ac6128af8484612bc3565b612d7e565b6000806128cb6128c48787612e90565b8585612f6c565b9150915094509492505050565b6040516000906128f090829085908590602001613703565b60405160208183030381529060405280519060200120905092915050565b600080600060f81b868660405160200161292a93929190613703565b6040516020818303038152906040528051906020012091506128cb828585613167565b6060818067ffffffffffffffff8111801561296757600080fd5b50604051908082528060200260200182016040528015612991578160200160208202803683370190505b5091507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160005b82811015612a4e5760008686848181106129d057fe5b90506020028101906129e29190613cbd565b6040516020016129f493929190613703565b60405160208183030381529060405280519060200120848281518110612a1657fe5b60209081029190910101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906001016129ba565b50505092915050565b825160009081806004600182888883818110612a6f57fe5b905060200201359050600089896002818110612a8757fe5b90506020020135905060008a8a6003818110612a9f57fe5b9050602002013590505b838483161415612b4657838484161415612af0578b60018715612acc5787612ace565b895b0381518110612ad957fe5b6020026020010151985050505050505050506123ac565b8b8781518110612afc57fe5b60200260200101518c8781518110612b1057fe5b602002602001018181525050878760010181612b2857fe5b069650878660010181612b3757fe5b069550600184901b9350612aa9565b8384841614612b6d578a8a86806001019750818110612b6157fe5b90506020020135612b87565b8b5160018801978d918110612b7e57fe5b60200260200101515b9850878781612b9257fe5b069650612bb78c8881518110612ba457fe5b60200260200101518a868785161461321b565b8c8781518110612b1057fe5b606081600181811c908216018067ffffffffffffffff81118015612be657600080fd5b50604051908082528060200260200182016040528015612c10578160200160208202803683370190505b5092506000805b82821015612d745750600181901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8401811415612cb4576000878783818110612c5d57fe5b9050602002810190612c6f9190613cbd565b604051602001612c8193929190613703565b60405160208183030381529060405280519060200120858381518110612ca357fe5b602002602001018181525050612d74565b612d526000888884818110612cc557fe5b9050602002810190612cd79190613cbd565b604051602001612ce993929190613703565b60405160208183030381529060405280519060200120600060f81b898985600101818110612d1357fe5b9050602002810190612d259190613cbd565b604051602001612d3793929190613703565b60405160208183030381529060405280519060200120612571565b8551600184019387918110612d6357fe5b602002602001018181525050612c17565b5050505092915050565b805160009081805b6001831115612e715750600181901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301811415612e0057848181518110612dcb57fe5b6020026020010151858381518110612ddf57fe5b6020026020010181815250506000915082600116600184901c019250612d86565b828110612e1c576000915082600116600184901c019250612d86565b612e4f858281518110612e2b57fe5b6020026020010151868360010181518110612e4257fe5b6020026020010151612571565b8551600184019387918110612e6057fe5b602002602001018181525050612d86565b84600081518110612e7e57fe5b60200260200101519350505050919050565b6060818067ffffffffffffffff81118015612eaa57600080fd5b50604051908082528060200260200182016040528015612ed4578160200160208202803683370190505b5091505b8015612f65577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016000848483818110612f0e57fe5b9050602002810190612f209190613cbd565b604051602001612f3293929190613703565b60405160208183030381529060405280519060200120828281518110612f5457fe5b602002602001018181525050612ed8565b5092915050565b8251600090819081808087878281612f8057fe5b60200291909101359485017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019491508190506000612fbe8261323b565b63ffffffff169050898982818110612fd257fe5b9050602002013597505b851561313f5784158015612ff35750816001166001145b1561308d5761301a8a8a8381811061300757fe5b905060200201358c8681518110612e4257fe5b8b60008151811061302757fe5b6020908102919091010152600193909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180156130805761307d8a8a8381811061307057fe5b9050602002013589612571565b97505b60019450908401906130e8565b858210156130e8576130be8b85806001019650815181106130aa57fe5b60200260200101518c8681518110612e4257fe5b8b5160018701968d9181106130cf57fe5b6020026020010181815250506001840193506002820191505b85821061313a5785821415613124578a848151811061310357fe5b60200260200101518b868151811061311757fe5b6020026020010181815250505b600195861c95600095508594509290921c918291505b612fdc565b878b60008151811061314d57fe5b602002602001015197509750505050505050935093915050565b600080600061318b8585600081811061317c57fe5b9050602002013560001c61323b565b63ffffffff16905084848281811061319f57fe5b9050602002013592506131b28387612571565b95505b6001811115613212577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018484828181106131ec57fe5b9050602002013591506131ff8287612571565b955061320b8284612571565b92506131b5565b50909492505050565b6000816132315761322c8385612571565b612235565b6122358484612571565b600181901c6355555555169003600281901c6333333333908116911601600481901c630fffffff1601630f0f0f0f1663010101010260181c60ff1690565b60008083601f84011261328a578182fd5b50813567ffffffffffffffff8111156132a1578182fd5b60208301915083602080830285010111156132bb57600080fd5b9250929050565b60008083601f8401126132d3578182fd5b50813567ffffffffffffffff8111156132ea578182fd5b6020830191508360208285010111156132bb57600080fd5b600060208284031215613313578081fd5b81356123ac81613d48565b60008060008060808587031215613333578283fd5b843561333e81613d48565b966020860135965060408601359560600135945092505050565b60008060008060008060008060c0898b031215613373578384fd5b883561337e81613d48565b9750602089013567ffffffffffffffff8082111561339a578586fd5b6133a68c838d01613279565b909950975060408b0135965060608b0135955060808b01359150808211156133cc578485fd5b506133d98b828c01613279565b999c989b50969995989497949560a00135949350505050565b60008060008060808587031215613333578384fd5b60008060008060006060868803121561341e578081fd5b853567ffffffffffffffff80821115613435578283fd5b61344189838a01613279565b9097509550602088013594506040880135915080821115613460578283fd5b5061346d88828901613279565b969995985093965092949392505050565b600080600080600080600060a0888a031215613498578283fd5b873567ffffffffffffffff808211156134af578485fd5b6134bb8b838c01613279565b909950975060208a0135965060408a0135955060608a01359150808211156134e1578485fd5b506134ee8a828b01613279565b989b979a50959894979596608090950135949350505050565b600060208284031215613518578081fd5b5035919050565b600060208284031215613530578081fd5b5051919050565b6000806000806000806000806000806101008b8d031215613556578182fd5b8a35995060208b013567ffffffffffffffff80821115613574578384fd5b6135808e838f01613279565b909b50995060408d0135915080821115613598578384fd5b506135a58d828e01613279565b9b9e9a9d50989b989a9960608a0135996080810135995060a0810135985060c0810135975060e0013595509350505050565b600080602083850312156135e9578182fd5b823567ffffffffffffffff8111156135ff578283fd5b61360b858286016132c2565b90969095509350505050565b60008060008060006060868803121561362e578283fd5b853567ffffffffffffffff80821115613645578485fd5b61344189838a016132c2565b600080600080600080600060a0888a03121561366b578081fd5b873567ffffffffffffffff80821115613682578283fd5b61368e8b838c016132c2565b909950975060208a0135965060408a0135955060608a01359150808211156134e1578283fd5b600080600080606085870312156136c9578182fd5b843567ffffffffffffffff8111156136df578283fd5b6136eb878288016132c2565b90989097506020870135966040013595509350505050565b60007fff000000000000000000000000000000000000000000000000000000000000008516825282846001840137910160010190815292915050565b9283526020830191909152604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b90815260200190565b60006020825282602083015282846040840137818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b6020808252600a908201527f4e4f545f4c4f434b455200000000000000000000000000000000000000000000604082015260600190565b60208082526015908201527f494e53554646494349454e545f524f4c4c4241434b0000000000000000000000604082015260600190565b60208082526011908201527f524f4c4c4241434b5f5245515549524544000000000000000000000000000000604082015260600190565b60208082526010908201527f494e56414c49445f43414c4c4441544100000000000000000000000000000000604082015260600190565b60208082526013908201527f414c52454144595f494e495449414c495a454400000000000000000000000000604082015260600190565b60208082526012908201527f494e434f52524543545f43414c4c444154410000000000000000000000000000604082015260600190565b6020808252600d908201527f494e56414c49445f50524f4f4600000000000000000000000000000000000000604082015260600190565b60208082526010908201527f56414c49445f5452414e534954494f4e00000000000000000000000000000000604082015260600190565b6020808252600c908201527f494e56414c49445f545245450000000000000000000000000000000000000000604082015260600190565b6020808252600d908201527f494e56414c49445f524f4f545300000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f494e56414c49445f53495a450000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f4143434f554e545f554e4c4f434b454400000000000000000000000000000000604082015260600190565b60208082526014908201527f524f4c4c4241434b5f554e4e4543455353415259000000000000000000000000604082015260600190565b60208082526015908201527f494e53554646494349454e545f43414c4c444154410000000000000000000000604082015260600190565b60208082526011908201527f524f4c4c4241434b5f544f4f5f44454550000000000000000000000000000000604082015260600190565b60208082526014908201527f554e45585045435445445f554e444552464c4f57000000000000000000000000604082015260600190565b60208082526013908201527f494e53554646494349454e545f57494e444f5700000000000000000000000000604082015260600190565b60208082526010908201527f494e56414c49445f524f4c4c4241434b00000000000000000000000000000000604082015260600190565b6020808252600e908201527f4143434f554e545f4c4f434b4544000000000000000000000000000000000000604082015260600190565b60208082526011908201527f494e53554646494349454e545f54494d45000000000000000000000000000000604082015260600190565b60208082526014908201527f43414c4c45525f555345525f4d49534d41544348000000000000000000000000604082015260600190565b6020808252600c908201527f494e56414c49445f424f4e440000000000000000000000000000000000000000604082015260600190565b60208082526011908201527f494e53554646494349454e545f424f4e44000000000000000000000000000000604082015260600190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613cf1578283fd5b83018035915067ffffffffffffffff821115613d0b578283fd5b6020019150368190038213156132bb57600080fd5b60008085851115613d2f578182fd5b83861115613d3b578182fd5b5050820193919092039150565b73ffffffffffffffffffffffffffffffffffffffff811681146105c457600080fdfea2646970667358221220ee8dcc6ce26db0f4c4d7e1604a521a2687d729eb06434c49dd688aafb09a77f564736f6c63430007030033",
  "deployedBytecode": "0x60806040526004361061018f5760003560e01c80637ad246f8116100d6578063bb6ae2cb1161007f578063e4da61ab11610059578063e4da61ab146103e5578063e6a6479914610405578063f435f5a714610425576101a0565b8063bb6ae2cb1461039f578063c45481bb146103b2578063e1124200146103d2576101a0565b8063a68f5913116100b0578063a68f59131461034a578063af7b5a411461036a578063b20554001461038a576101a0565b80637ad246f81461031a5780638129fc1c146103225780638ee16d131461032a576101a0565b80632c8e7a211161013857806351cff8d91161011257806351cff8d9146102ba5780636a8dddef146102da5780637a9f05b5146102fa576101a0565b80632c8e7a2114610263578063480bb7c4146102905780634de94320146102a5576101a0565b8063247ce85b11610169578063247ce85b1461020757806327e235e31461021a5780632a41545414610250576101a0565b806308542bb1146101a55780631646d051146101c7578063177f15c5146101e7576101a0565b366101a05761019d33610438565b50005b600080fd5b3480156101b157600080fd5b506101c56101c0366004613407565b610542565b005b3480156101d357600080fd5b506101c56101e2366004613651565b61055a565b3480156101f357600080fd5b506101c5610202366004613617565b610573565b6101c5610215366004613302565b610584565b34801561022657600080fd5b5061023a610235366004613302565b6105c7565b6040516102479190613776565b60405180910390f35b6101c561025e3660046136b4565b6105d9565b34801561026f57600080fd5b5061028361027e366004613302565b610691565b6040516102479190613755565b34801561029c57600080fd5b5061023a6106b9565b3480156102b157600080fd5b506102836106dd565b3480156102c657600080fd5b506101c56102d5366004613302565b610701565b3480156102e657600080fd5b506101c56102f536600461347e565b61083e565b34801561030657600080fd5b5061023a610315366004613302565b61084e565b6101c5610860565b6101c561094a565b34801561033657600080fd5b506101c56103453660046133f2565b610aec565b34801561035657600080fd5b506101c5610365366004613358565b610e58565b34801561037657600080fd5b5061023a610385366004613302565b61124f565b34801561039657600080fd5b5061023a611261565b6101c56103ad3660046135d7565b611285565b3480156103be57600080fd5b5061023a6103cd366004613302565b611297565b6101c56103e0366004613537565b6112a9565b3480156103f157600080fd5b506101c5610400366004613302565b611629565b34801561041157600080fd5b506101c561042036600461331e565b6116ea565b6101c5610433366004613302565b6118fb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120547f0000000000000000000000000000000000000000000000000000000000000000141561048c57503461053d565b7f00000000000000000000000000000000000000000000000000000000000000003410156104ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c86565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090207f00000000000000000000000000000000000000000000000000000000000000009081905534035b919050565b610553338686866000878782611ad4565b5050505050565b61056a3388888888888888611d08565b50505050505050565b610553338686866000878782611d08565b61058d81610438565b156105c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c4f565b50565b60016020526000908152604090205481565b3360008181526004602052604090205415610620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e69061383a565b81427f000000000000000000000000000000000000000000000000000000000000000082011061067c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613be1565b6106893387878787611ec2565b505050505050565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff161561075e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b33600081815260208181526040808320546001909252822054901515918261078657816107aa565b7f000000000000000000000000000000000000000000000000000000000000000082035b9050818111156107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613b05565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082208486039055519188169183156108fc0291849190818181858888f1935050505015801561056a573d6000803e3d6000fd5b61056a3388888888888888611ad4565b60036020526000908152604090205481565b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff166108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613a29565b336108c681610438565b156108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c4f565b73ffffffffffffffffffffffffffffffffffffffff16600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550565b3360008181526020819052604090205415610991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906138a8565b33600061099d82610438565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637ed3068983856040518363ffffffff1660e01b81526004016109fb9190613755565b6020604051808303818588803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a4d919061351f565b604051909150610a66906000908390829060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff87166000818152928390529282205583927f0f5025cc4f20aa47a346d1b7d9da6ba8c68cc8e83b75e813da4b4490d55365ae9190a350505050565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260026020526040902054859116610b4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613a29565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260409020548590427f00000000000000000000000000000000000000000000000000000000000000009091011115610bd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613b3c565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902054869015610c30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e69061383a565b73ffffffffffffffffffffffffffffffffffffffff871660009081526020818152604091829020549151610c6a9188918a9189910161373f565b6040516020818303038152906040528051906020012014610cb7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b73ffffffffffffffffffffffffffffffffffffffff808816600081815260026020818152604080842080547fffffffffffffffffffffffff000000000000000000000000000000000000000080821690925560038085528387208790559716808652938352818520805490911690559481528483208390556001905283822080549083905592825292902080548201905585610db05760008273ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fd896484469c47833eb445d62b95b9dd6b28d0c050a9b7f2ce8902d137316500e60405160405180910390a4505061056a565b604051610dc59088908a90429060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff808e1660008181529384905293832091909155429390861692917fd896484469c47833eb445d62b95b9dd6b28d0c050a9b7f2ce8902d137316500e91a4505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff808916600090815260026020526040902054899116610eb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613a29565b73ffffffffffffffffffffffffffffffffffffffff8981166000908152600260205260409020543391168114610f1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906137cc565b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526020818152604091829020549151610f549189918b9188910161373f565b6040516020818303038152906040528051906020012014610fa1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b610fae868a8a88886121b3565b610fe4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613871565b6060610ff28a8a88886121eb565b905060008160008151811061100357fe5b602002602001015190508a8a9050600114156110d0578686600081811061102657fe5b9050602002013560001c816001011461106b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906138df565b6110948c8c8c600081811061107c57fe5b905060200281019061108e9190613cbd565b8c61223d565b156110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e69061394d565b611177565b816001815181106110dd57fe5b602002602001015181600101146110f357600080fd5b8a8a600181811061110057fe5b90506020028101906111129190613cbd565b611120916024908290613d20565b81019061112d9190613507565b98506111408c8c8c600081811061107c57fe5b15611177576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e69061394d565b73ffffffffffffffffffffffffffffffffffffffff808d166000818152600160209081526040808320805490849055948816808452818420805487019055600280845282852080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556003808652848720879055878752600486528487208a905591855283862080549091168717905590925280832083905551939850849390917f55469cdf3fd81a478fed2a1491832e3d145bf2ab3c6a6fbb187022b3885b90fd91a4505050505050505050505050565b60006020819052908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b611293338383600080611ec2565b5050565b60046020526000908152604090205481565b33600081815260046020526040902054806112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613a60565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260409182902054915161132a918891889188910161373f565b6040516020818303038152906040528051906020012014611377576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b611382858888612382565b6113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139f2565b6000898960008181106113c757fe5b9050602002013560001c905087811061140c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613803565b81811015611446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613ace565b856114548e8e8e8e8e6123b3565b1461148b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613b73565b8b8b600081811061149857fe5b90506020028101906114aa9190613cbd565b6114b8916024908290613d20565b8101906114c59190613507565b6040519095506114dd908e908790429060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012073ffffffffffffffffffffffffffffffffffffffff8616600090815292839052912055808214156115955773ffffffffffffffffffffffffffffffffffffffff8316600090815260026020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560049091528120555b61159e83610438565b156115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c4f565b42818473ffffffffffffffffffffffffffffffffffffffff167f4d7ed8c49e6b03daee23a18f4bd14bd7e4628e5ed54c57bf84407a693867eca960405160405180910390a450505050505050505050505050565b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611686576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b3360008181526001602090815260408083208054908490559183905280832083905551909173ffffffffffffffffffffffffffffffffffffffff86169183156108fc0291849190818181858888f19350505050158015610553573d6000803e3d6000fd5b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611747576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b81427f00000000000000000000000000000000000000000000000000000000000000008201106117a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613be1565b33600081815260208181526040918290205491516117c7918991899189910161373f565b6040516020818303038152906040528051906020012014611814576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b60405161182a906000908790829060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff8086166000818152808552858120939093556002845284832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055600190925291822080549083905592908a169183156108fc02918491818181858888f193505050501580156118f0573d6000803e3d6000fd5b505050505050505050565b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611958576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260026020526040902054839116156119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602081815260408084208054337fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255600380855283872042908190558388529585528387208054909216831790915590925290922055611a3d81610438565b15611a74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c4f565b8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8773bde6581ad6ddd421210de867340039fb65ce3df41edba7b5de6d24ae7a5160405160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff80891660009081526002602052604090205489911615611b35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b878760018111611b71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613a97565b60008a8a6000818110611b8057fe5b9050602002810190611b929190613cbd565b611ba0916024908290613d20565b810190611bad9190613507565b73ffffffffffffffffffffffffffffffffffffffff8d16600090815260208181526040918290205491519293509091611bec918b9185918a910161373f565b6040516020818303038152906040528051906020012014611c39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b611c46888c8c8a8a6123b3565b604051909150611c5e9082908b90429060200161373f565b604051602081830303815290604052805190602001206000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550428c73ffffffffffffffffffffffffffffffffffffffff167f0b87b136840d19f5f25329273082c00833265a189b70137e06df6315ddc7839e60405160405180910390a3505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff80891660009081526002602052604090205489911615611d69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b6000611d78886024818c613d20565b810190611d859190613507565b73ffffffffffffffffffffffffffffffffffffffff8b16600090815260208181526040918290205491519293509091611dc4918991859188910161373f565b6040516020818303038152906040528051906020012014611e11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b611e1e868a8a8888612490565b604051909150611e369082908990429060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff8e166000818152928390529282205542927f4779c4b07abff82b16061ec9a47d081e7f4981c29088395cdb7ff87e322cbbc69190a350505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526002602052604090205486911615611f23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613baa565b611f308460048188613d20565b810190611f3d9190613302565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614611fa1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613c18565b6000611fb08560248189613d20565b810190611fbd9190613507565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260208181526040918290205491519293509091611ffc918791859188910161373f565b6040516020818303038152906040528051906020012014612049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e6906139bb565b6040517f8517c18700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690638517c1879034906120bf908a908a9060040161377f565b6020604051808303818588803b1580156120d857600080fd5b505af11580156120ec573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612111919061351f565b60405190915061212a906000908390829060200161373f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff8b166000818152928390529282205583927f0f5025cc4f20aa47a346d1b7d9da6ba8c68cc8e83b75e813da4b4490d55365ae9190a350505050505050565b6000856121de848460008181106121c657fe5b905060200201356121d98888888861255b565b612571565b1490505b95945050505050565b606061223284848460018181106121fe57fe5b905060200201358585600281811061221257fe5b905060200201358686600381811061222657fe5b90506020020135612580565b90505b949350505050565b600061224c8360048187613d20565b8101906122599190613302565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461229357506000612235565b6040517f8821e2b100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690638821e2b190612307908790879060040161377f565b60206040518083038186803b15801561231f57600080fd5b505afa92505050801561236d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261236a9181019061351f565b60015b61237957506000612235565b82149050612235565b600083158015612390575082155b1561239d575060016123ac565b836123a88484612571565b1490505b9392505050565b600080838360008181106123c357fe5b60200291909101359150508615811514612409576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613984565b866124245761241c856121d988826128a0565b9150506121e2565b6000612432878787876128b4565b93509050876124418383612571565b14612478576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613916565b61248482870184612571565b98975050505050505050565b600080838360008181106124a057fe5b602002919091013591505086158115146124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613984565b866124fa5761241c60016121d988886128d8565b60006125088787878761290e565b93509050876125178383612571565b1461254e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e690613916565b6124846001830184612571565b600061223261256a868661294d565b8484612a57565b60009182526020526040902090565b60608467ffffffffffffffff8111801561259957600080fd5b506040519080825280602002602001820160405280156125c3578160200160208202803683370190505b50905060608567ffffffffffffffff811180156125df57600080fd5b50604051908082528060200260200182016040528015612609578160200160208202803683370190505b50905060608667ffffffffffffffff8111801561262557600080fd5b5060405190808252806020026020018201604052801561264f578160200160208202803683370190505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90970196905086600160008080805b848c169350848b169250848a16915087868151811061269b57fe5b60200260200101516001901b90508483141561274257848414156126c6575050505050505050612235565b8786815181106126d257fe5b6020908102919091010180516001019052856126f0578c9550612736565b86517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8701968891811061272057fe5b602002602001015161273157612736565b6126c6565b600185901b9450612680565b84841415612809575b84821415612773578089878151811061276057fe5b6020026020010181815117915081815250505b87868151811061277f57fe5b60209081029190910101805160010190528561279d578c9550612809565b8686815181106127a957fe5b60200260200101516127df576001878780600190039850815181106127ca57fe5b91151560209283029190910190910152612809565b6001878780600190039850815181106127f457fe5b9115156020928302919091019091015261274b565b848214612830578089878151811061281d57fe5b6020026020010181815117915081815250505b87868151811061283c57fe5b60209081029190910101805160010190528561285a578c9550612736565b86517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8701968891811061288a57fe5b602002602001015161289b57612736565b612809565b60006123ac6128af8484612bc3565b612d7e565b6000806128cb6128c48787612e90565b8585612f6c565b9150915094509492505050565b6040516000906128f090829085908590602001613703565b60405160208183030381529060405280519060200120905092915050565b600080600060f81b868660405160200161292a93929190613703565b6040516020818303038152906040528051906020012091506128cb828585613167565b6060818067ffffffffffffffff8111801561296757600080fd5b50604051908082528060200260200182016040528015612991578160200160208202803683370190505b5091507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160005b82811015612a4e5760008686848181106129d057fe5b90506020028101906129e29190613cbd565b6040516020016129f493929190613703565b60405160208183030381529060405280519060200120848281518110612a1657fe5b60209081029190910101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906001016129ba565b50505092915050565b825160009081806004600182888883818110612a6f57fe5b905060200201359050600089896002818110612a8757fe5b90506020020135905060008a8a6003818110612a9f57fe5b9050602002013590505b838483161415612b4657838484161415612af0578b60018715612acc5787612ace565b895b0381518110612ad957fe5b6020026020010151985050505050505050506123ac565b8b8781518110612afc57fe5b60200260200101518c8781518110612b1057fe5b602002602001018181525050878760010181612b2857fe5b069650878660010181612b3757fe5b069550600184901b9350612aa9565b8384841614612b6d578a8a86806001019750818110612b6157fe5b90506020020135612b87565b8b5160018801978d918110612b7e57fe5b60200260200101515b9850878781612b9257fe5b069650612bb78c8881518110612ba457fe5b60200260200101518a868785161461321b565b8c8781518110612b1057fe5b606081600181811c908216018067ffffffffffffffff81118015612be657600080fd5b50604051908082528060200260200182016040528015612c10578160200160208202803683370190505b5092506000805b82821015612d745750600181901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8401811415612cb4576000878783818110612c5d57fe5b9050602002810190612c6f9190613cbd565b604051602001612c8193929190613703565b60405160208183030381529060405280519060200120858381518110612ca357fe5b602002602001018181525050612d74565b612d526000888884818110612cc557fe5b9050602002810190612cd79190613cbd565b604051602001612ce993929190613703565b60405160208183030381529060405280519060200120600060f81b898985600101818110612d1357fe5b9050602002810190612d259190613cbd565b604051602001612d3793929190613703565b60405160208183030381529060405280519060200120612571565b8551600184019387918110612d6357fe5b602002602001018181525050612c17565b5050505092915050565b805160009081805b6001831115612e715750600181901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301811415612e0057848181518110612dcb57fe5b6020026020010151858381518110612ddf57fe5b6020026020010181815250506000915082600116600184901c019250612d86565b828110612e1c576000915082600116600184901c019250612d86565b612e4f858281518110612e2b57fe5b6020026020010151868360010181518110612e4257fe5b6020026020010151612571565b8551600184019387918110612e6057fe5b602002602001018181525050612d86565b84600081518110612e7e57fe5b60200260200101519350505050919050565b6060818067ffffffffffffffff81118015612eaa57600080fd5b50604051908082528060200260200182016040528015612ed4578160200160208202803683370190505b5091505b8015612f65577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016000848483818110612f0e57fe5b9050602002810190612f209190613cbd565b604051602001612f3293929190613703565b60405160208183030381529060405280519060200120828281518110612f5457fe5b602002602001018181525050612ed8565b5092915050565b8251600090819081808087878281612f8057fe5b60200291909101359485017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019491508190506000612fbe8261323b565b63ffffffff169050898982818110612fd257fe5b9050602002013597505b851561313f5784158015612ff35750816001166001145b1561308d5761301a8a8a8381811061300757fe5b905060200201358c8681518110612e4257fe5b8b60008151811061302757fe5b6020908102919091010152600193909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180156130805761307d8a8a8381811061307057fe5b9050602002013589612571565b97505b60019450908401906130e8565b858210156130e8576130be8b85806001019650815181106130aa57fe5b60200260200101518c8681518110612e4257fe5b8b5160018701968d9181106130cf57fe5b6020026020010181815250506001840193506002820191505b85821061313a5785821415613124578a848151811061310357fe5b60200260200101518b868151811061311757fe5b6020026020010181815250505b600195861c95600095508594509290921c918291505b612fdc565b878b60008151811061314d57fe5b602002602001015197509750505050505050935093915050565b600080600061318b8585600081811061317c57fe5b9050602002013560001c61323b565b63ffffffff16905084848281811061319f57fe5b9050602002013592506131b28387612571565b95505b6001811115613212577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018484828181106131ec57fe5b9050602002013591506131ff8287612571565b955061320b8284612571565b92506131b5565b50909492505050565b6000816132315761322c8385612571565b612235565b6122358484612571565b600181901c6355555555169003600281901c6333333333908116911601600481901c630fffffff1601630f0f0f0f1663010101010260181c60ff1690565b60008083601f84011261328a578182fd5b50813567ffffffffffffffff8111156132a1578182fd5b60208301915083602080830285010111156132bb57600080fd5b9250929050565b60008083601f8401126132d3578182fd5b50813567ffffffffffffffff8111156132ea578182fd5b6020830191508360208285010111156132bb57600080fd5b600060208284031215613313578081fd5b81356123ac81613d48565b60008060008060808587031215613333578283fd5b843561333e81613d48565b966020860135965060408601359560600135945092505050565b60008060008060008060008060c0898b031215613373578384fd5b883561337e81613d48565b9750602089013567ffffffffffffffff8082111561339a578586fd5b6133a68c838d01613279565b909950975060408b0135965060608b0135955060808b01359150808211156133cc578485fd5b506133d98b828c01613279565b999c989b50969995989497949560a00135949350505050565b60008060008060808587031215613333578384fd5b60008060008060006060868803121561341e578081fd5b853567ffffffffffffffff80821115613435578283fd5b61344189838a01613279565b9097509550602088013594506040880135915080821115613460578283fd5b5061346d88828901613279565b969995985093965092949392505050565b600080600080600080600060a0888a031215613498578283fd5b873567ffffffffffffffff808211156134af578485fd5b6134bb8b838c01613279565b909950975060208a0135965060408a0135955060608a01359150808211156134e1578485fd5b506134ee8a828b01613279565b989b979a50959894979596608090950135949350505050565b600060208284031215613518578081fd5b5035919050565b600060208284031215613530578081fd5b5051919050565b6000806000806000806000806000806101008b8d031215613556578182fd5b8a35995060208b013567ffffffffffffffff80821115613574578384fd5b6135808e838f01613279565b909b50995060408d0135915080821115613598578384fd5b506135a58d828e01613279565b9b9e9a9d50989b989a9960608a0135996080810135995060a0810135985060c0810135975060e0013595509350505050565b600080602083850312156135e9578182fd5b823567ffffffffffffffff8111156135ff578283fd5b61360b858286016132c2565b90969095509350505050565b60008060008060006060868803121561362e578283fd5b853567ffffffffffffffff80821115613645578485fd5b61344189838a016132c2565b600080600080600080600060a0888a03121561366b578081fd5b873567ffffffffffffffff80821115613682578283fd5b61368e8b838c016132c2565b909950975060208a0135965060408a0135955060608a01359150808211156134e1578283fd5b600080600080606085870312156136c9578182fd5b843567ffffffffffffffff8111156136df578283fd5b6136eb878288016132c2565b90989097506020870135966040013595509350505050565b60007fff000000000000000000000000000000000000000000000000000000000000008516825282846001840137910160010190815292915050565b9283526020830191909152604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b90815260200190565b60006020825282602083015282846040840137818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b6020808252600a908201527f4e4f545f4c4f434b455200000000000000000000000000000000000000000000604082015260600190565b60208082526015908201527f494e53554646494349454e545f524f4c4c4241434b0000000000000000000000604082015260600190565b60208082526011908201527f524f4c4c4241434b5f5245515549524544000000000000000000000000000000604082015260600190565b60208082526010908201527f494e56414c49445f43414c4c4441544100000000000000000000000000000000604082015260600190565b60208082526013908201527f414c52454144595f494e495449414c495a454400000000000000000000000000604082015260600190565b60208082526012908201527f494e434f52524543545f43414c4c444154410000000000000000000000000000604082015260600190565b6020808252600d908201527f494e56414c49445f50524f4f4600000000000000000000000000000000000000604082015260600190565b60208082526010908201527f56414c49445f5452414e534954494f4e00000000000000000000000000000000604082015260600190565b6020808252600c908201527f494e56414c49445f545245450000000000000000000000000000000000000000604082015260600190565b6020808252600d908201527f494e56414c49445f524f4f545300000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f494e56414c49445f53495a450000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f4143434f554e545f554e4c4f434b454400000000000000000000000000000000604082015260600190565b60208082526014908201527f524f4c4c4241434b5f554e4e4543455353415259000000000000000000000000604082015260600190565b60208082526015908201527f494e53554646494349454e545f43414c4c444154410000000000000000000000604082015260600190565b60208082526011908201527f524f4c4c4241434b5f544f4f5f44454550000000000000000000000000000000604082015260600190565b60208082526014908201527f554e45585045435445445f554e444552464c4f57000000000000000000000000604082015260600190565b60208082526013908201527f494e53554646494349454e545f57494e444f5700000000000000000000000000604082015260600190565b60208082526010908201527f494e56414c49445f524f4c4c4241434b00000000000000000000000000000000604082015260600190565b6020808252600e908201527f4143434f554e545f4c4f434b4544000000000000000000000000000000000000604082015260600190565b60208082526011908201527f494e53554646494349454e545f54494d45000000000000000000000000000000604082015260600190565b60208082526014908201527f43414c4c45525f555345525f4d49534d41544348000000000000000000000000604082015260600190565b6020808252600c908201527f494e56414c49445f424f4e440000000000000000000000000000000000000000604082015260600190565b60208082526011908201527f494e53554646494349454e545f424f4e44000000000000000000000000000000604082015260600190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613cf1578283fd5b83018035915067ffffffffffffffff821115613d0b578283fd5b6020019150368190038213156132bb57600080fd5b60008085851115613d2f578182fd5b83861115613d3b578182fd5b5050820193919092039150565b73ffffffffffffffffffffffffffffffffffffffff811681146105c457600080fdfea2646970667358221220ee8dcc6ce26db0f4c4d7e1604a521a2687d729eb06434c49dd688aafb09a77f564736f6c63430007030033",
  "immutableReferences": {
    "116": [
      {
        "length": 32,
        "start": 1759
      },
      {
        "length": 32,
        "start": 2467
      },
      {
        "length": 32,
        "start": 8326
      },
      {
        "length": 32,
        "start": 8912
      }
    ],
    "118": [
      {
        "length": 32,
        "start": 1572
      },
      {
        "length": 32,
        "start": 1723
      },
      {
        "length": 32,
        "start": 2935
      },
      {
        "length": 32,
        "start": 5963
      }
    ],
    "120": [
      {
        "length": 32,
        "start": 1120
      },
      {
        "length": 32,
        "start": 1166
      },
      {
        "length": 32,
        "start": 1303
      },
      {
        "length": 32,
        "start": 1928
      },
      {
        "length": 32,
        "start": 4707
      }
    ]
  },
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:448:5",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:5",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "129:317:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "175:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "184:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "192:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "177:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "177:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "177:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "150:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "159:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "146:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "146:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "171:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "142:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "142:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "139:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "210:29:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "229:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "223:5:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "223:16:5"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "214:5:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "302:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "311:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "319:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "304:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "304:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "304:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "261:5:5"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "272:5:5"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "287:3:5",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "292:1:5",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "283:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "283:11:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "296:1:5",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "279:3:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "279:19:5"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "268:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "268:31:5"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "258:2:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "258:42:5"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "251:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "251:50:5"
                  },
                  "nodeType": "YulIf",
                  "src": "248:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "337:15:5",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "347:5:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "337:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "361:35:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "381:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "392:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "377:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "377:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "371:5:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "371:25:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "361:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "405:35:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "425:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "436:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "421:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "421:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "415:5:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "415:25:5"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "405:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "79:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "90:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "102:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "110:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "118:6:5",
                "type": ""
              }
            ],
            "src": "14:432:5"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_addresst_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value0, value0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(value0, value0) }\n        value0 := value\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n}",
      "id": 5,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:21015:5",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:5",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "104:314:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "153:30:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "arrayPos",
                              "nodeType": "YulIdentifier",
                              "src": "162:8:5"
                            },
                            {
                              "name": "arrayPos",
                              "nodeType": "YulIdentifier",
                              "src": "172:8:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "155:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "155:26:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "155:26:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "132:6:5"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "140:4:5",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "128:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "128:17:5"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "147:3:5"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "124:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "124:27:5"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "117:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "117:35:5"
                  },
                  "nodeType": "YulIf",
                  "src": "114:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "192:30:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "215:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "202:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "202:20:5"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "192:6:5"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "265:30:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "arrayPos",
                              "nodeType": "YulIdentifier",
                              "src": "274:8:5"
                            },
                            {
                              "name": "arrayPos",
                              "nodeType": "YulIdentifier",
                              "src": "284:8:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "267:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "267:26:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "267:26:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "237:6:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "245:18:5",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "234:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "234:30:5"
                  },
                  "nodeType": "YulIf",
                  "src": "231:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "304:29:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "320:6:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "328:4:5",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "316:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "316:17:5"
                  },
                  "variableNames": [
                    {
                      "name": "arrayPos",
                      "nodeType": "YulIdentifier",
                      "src": "304:8:5"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "396:16:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "405:1:5",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "408:1:5",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "398:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "398:12:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "398:12:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "356:6:5"
                              },
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "368:6:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "376:4:5",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "364:3:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "364:17:5"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "352:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "352:30:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "384:4:5",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "348:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "348:41:5"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "391:3:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "345:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "345:50:5"
                  },
                  "nodeType": "YulIf",
                  "src": "342:2:5"
                }
              ]
            },
            "name": "abi_decode_t_array$_t_bytes32_$dyn_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "67:6:5",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "75:3:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "arrayPos",
                "nodeType": "YulTypedName",
                "src": "83:8:5",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "93:6:5",
                "type": ""
              }
            ],
            "src": "14:404:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "497:303:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "546:30:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "arrayPos",
                              "nodeType": "YulIdentifier",
                              "src": "555:8:5"
                            },
                            {
                              "name": "arrayPos",
                              "nodeType": "YulIdentifier",
                              "src": "565:8:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "548:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "548:26:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "548:26:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "525:6:5"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "533:4:5",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "521:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "521:17:5"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "540:3:5"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "517:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "517:27:5"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "510:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "510:35:5"
                  },
                  "nodeType": "YulIf",
                  "src": "507:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "585:30:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "608:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "595:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "595:20:5"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "585:6:5"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "658:30:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "arrayPos",
                              "nodeType": "YulIdentifier",
                              "src": "667:8:5"
                            },
                            {
                              "name": "arrayPos",
                              "nodeType": "YulIdentifier",
                              "src": "677:8:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "660:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "660:26:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "660:26:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "630:6:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "638:18:5",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "627:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "627:30:5"
                  },
                  "nodeType": "YulIf",
                  "src": "624:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "697:29:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "713:6:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "721:4:5",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "709:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "709:17:5"
                  },
                  "variableNames": [
                    {
                      "name": "arrayPos",
                      "nodeType": "YulIdentifier",
                      "src": "697:8:5"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "778:16:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "787:1:5",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "790:1:5",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "780:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "780:12:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "780:12:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "749:6:5"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "757:6:5"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "745:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "745:19:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "766:4:5",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "741:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "741:30:5"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "773:3:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "738:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "738:39:5"
                  },
                  "nodeType": "YulIf",
                  "src": "735:2:5"
                }
              ]
            },
            "name": "abi_decode_t_bytes_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "460:6:5",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "468:3:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "arrayPos",
                "nodeType": "YulTypedName",
                "src": "476:8:5",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "486:6:5",
                "type": ""
              }
            ],
            "src": "423:377:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "875:189:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "921:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "930:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "938:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "923:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "923:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "923:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "896:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "905:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "892:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "892:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "917:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "888:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "888:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "885:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "956:36:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "982:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "969:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "969:23:5"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "960:5:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1028:5:5"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "1001:26:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1001:33:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1001:33:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1043:15:5",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1053:5:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1043:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "841:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "852:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "864:6:5",
                "type": ""
              }
            ],
            "src": "805:259:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1147:189:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1193:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1202:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1210:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1195:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1195:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1195:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1168:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1177:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1164:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1164:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1189:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1160:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1160:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "1157:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1228:36:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1254:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1241:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1241:23:5"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "1232:5:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1300:5:5"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "1273:26:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1273:33:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1273:33:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1315:15:5",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1325:5:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1315:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_payable",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1113:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1124:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1136:6:5",
                "type": ""
              }
            ],
            "src": "1069:267:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1470:343:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1517:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value1",
                              "nodeType": "YulIdentifier",
                              "src": "1526:6:5"
                            },
                            {
                              "name": "value1",
                              "nodeType": "YulIdentifier",
                              "src": "1534:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1519:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1519:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1519:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1491:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1500:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1487:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1487:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1512:3:5",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1483:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1483:33:5"
                  },
                  "nodeType": "YulIf",
                  "src": "1480:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1552:36:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1578:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1565:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1565:23:5"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "1556:5:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1624:5:5"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "1597:26:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1597:33:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1597:33:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1639:15:5",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1649:5:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1639:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1663:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1690:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1701:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1686:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1686:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1673:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1673:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1663:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1714:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1741:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1752:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1737:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1737:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1724:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1724:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "1714:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1765:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1792:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1803:2:5",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1788:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1788:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1775:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1775:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "1765:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_payablet_bytes32t_bytes32t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1412:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1423:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1435:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1443:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "1451:6:5",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "1459:6:5",
                "type": ""
              }
            ],
            "src": "1341:472:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2054:934:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2101:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "2110:6:5"
                            },
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "2118:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2103:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2103:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2103:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2075:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2084:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2071:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2071:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2096:3:5",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2067:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2067:33:5"
                  },
                  "nodeType": "YulIf",
                  "src": "2064:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2136:36:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2162:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2149:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2149:23:5"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "2140:5:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2208:5:5"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "2181:26:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2181:33:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2181:33:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2223:15:5",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "2233:5:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2223:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2247:46:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2278:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2289:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2274:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2274:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2261:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2261:32:5"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "2251:6:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2302:28:5",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "2312:18:5",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "2306:2:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2357:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "2366:6:5"
                            },
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "2374:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2359:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2359:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2359:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2345:6:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "2353:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2342:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2342:14:5"
                  },
                  "nodeType": "YulIf",
                  "src": "2339:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2392:102:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2466:9:5"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "2477:6:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2462:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2462:22:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "2486:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_array$_t_bytes32_$dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "2418:43:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2418:76:5"
                  },
                  "variables": [
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "2396:8:5",
                      "type": ""
                    },
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "2406:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2503:18:5",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "2513:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2503:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2530:18:5",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "2540:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "2530:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2557:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2584:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2595:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2580:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2580:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2567:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2567:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "2557:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2608:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2635:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2646:2:5",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2631:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2631:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2618:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2618:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "2608:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2659:49:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2692:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2703:3:5",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2688:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2688:19:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2675:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2675:33:5"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "2663:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2737:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value5",
                              "nodeType": "YulIdentifier",
                              "src": "2746:6:5"
                            },
                            {
                              "name": "value5",
                              "nodeType": "YulIdentifier",
                              "src": "2754:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2739:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2739:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2739:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "2723:8:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "2733:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2720:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2720:16:5"
                  },
                  "nodeType": "YulIf",
                  "src": "2717:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2772:104:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2846:9:5"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "2857:8:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2842:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2842:24:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "2868:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_array$_t_bytes32_$dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "2798:43:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2798:78:5"
                  },
                  "variables": [
                    {
                      "name": "value5_1",
                      "nodeType": "YulTypedName",
                      "src": "2776:8:5",
                      "type": ""
                    },
                    {
                      "name": "value6_1",
                      "nodeType": "YulTypedName",
                      "src": "2786:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2885:18:5",
                  "value": {
                    "name": "value5_1",
                    "nodeType": "YulIdentifier",
                    "src": "2895:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "2885:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2912:18:5",
                  "value": {
                    "name": "value6_1",
                    "nodeType": "YulIdentifier",
                    "src": "2922:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value6",
                      "nodeType": "YulIdentifier",
                      "src": "2912:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2939:43:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2966:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2977:3:5",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2962:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2962:19:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2949:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2949:33:5"
                  },
                  "variableNames": [
                    {
                      "name": "value7",
                      "nodeType": "YulIdentifier",
                      "src": "2939:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_array$_t_bytes_calldata_ptr_$dyn_calldata_ptrt_bytes32t_bytes32t_array$_t_bytes32_$dyn_calldata_ptrt_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1964:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1975:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1987:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1995:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2003:6:5",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2011:6:5",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "2019:6:5",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "2027:6:5",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "2035:6:5",
                "type": ""
              },
              {
                "name": "value7",
                "nodeType": "YulTypedName",
                "src": "2043:6:5",
                "type": ""
              }
            ],
            "src": "1818:1170:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3114:343:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3161:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "3170:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "3178:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3163:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3163:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3163:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3135:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3144:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3131:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3131:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3156:3:5",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3127:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3127:33:5"
                  },
                  "nodeType": "YulIf",
                  "src": "3124:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3196:36:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3222:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3209:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3209:23:5"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3200:5:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3268:5:5"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "3241:26:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3241:33:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3241:33:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3283:15:5",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3293:5:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3283:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3307:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3334:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3345:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3330:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3330:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3317:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3317:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3307:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3358:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3385:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3396:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3381:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3381:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3368:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3368:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "3358:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3409:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3436:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3447:2:5",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3432:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3432:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3419:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3419:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "3409:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_bytes32t_bytes32t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3056:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3067:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3079:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3087:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3095:6:5",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "3103:6:5",
                "type": ""
              }
            ],
            "src": "2993:464:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3647:709:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3693:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "3702:6:5"
                            },
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "3710:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3695:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3695:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3695:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3668:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3677:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3664:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3664:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3689:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3660:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3660:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "3657:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3728:37:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3755:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3742:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3742:23:5"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "3732:6:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3774:28:5",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "3784:18:5",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "3778:2:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3829:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "3838:6:5"
                            },
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "3846:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3831:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3831:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3831:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3817:6:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "3825:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3814:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3814:14:5"
                  },
                  "nodeType": "YulIf",
                  "src": "3811:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3864:102:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3938:9:5"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "3949:6:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3934:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3934:22:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "3958:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_array$_t_bytes32_$dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "3890:43:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3890:76:5"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "3868:8:5",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "3878:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3975:18:5",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "3985:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3975:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4002:18:5",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "4012:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4002:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4029:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4056:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4067:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4052:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4052:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4039:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4039:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "4029:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4080:48:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4113:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4124:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4109:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4109:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4096:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4096:32:5"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "4084:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4157:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "4166:6:5"
                            },
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "4174:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4159:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4159:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4159:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "4143:8:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "4153:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4140:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4140:16:5"
                  },
                  "nodeType": "YulIf",
                  "src": "4137:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4192:104:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4266:9:5"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "4277:8:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4262:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4262:24:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4288:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_array$_t_bytes32_$dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "4218:43:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4218:78:5"
                  },
                  "variables": [
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "4196:8:5",
                      "type": ""
                    },
                    {
                      "name": "value4_1",
                      "nodeType": "YulTypedName",
                      "src": "4206:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4305:18:5",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "4315:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "4305:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4332:18:5",
                  "value": {
                    "name": "value4_1",
                    "nodeType": "YulIdentifier",
                    "src": "4342:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "4332:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$dyn_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3581:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3592:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3604:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3612:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3620:6:5",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "3628:6:5",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "3636:6:5",
                "type": ""
              }
            ],
            "src": "3462:894:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4580:813:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4627:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "4636:6:5"
                            },
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "4644:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4629:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4629:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4629:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4601:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4610:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4597:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4597:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4622:3:5",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4593:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4593:33:5"
                  },
                  "nodeType": "YulIf",
                  "src": "4590:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4662:37:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4689:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4676:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4676:23:5"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "4666:6:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4708:28:5",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "4718:18:5",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "4712:2:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4763:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "4772:6:5"
                            },
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "4780:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4765:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4765:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4765:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "4751:6:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "4759:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4748:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4748:14:5"
                  },
                  "nodeType": "YulIf",
                  "src": "4745:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4798:102:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4872:9:5"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4883:6:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4868:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4868:22:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4892:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_array$_t_bytes32_$dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "4824:43:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4824:76:5"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "4802:8:5",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "4812:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4909:18:5",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "4919:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4909:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4936:18:5",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "4946:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4936:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4963:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4990:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5001:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4986:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4986:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4973:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4973:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "4963:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5014:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5041:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5052:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5037:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5037:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5024:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5024:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "5014:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5065:48:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5098:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5109:2:5",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5094:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5094:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5081:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5081:32:5"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "5069:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5142:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "5151:6:5"
                            },
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "5159:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5144:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5144:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5144:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "5128:8:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "5138:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5125:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5125:16:5"
                  },
                  "nodeType": "YulIf",
                  "src": "5122:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5177:104:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5251:9:5"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "5262:8:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5247:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5247:24:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5273:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_array$_t_bytes32_$dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "5203:43:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5203:78:5"
                  },
                  "variables": [
                    {
                      "name": "value4_1",
                      "nodeType": "YulTypedName",
                      "src": "5181:8:5",
                      "type": ""
                    },
                    {
                      "name": "value5_1",
                      "nodeType": "YulTypedName",
                      "src": "5191:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5290:18:5",
                  "value": {
                    "name": "value4_1",
                    "nodeType": "YulIdentifier",
                    "src": "5300:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "5290:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5317:18:5",
                  "value": {
                    "name": "value5_1",
                    "nodeType": "YulIdentifier",
                    "src": "5327:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "5317:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5344:43:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5371:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5382:3:5",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5367:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5367:19:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5354:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5354:33:5"
                  },
                  "variableNames": [
                    {
                      "name": "value6",
                      "nodeType": "YulIdentifier",
                      "src": "5344:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptrt_bytes32t_bytes32t_array$_t_bytes32_$dyn_calldata_ptrt_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4498:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4509:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4521:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4529:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4537:6:5",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "4545:6:5",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "4553:6:5",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "4561:6:5",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "4569:6:5",
                "type": ""
              }
            ],
            "src": "4361:1032:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5468:120:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5514:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "5523:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "5531:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5516:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5516:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5516:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5489:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5498:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5485:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5485:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5510:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5481:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5481:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "5478:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5549:33:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5572:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5559:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5559:23:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5549:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5434:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5445:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5457:6:5",
                "type": ""
              }
            ],
            "src": "5398:190:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5674:113:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5720:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "5729:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "5737:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5722:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5722:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5722:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5695:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5704:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5691:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5691:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5716:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5687:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5687:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "5684:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5755:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5771:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5765:5:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5765:16:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5755:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5640:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5651:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5663:6:5",
                "type": ""
              }
            ],
            "src": "5593:194:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6062:969:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6109:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value8",
                              "nodeType": "YulIdentifier",
                              "src": "6118:6:5"
                            },
                            {
                              "name": "value8",
                              "nodeType": "YulIdentifier",
                              "src": "6126:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6111:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6111:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6111:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6083:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6092:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6079:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6079:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6104:3:5",
                        "type": "",
                        "value": "256"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6075:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6075:33:5"
                  },
                  "nodeType": "YulIf",
                  "src": "6072:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6144:33:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6167:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6154:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6154:23:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6144:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6186:46:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6217:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6228:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6213:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6213:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6200:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6200:32:5"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "6190:6:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6241:28:5",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "6251:18:5",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6245:2:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6296:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value8",
                              "nodeType": "YulIdentifier",
                              "src": "6305:6:5"
                            },
                            {
                              "name": "value8",
                              "nodeType": "YulIdentifier",
                              "src": "6313:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6298:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6298:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6298:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "6284:6:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6292:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6281:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6281:14:5"
                  },
                  "nodeType": "YulIf",
                  "src": "6278:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6331:102:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6405:9:5"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "6416:6:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6401:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6401:22:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6425:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_array$_t_bytes32_$dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "6357:43:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6357:76:5"
                  },
                  "variables": [
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "6335:8:5",
                      "type": ""
                    },
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "6345:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6442:18:5",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "6452:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "6442:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6469:18:5",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "6479:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "6469:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6496:48:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6529:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6540:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6525:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6525:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6512:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6512:32:5"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "6500:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6573:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value8",
                              "nodeType": "YulIdentifier",
                              "src": "6582:6:5"
                            },
                            {
                              "name": "value8",
                              "nodeType": "YulIdentifier",
                              "src": "6590:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6575:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6575:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6575:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "6559:8:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6569:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6556:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6556:16:5"
                  },
                  "nodeType": "YulIf",
                  "src": "6553:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6608:104:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6682:9:5"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "6693:8:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6678:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6678:24:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6704:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_array$_t_bytes32_$dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "6634:43:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6634:78:5"
                  },
                  "variables": [
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "6612:8:5",
                      "type": ""
                    },
                    {
                      "name": "value4_1",
                      "nodeType": "YulTypedName",
                      "src": "6622:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6721:18:5",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "6731:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "6721:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6748:18:5",
                  "value": {
                    "name": "value4_1",
                    "nodeType": "YulIdentifier",
                    "src": "6758:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "6748:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6775:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6802:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6813:2:5",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6798:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6798:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6785:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6785:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "6775:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6826:43:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6853:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6864:3:5",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6849:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6849:19:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6836:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6836:33:5"
                  },
                  "variableNames": [
                    {
                      "name": "value6",
                      "nodeType": "YulIdentifier",
                      "src": "6826:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6878:43:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6905:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6916:3:5",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6901:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6901:19:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6888:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6888:33:5"
                  },
                  "variableNames": [
                    {
                      "name": "value7",
                      "nodeType": "YulIdentifier",
                      "src": "6878:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6930:43:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6957:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6968:3:5",
                            "type": "",
                            "value": "192"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6953:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6953:19:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6940:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6940:33:5"
                  },
                  "variableNames": [
                    {
                      "name": "value8",
                      "nodeType": "YulIdentifier",
                      "src": "6930:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6982:43:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7009:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7020:3:5",
                            "type": "",
                            "value": "224"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7005:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7005:19:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6992:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6992:33:5"
                  },
                  "variableNames": [
                    {
                      "name": "value9",
                      "nodeType": "YulIdentifier",
                      "src": "6982:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptrt_array$_t_bytes32_$dyn_calldata_ptrt_uint256t_bytes32t_bytes32t_bytes32t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5956:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5967:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5979:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5987:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5995:6:5",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "6003:6:5",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "6011:6:5",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "6019:6:5",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "6027:6:5",
                "type": ""
              },
              {
                "name": "value7",
                "nodeType": "YulTypedName",
                "src": "6035:6:5",
                "type": ""
              },
              {
                "name": "value8",
                "nodeType": "YulTypedName",
                "src": "6043:6:5",
                "type": ""
              },
              {
                "name": "value9",
                "nodeType": "YulTypedName",
                "src": "6051:6:5",
                "type": ""
              }
            ],
            "src": "5792:1239:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7125:342:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7171:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "7180:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "7188:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7173:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7173:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7173:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7146:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7155:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7142:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7142:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7167:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "7138:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7138:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "7135:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7206:37:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7233:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7220:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7220:23:5"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "7210:6:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7286:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "7295:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "7303:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7288:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7288:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7288:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "7258:6:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7266:18:5",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7255:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7255:30:5"
                  },
                  "nodeType": "YulIf",
                  "src": "7252:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7321:86:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7379:9:5"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "7390:6:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7375:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7375:22:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "7399:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "7347:27:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7347:60:5"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "7325:8:5",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "7335:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7416:18:5",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "7426:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "7416:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7443:18:5",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "7453:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "7443:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7083:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "7094:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7106:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7114:6:5",
                "type": ""
              }
            ],
            "src": "7036:431:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7630:693:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7676:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value2",
                              "nodeType": "YulIdentifier",
                              "src": "7685:6:5"
                            },
                            {
                              "name": "value2",
                              "nodeType": "YulIdentifier",
                              "src": "7693:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7678:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7678:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7678:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7651:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7660:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7647:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7647:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7672:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "7643:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7643:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "7640:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7711:37:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7738:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7725:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7725:23:5"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "7715:6:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7757:28:5",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "7767:18:5",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "7761:2:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7812:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value2",
                              "nodeType": "YulIdentifier",
                              "src": "7821:6:5"
                            },
                            {
                              "name": "value2",
                              "nodeType": "YulIdentifier",
                              "src": "7829:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7814:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7814:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7814:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "7800:6:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "7808:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7797:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7797:14:5"
                  },
                  "nodeType": "YulIf",
                  "src": "7794:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7847:86:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7905:9:5"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "7916:6:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7901:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7901:22:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "7925:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "7873:27:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7873:60:5"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "7851:8:5",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "7861:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7942:18:5",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "7952:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "7942:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7969:18:5",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "7979:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "7969:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7996:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8023:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8034:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8019:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8019:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8006:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8006:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "7996:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8047:48:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8080:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8091:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8076:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8076:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8063:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8063:32:5"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "8051:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8124:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "8133:6:5"
                            },
                            {
                              "name": "value4",
                              "nodeType": "YulIdentifier",
                              "src": "8141:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8126:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8126:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8126:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "8110:8:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "8120:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8107:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8107:16:5"
                  },
                  "nodeType": "YulIf",
                  "src": "8104:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8159:104:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8233:9:5"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "8244:8:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8229:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8229:24:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "8255:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_array$_t_bytes32_$dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "8185:43:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8185:78:5"
                  },
                  "variables": [
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "8163:8:5",
                      "type": ""
                    },
                    {
                      "name": "value4_1",
                      "nodeType": "YulTypedName",
                      "src": "8173:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8272:18:5",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "8282:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "8272:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8299:18:5",
                  "value": {
                    "name": "value4_1",
                    "nodeType": "YulIdentifier",
                    "src": "8309:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "8299:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_calldata_ptrt_bytes32t_array$_t_bytes32_$dyn_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7564:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "7575:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7587:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7595:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "7603:6:5",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "7611:6:5",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "7619:6:5",
                "type": ""
              }
            ],
            "src": "7472:851:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8520:797:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8567:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value6",
                              "nodeType": "YulIdentifier",
                              "src": "8576:6:5"
                            },
                            {
                              "name": "value6",
                              "nodeType": "YulIdentifier",
                              "src": "8584:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8569:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8569:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8569:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8541:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8550:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8537:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8537:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8562:3:5",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "8533:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8533:33:5"
                  },
                  "nodeType": "YulIf",
                  "src": "8530:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8602:37:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8629:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8616:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8616:23:5"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "8606:6:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8648:28:5",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "8658:18:5",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "8652:2:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8703:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value6",
                              "nodeType": "YulIdentifier",
                              "src": "8712:6:5"
                            },
                            {
                              "name": "value6",
                              "nodeType": "YulIdentifier",
                              "src": "8720:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8705:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8705:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8705:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "8691:6:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "8699:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8688:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8688:14:5"
                  },
                  "nodeType": "YulIf",
                  "src": "8685:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8738:86:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8796:9:5"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "8807:6:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8792:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8792:22:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "8816:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "8764:27:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8764:60:5"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "8742:8:5",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "8752:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8833:18:5",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "8843:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "8833:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8860:18:5",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "8870:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "8860:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8887:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8914:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8925:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8910:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8910:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8897:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8897:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "8887:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8938:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8965:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8976:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8961:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8961:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8948:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8948:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "8938:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8989:48:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9022:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9033:2:5",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9018:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9018:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9005:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9005:32:5"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "8993:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9066:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value6",
                              "nodeType": "YulIdentifier",
                              "src": "9075:6:5"
                            },
                            {
                              "name": "value6",
                              "nodeType": "YulIdentifier",
                              "src": "9083:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9068:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9068:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9068:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "9052:8:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "9062:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "9049:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9049:16:5"
                  },
                  "nodeType": "YulIf",
                  "src": "9046:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9101:104:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9175:9:5"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "9186:8:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9171:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9171:24:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "9197:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_array$_t_bytes32_$dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "9127:43:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9127:78:5"
                  },
                  "variables": [
                    {
                      "name": "value4_1",
                      "nodeType": "YulTypedName",
                      "src": "9105:8:5",
                      "type": ""
                    },
                    {
                      "name": "value5_1",
                      "nodeType": "YulTypedName",
                      "src": "9115:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9214:18:5",
                  "value": {
                    "name": "value4_1",
                    "nodeType": "YulIdentifier",
                    "src": "9224:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "9214:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9241:18:5",
                  "value": {
                    "name": "value5_1",
                    "nodeType": "YulIdentifier",
                    "src": "9251:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "9241:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9268:43:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9295:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9306:3:5",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9291:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9291:19:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9278:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9278:33:5"
                  },
                  "variableNames": [
                    {
                      "name": "value6",
                      "nodeType": "YulIdentifier",
                      "src": "9268:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_calldata_ptrt_bytes32t_bytes32t_array$_t_bytes32_$dyn_calldata_ptrt_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8438:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8449:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8461:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "8469:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "8477:6:5",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "8485:6:5",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "8493:6:5",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "8501:6:5",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "8509:6:5",
                "type": ""
              }
            ],
            "src": "8328:989:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9445:444:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9491:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value2",
                              "nodeType": "YulIdentifier",
                              "src": "9500:6:5"
                            },
                            {
                              "name": "value2",
                              "nodeType": "YulIdentifier",
                              "src": "9508:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9493:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9493:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9493:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "9466:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9475:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "9462:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9462:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9487:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9458:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9458:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "9455:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9526:37:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9553:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9540:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9540:23:5"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "9530:6:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9606:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value2",
                              "nodeType": "YulIdentifier",
                              "src": "9615:6:5"
                            },
                            {
                              "name": "value2",
                              "nodeType": "YulIdentifier",
                              "src": "9623:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9608:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9608:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9608:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "9578:6:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9586:18:5",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "9575:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9575:30:5"
                  },
                  "nodeType": "YulIf",
                  "src": "9572:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9641:86:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9699:9:5"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "9710:6:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9695:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9695:22:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "9719:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "9667:27:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9667:60:5"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "9645:8:5",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "9655:8:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9736:18:5",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "9746:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "9736:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9763:18:5",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "9773:8:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "9763:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9790:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9817:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9828:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9813:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9813:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9800:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9800:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "9790:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9841:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9868:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9879:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9864:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9864:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9851:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9851:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "9841:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_calldata_ptrt_bytes32t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9387:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "9398:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9410:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "9418:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "9426:6:5",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "9434:6:5",
                "type": ""
              }
            ],
            "src": "9322:567:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10067:243:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "10084:3:5"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "10093:6:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10101:66:5",
                            "type": "",
                            "value": "0xff00000000000000000000000000000000000000000000000000000000000000"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "10089:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10089:79:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10077:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10077:92:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10077:92:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "10195:3:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10200:1:5",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10191:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10191:11:5"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "10204:6:5"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "10212:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "10178:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10178:41:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10178:41:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "10228:34:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "10246:3:5"
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "10251:6:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10242:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10242:16:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10260:1:5",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10238:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10238:24:5"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "10232:2:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "10278:2:5"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "10282:3:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10271:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10271:15:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10271:15:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10295:9:5",
                  "value": {
                    "name": "_1",
                    "nodeType": "YulIdentifier",
                    "src": "10302:2:5"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "10295:3:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes1_t_bytes_calldata_ptr__to_t_bytes1_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "10027:3:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "10032:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "10040:6:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "10048:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "10059:3:5",
                "type": ""
              }
            ],
            "src": "9894:416:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10490:137:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "10507:3:5"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "10512:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10500:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10500:19:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10500:19:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "10539:3:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10544:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10535:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10535:12:5"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "10549:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10528:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10528:28:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10528:28:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "10576:3:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10581:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10572:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10572:12:5"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "10586:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10565:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10565:28:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10565:28:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10602:19:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "10613:3:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10618:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10609:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10609:12:5"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "10602:3:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "10450:3:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "10455:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "10463:6:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "10471:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "10482:3:5",
                "type": ""
              }
            ],
            "src": "10315:312:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10733:125:5",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "10743:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10755:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10766:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10751:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10751:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10743:4:5"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10785:9:5"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "10800:6:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10808:42:5",
                            "type": "",
                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "10796:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10796:55:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10778:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10778:74:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10778:74:5"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10702:9:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "10713:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10724:4:5",
                "type": ""
              }
            ],
            "src": "10632:226:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10964:76:5",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "10974:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10986:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10997:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10982:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10982:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10974:4:5"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11016:9:5"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "11027:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11009:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11009:25:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11009:25:5"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10933:9:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "10944:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10955:4:5",
                "type": ""
              }
            ],
            "src": "10863:177:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11174:321:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11191:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11202:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11184:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11184:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11184:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11225:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11236:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11221:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11221:18:5"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "11241:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11214:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11214:34:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11214:34:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11274:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11285:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11270:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11270:18:5"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "11290:6:5"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "11298:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "11257:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11257:48:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11257:48:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "11329:9:5"
                              },
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "11340:6:5"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "11325:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11325:22:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11349:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11321:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11321:31:5"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "11354:4:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11314:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11314:45:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11314:45:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11368:121:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11384:9:5"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11403:6:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11411:2:5",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11399:3:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11399:15:5"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11416:66:5",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "11395:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11395:88:5"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11380:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11380:104:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11486:2:5",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11376:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11376:113:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11368:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11135:9:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "11146:6:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "11154:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11165:4:5",
                "type": ""
              }
            ],
            "src": "11045:450:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11637:125:5",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "11647:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11659:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11670:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11655:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11655:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11647:4:5"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11689:9:5"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "11704:6:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11712:42:5",
                            "type": "",
                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "11700:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11700:55:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11682:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11682:74:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11682:74:5"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_Optimistic_Roll_In_Compatible_$61__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11606:9:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "11617:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11628:4:5",
                "type": ""
              }
            ],
            "src": "11500:262:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11941:160:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11958:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11969:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11951:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11951:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11951:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11992:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12003:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11988:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11988:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12008:2:5",
                        "type": "",
                        "value": "10"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11981:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11981:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11981:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12031:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12042:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12027:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12027:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12047:12:5",
                        "type": "",
                        "value": "NOT_LOCKER"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12020:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12020:40:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12020:40:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12069:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12081:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12092:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12077:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12077:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12069:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_09408156ba11532b86afbd369ce6b6d13495c1833ce415228722cff371a6667a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11918:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11932:4:5",
                "type": ""
              }
            ],
            "src": "11767:334:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12280:171:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12297:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12308:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12290:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12290:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12290:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12331:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12342:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12327:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12327:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12347:2:5",
                        "type": "",
                        "value": "21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12320:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12320:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12320:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12370:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12381:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12366:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12366:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12386:23:5",
                        "type": "",
                        "value": "INSUFFICIENT_ROLLBACK"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12359:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12359:51:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12359:51:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12419:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12431:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12442:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12427:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12427:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12419:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1a4c145c2ce98330adf0740358f2a74d3800d628516fa14ab01326ce1b58d576__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12257:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12271:4:5",
                "type": ""
              }
            ],
            "src": "12106:345:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12630:167:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12647:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12658:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12640:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12640:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12640:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12681:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12692:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12677:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12677:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12697:2:5",
                        "type": "",
                        "value": "17"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12670:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12670:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12670:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12720:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12731:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12716:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12716:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12736:19:5",
                        "type": "",
                        "value": "ROLLBACK_REQUIRED"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12709:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12709:47:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12709:47:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12765:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12777:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12788:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12773:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12773:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12765:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1d78e5a07119f9b645a7581e958e2cbd94e3faf79a215f6ad2c050e79ae8858f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12607:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12621:4:5",
                "type": ""
              }
            ],
            "src": "12456:341:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12976:166:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12993:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13004:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12986:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12986:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12986:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13027:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13038:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13023:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13023:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13043:2:5",
                        "type": "",
                        "value": "16"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13016:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13016:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13016:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13066:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13077:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13062:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13062:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13082:18:5",
                        "type": "",
                        "value": "INVALID_CALLDATA"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13055:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13055:46:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13055:46:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13110:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13122:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13133:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13118:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13118:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13110:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_215ab9ed5ef5204c0b078038fc53ccc3354c9ce0951b366c01a50f8f928b6507__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12953:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12967:4:5",
                "type": ""
              }
            ],
            "src": "12802:340:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13321:169:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13338:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13349:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13331:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13331:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13331:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13372:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13383:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13368:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13368:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13388:2:5",
                        "type": "",
                        "value": "19"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13361:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13361:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13361:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13411:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13422:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13407:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13407:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13427:21:5",
                        "type": "",
                        "value": "ALREADY_INITIALIZED"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13400:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13400:49:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13400:49:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13458:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13470:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13481:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13466:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13466:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13458:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13298:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13312:4:5",
                "type": ""
              }
            ],
            "src": "13147:343:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13669:168:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13686:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13697:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13679:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13679:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13679:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13720:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13731:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13716:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13716:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13736:2:5",
                        "type": "",
                        "value": "18"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13709:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13709:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13709:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13759:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13770:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13755:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13755:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13775:20:5",
                        "type": "",
                        "value": "INCORRECT_CALLDATA"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13748:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13748:48:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13748:48:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13805:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13817:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13828:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13813:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13813:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13805:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_38010cb9e4e379eba95db333cad0bad5245b6dab781c70ead72769075aa77f91__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13646:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13660:4:5",
                "type": ""
              }
            ],
            "src": "13495:342:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14016:163:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14033:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14044:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14026:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14026:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14026:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14067:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14078:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14063:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14063:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14083:2:5",
                        "type": "",
                        "value": "13"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14056:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14056:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14056:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14106:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14117:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14102:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14102:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14122:15:5",
                        "type": "",
                        "value": "INVALID_PROOF"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14095:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14095:43:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14095:43:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14147:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14159:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14170:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14155:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14155:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14147:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_3d4674c7a24a849f99f84bc9e7d24d02a1b1940b7124f7d651f5ad32c06dc52b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13993:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14007:4:5",
                "type": ""
              }
            ],
            "src": "13842:337:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14358:166:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14375:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14386:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14368:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14368:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14368:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14409:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14420:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14405:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14405:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14425:2:5",
                        "type": "",
                        "value": "16"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14398:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14398:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14398:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14448:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14459:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14444:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14444:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14464:18:5",
                        "type": "",
                        "value": "VALID_TRANSITION"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14437:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14437:46:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14437:46:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14492:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14504:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14515:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14500:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14500:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14492:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_404769adf8d26bf2a8d6c04c4b34b3b5af22abb581709cbcfc0a448ab9a51428__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14335:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14349:4:5",
                "type": ""
              }
            ],
            "src": "14184:340:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14703:162:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14720:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14731:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14713:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14713:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14713:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14754:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14765:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14750:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14750:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14770:2:5",
                        "type": "",
                        "value": "12"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14743:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14743:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14743:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14793:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14804:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14789:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14789:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14809:14:5",
                        "type": "",
                        "value": "INVALID_TREE"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14782:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14782:42:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14782:42:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14833:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14845:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14856:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14841:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14841:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14833:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_4e220f8b6f749b0194f20634ede0b720d5eceef378539ca2169a81f56aa833b3__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14680:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14694:4:5",
                "type": ""
              }
            ],
            "src": "14529:336:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15044:163:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15061:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15072:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15054:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15054:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15054:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15095:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15106:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15091:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15091:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15111:2:5",
                        "type": "",
                        "value": "13"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15084:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15084:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15084:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15134:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15145:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15130:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15130:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15150:15:5",
                        "type": "",
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15123:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15123:43:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15123:43:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15175:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15187:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15198:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15183:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15183:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15175:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15021:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15035:4:5",
                "type": ""
              }
            ],
            "src": "14870:337:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15386:162:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15403:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15414:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15396:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15396:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15396:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15437:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15448:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15433:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15433:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15453:2:5",
                        "type": "",
                        "value": "12"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15426:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15426:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15426:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15476:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15487:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15472:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15472:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15492:14:5",
                        "type": "",
                        "value": "INVALID_SIZE"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15465:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15465:42:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15465:42:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15516:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15528:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15539:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15524:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15524:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15516:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_5b0326815c949ba02e79cc00c9c705f4cc5fe5d094c066aa12411c3fe67689a1__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15363:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15377:4:5",
                "type": ""
              }
            ],
            "src": "15212:336:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15727:166:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15744:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15755:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15737:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15737:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15737:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15778:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15789:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15774:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15774:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15794:2:5",
                        "type": "",
                        "value": "16"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15767:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15767:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15767:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15817:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15828:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15813:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15813:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15833:18:5",
                        "type": "",
                        "value": "ACCOUNT_UNLOCKED"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15806:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15806:46:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15806:46:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15861:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15873:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15884:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15869:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15869:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15861:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_6bace5e21acabd474698bbe6ec192fcd6115960c23cb618f270e1eb277fca082__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15704:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15718:4:5",
                "type": ""
              }
            ],
            "src": "15553:340:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16072:170:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16089:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16100:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16082:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16082:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16082:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16123:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16134:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16119:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16119:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16139:2:5",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16112:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16112:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16112:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16162:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16173:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16158:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16158:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "16178:22:5",
                        "type": "",
                        "value": "ROLLBACK_UNNECESSARY"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16151:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16151:50:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16151:50:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16210:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16222:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16233:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16218:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16218:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16210:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7475ac284e86e08ce776bbe1320019693ab8c3a2aa62a3b51988d29374752a3c__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16049:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16063:4:5",
                "type": ""
              }
            ],
            "src": "15898:344:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16421:171:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16438:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16449:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16431:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16431:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16431:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16472:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16483:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16468:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16468:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16488:2:5",
                        "type": "",
                        "value": "21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16461:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16461:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16461:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16511:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16522:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16507:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16507:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "16527:23:5",
                        "type": "",
                        "value": "INSUFFICIENT_CALLDATA"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16500:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16500:51:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16500:51:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16560:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16572:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16583:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16568:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16568:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16560:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_75b798616894f882ce14b76db6c3631d00de9b6c56a6b2356d5c5945068593de__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16398:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16412:4:5",
                "type": ""
              }
            ],
            "src": "16247:345:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16771:167:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16788:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16799:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16781:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16781:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16781:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16822:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16833:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16818:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16818:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16838:2:5",
                        "type": "",
                        "value": "17"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16811:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16811:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16811:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16861:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16872:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16857:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16857:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "16877:19:5",
                        "type": "",
                        "value": "ROLLBACK_TOO_DEEP"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16850:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16850:47:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16850:47:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16906:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16918:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16929:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16914:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16914:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16906:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_88c7125d9fc860b0f2c82ce8e25fceae4ba76f43ecee84a3aa6e61dead5544c2__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16748:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16762:4:5",
                "type": ""
              }
            ],
            "src": "16597:341:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17117:170:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17134:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17145:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17127:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17127:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17127:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17168:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17179:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17164:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17164:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17184:2:5",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17157:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17157:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17157:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17207:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17218:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17203:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17203:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "17223:22:5",
                        "type": "",
                        "value": "UNEXPECTED_UNDERFLOW"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17196:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17196:50:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17196:50:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17255:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17267:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17278:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17263:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17263:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17255:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_8b449114c092032f95ab19cd2ef16cc3b95ca6c1503334a20acfd3d332b8a351__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17094:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17108:4:5",
                "type": ""
              }
            ],
            "src": "16943:344:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17466:169:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17483:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17494:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17476:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17476:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17476:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17517:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17528:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17513:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17513:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17533:2:5",
                        "type": "",
                        "value": "19"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17506:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17506:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17506:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17556:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17567:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17552:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17552:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "17572:21:5",
                        "type": "",
                        "value": "INSUFFICIENT_WINDOW"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17545:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17545:49:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17545:49:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17603:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17615:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17626:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17611:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17611:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17603:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9d48b545779b96f560612b82c655ba6eceb166f41c67537af4882fd7107529bc__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17443:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17457:4:5",
                "type": ""
              }
            ],
            "src": "17292:343:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17814:166:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17831:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17842:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17824:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17824:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17824:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17865:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17876:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17861:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17861:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17881:2:5",
                        "type": "",
                        "value": "16"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17854:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17854:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17854:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17904:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17915:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17900:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17900:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "17920:18:5",
                        "type": "",
                        "value": "INVALID_ROLLBACK"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17893:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17893:46:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17893:46:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17948:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17960:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17971:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17956:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17956:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17948:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_c4df44981ed843032dcd66739e9d9ca9b39714bc67038b45850ddccb94cfaeeb__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17791:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17805:4:5",
                "type": ""
              }
            ],
            "src": "17640:340:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18159:164:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18176:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18187:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18169:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18169:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18169:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18210:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18221:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18206:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18206:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18226:2:5",
                        "type": "",
                        "value": "14"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18199:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18199:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18199:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18249:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18260:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18245:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18245:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "18265:16:5",
                        "type": "",
                        "value": "ACCOUNT_LOCKED"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18238:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18238:44:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18238:44:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18291:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18303:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18314:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18299:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18299:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18291:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_d8cd4d34be656b6a3d5f1388122c3376b98d03bc8880e73b32080138dac9d22e__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18136:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18150:4:5",
                "type": ""
              }
            ],
            "src": "17985:338:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18502:167:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18519:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18530:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18512:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18512:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18512:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18553:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18564:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18549:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18549:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18569:2:5",
                        "type": "",
                        "value": "17"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18542:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18542:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18542:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18592:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18603:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18588:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18588:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "18608:19:5",
                        "type": "",
                        "value": "INSUFFICIENT_TIME"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18581:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18581:47:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18581:47:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18637:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18649:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18660:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18645:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18645:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18637:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e6e29aa742787528e4ef5658c2f6ed3ed5d0e420556a6b49b0477b986b54ba9e__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18479:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18493:4:5",
                "type": ""
              }
            ],
            "src": "18328:341:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18848:170:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18865:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18876:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18858:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18858:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18858:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18899:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18910:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18895:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18895:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18915:2:5",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18888:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18888:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18888:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18938:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18949:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18934:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18934:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "18954:22:5",
                        "type": "",
                        "value": "CALLER_USER_MISMATCH"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18927:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18927:50:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18927:50:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18986:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18998:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19009:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18994:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18994:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18986:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e9472d2f4adc85e67d1fbddf9a34ced8c121cb448f0981625858678913ce21d6__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18825:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18839:4:5",
                "type": ""
              }
            ],
            "src": "18674:344:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19197:162:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19214:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19225:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19207:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19207:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19207:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19248:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19259:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19244:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19244:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19264:2:5",
                        "type": "",
                        "value": "12"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19237:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19237:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19237:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19287:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19298:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19283:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19283:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19303:14:5",
                        "type": "",
                        "value": "INVALID_BOND"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19276:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19276:42:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19276:42:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19327:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19339:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19350:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19335:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19335:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19327:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19174:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19188:4:5",
                "type": ""
              }
            ],
            "src": "19023:336:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19538:167:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19555:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19566:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19548:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19548:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19548:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19589:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19600:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19585:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19585:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19605:2:5",
                        "type": "",
                        "value": "17"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19578:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19578:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19578:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19628:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19639:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19624:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19624:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19644:19:5",
                        "type": "",
                        "value": "INSUFFICIENT_BOND"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19617:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19617:47:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19617:47:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19673:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19685:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19696:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19681:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19681:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19673:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_f14886dce54eed8f2c7fac7b8cb79aa35276e9b008920bb3c153d53ca3c75a28__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19515:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19529:4:5",
                "type": ""
              }
            ],
            "src": "19364:341:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19811:76:5",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19821:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19833:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19844:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19829:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19829:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19821:4:5"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19863:9:5"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "19874:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19856:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19856:25:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19856:25:5"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19780:9:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "19791:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19802:4:5",
                "type": ""
              }
            ],
            "src": "19710:177:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19986:498:5",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "19996:51:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "ptr_to_tail",
                        "nodeType": "YulIdentifier",
                        "src": "20035:11:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "20022:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20022:25:5"
                  },
                  "variables": [
                    {
                      "name": "rel_offset_of_tail",
                      "nodeType": "YulTypedName",
                      "src": "20000:18:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20195:22:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "addr",
                              "nodeType": "YulIdentifier",
                              "src": "20204:4:5"
                            },
                            {
                              "name": "addr",
                              "nodeType": "YulIdentifier",
                              "src": "20210:4:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20197:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20197:18:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20197:18:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "rel_offset_of_tail",
                            "nodeType": "YulIdentifier",
                            "src": "20070:18:5"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "calldatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "20098:12:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20098:14:5"
                                  },
                                  {
                                    "name": "base_ref",
                                    "nodeType": "YulIdentifier",
                                    "src": "20114:8:5"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "20094:3:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20094:29:5"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "20125:66:5",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "20090:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20090:102:5"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "20066:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20066:127:5"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "20059:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20059:135:5"
                  },
                  "nodeType": "YulIf",
                  "src": "20056:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "20226:47:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "base_ref",
                        "nodeType": "YulIdentifier",
                        "src": "20244:8:5"
                      },
                      {
                        "name": "rel_offset_of_tail",
                        "nodeType": "YulIdentifier",
                        "src": "20254:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "20240:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20240:33:5"
                  },
                  "variables": [
                    {
                      "name": "addr_1",
                      "nodeType": "YulTypedName",
                      "src": "20230:6:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20282:30:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "addr_1",
                        "nodeType": "YulIdentifier",
                        "src": "20305:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "20292:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20292:20:5"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "20282:6:5"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20355:22:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "addr",
                              "nodeType": "YulIdentifier",
                              "src": "20364:4:5"
                            },
                            {
                              "name": "addr",
                              "nodeType": "YulIdentifier",
                              "src": "20370:4:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20357:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20357:18:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20357:18:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "20327:6:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20335:18:5",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "20324:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20324:30:5"
                  },
                  "nodeType": "YulIf",
                  "src": "20321:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20386:25:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "addr_1",
                        "nodeType": "YulIdentifier",
                        "src": "20398:6:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20406:4:5",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "20394:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20394:17:5"
                  },
                  "variableNames": [
                    {
                      "name": "addr",
                      "nodeType": "YulIdentifier",
                      "src": "20386:4:5"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20462:16:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20471:1:5",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20474:1:5",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20464:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20464:12:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20464:12:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "addr",
                        "nodeType": "YulIdentifier",
                        "src": "20427:4:5"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "functionName": {
                              "name": "calldatasize",
                              "nodeType": "YulIdentifier",
                              "src": "20437:12:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20437:14:5"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "20453:6:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "20433:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20433:27:5"
                      }
                    ],
                    "functionName": {
                      "name": "sgt",
                      "nodeType": "YulIdentifier",
                      "src": "20423:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20423:38:5"
                  },
                  "nodeType": "YulIf",
                  "src": "20420:2:5"
                }
              ]
            },
            "name": "access_calldata_tail_t_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "base_ref",
                "nodeType": "YulTypedName",
                "src": "19943:8:5",
                "type": ""
              },
              {
                "name": "ptr_to_tail",
                "nodeType": "YulTypedName",
                "src": "19953:11:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "addr",
                "nodeType": "YulTypedName",
                "src": "19969:4:5",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "19975:6:5",
                "type": ""
              }
            ],
            "src": "19892:592:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20619:233:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20657:32:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "offsetOut",
                              "nodeType": "YulIdentifier",
                              "src": "20666:9:5"
                            },
                            {
                              "name": "offsetOut",
                              "nodeType": "YulIdentifier",
                              "src": "20677:9:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20659:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20659:28:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20659:28:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "startIndex",
                        "nodeType": "YulIdentifier",
                        "src": "20635:10:5"
                      },
                      {
                        "name": "endIndex",
                        "nodeType": "YulIdentifier",
                        "src": "20647:8:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "20632:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20632:24:5"
                  },
                  "nodeType": "YulIf",
                  "src": "20629:2:5"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20722:32:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "offsetOut",
                              "nodeType": "YulIdentifier",
                              "src": "20731:9:5"
                            },
                            {
                              "name": "offsetOut",
                              "nodeType": "YulIdentifier",
                              "src": "20742:9:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20724:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20724:28:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20724:28:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "endIndex",
                        "nodeType": "YulIdentifier",
                        "src": "20704:8:5"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "20714:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "20701:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20701:20:5"
                  },
                  "nodeType": "YulIf",
                  "src": "20698:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20763:36:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "20780:6:5"
                      },
                      {
                        "name": "startIndex",
                        "nodeType": "YulIdentifier",
                        "src": "20788:10:5"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "20776:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20776:23:5"
                  },
                  "variableNames": [
                    {
                      "name": "offsetOut",
                      "nodeType": "YulIdentifier",
                      "src": "20763:9:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20808:38:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "endIndex",
                        "nodeType": "YulIdentifier",
                        "src": "20825:8:5"
                      },
                      {
                        "name": "startIndex",
                        "nodeType": "YulIdentifier",
                        "src": "20835:10:5"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "20821:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20821:25:5"
                  },
                  "variableNames": [
                    {
                      "name": "lengthOut",
                      "nodeType": "YulIdentifier",
                      "src": "20808:9:5"
                    }
                  ]
                }
              ]
            },
            "name": "calldata_array_index_range_access_t_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "20553:6:5",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "20561:6:5",
                "type": ""
              },
              {
                "name": "startIndex",
                "nodeType": "YulTypedName",
                "src": "20569:10:5",
                "type": ""
              },
              {
                "name": "endIndex",
                "nodeType": "YulTypedName",
                "src": "20581:8:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "offsetOut",
                "nodeType": "YulTypedName",
                "src": "20594:9:5",
                "type": ""
              },
              {
                "name": "lengthOut",
                "nodeType": "YulTypedName",
                "src": "20605:9:5",
                "type": ""
              }
            ],
            "src": "20489:363:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20904:109:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20991:16:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21000:1:5",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21003:1:5",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20993:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20993:12:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20993:12:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "20927:5:5"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "20938:5:5"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "20945:42:5",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "20934:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20934:54:5"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "20924:2:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20924:65:5"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "20917:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20917:73:5"
                  },
                  "nodeType": "YulIf",
                  "src": "20914:2:5"
                }
              ]
            },
            "name": "validator_revert_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "20893:5:5",
                "type": ""
              }
            ],
            "src": "20857:156:5"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_t_array$_t_bytes32_$dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(arrayPos, arrayPos) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(arrayPos, arrayPos) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, mul(length, 0x20)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_t_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(arrayPos, arrayPos) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(arrayPos, arrayPos) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_payable(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_payablet_bytes32t_bytes32t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value1, value1) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_array$_t_bytes_calldata_ptr_$dyn_calldata_ptrt_bytes32t_bytes32t_array$_t_bytes32_$dyn_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(value4, value4) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value4, value4) }\n        let value1_1, value2_1 := abi_decode_t_array$_t_bytes32_$dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        value3 := calldataload(add(headStart, 64))\n        value4 := calldataload(add(headStart, 96))\n        let offset_1 := calldataload(add(headStart, 128))\n        if gt(offset_1, _1) { revert(value5, value5) }\n        let value5_1, value6_1 := abi_decode_t_array$_t_bytes32_$dyn_calldata(add(headStart, offset_1), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        value7 := calldataload(add(headStart, 160))\n    }\n    function abi_decode_tuple_t_addresst_bytes32t_bytes32t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value4, value4) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value4, value4) }\n        let value0_1, value1_1 := abi_decode_t_array$_t_bytes32_$dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := calldataload(add(headStart, 32))\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(value4, value4) }\n        let value3_1, value4_1 := abi_decode_t_array$_t_bytes32_$dyn_calldata(add(headStart, offset_1), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n    }\n    function abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptrt_bytes32t_bytes32t_array$_t_bytes32_$dyn_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(value4, value4) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value4, value4) }\n        let value0_1, value1_1 := abi_decode_t_array$_t_bytes32_$dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := calldataload(add(headStart, 32))\n        value3 := calldataload(add(headStart, 64))\n        let offset_1 := calldataload(add(headStart, 96))\n        if gt(offset_1, _1) { revert(value4, value4) }\n        let value4_1, value5_1 := abi_decode_t_array$_t_bytes32_$dyn_calldata(add(headStart, offset_1), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n        value6 := calldataload(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_bytes32t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptrt_array$_t_bytes32_$dyn_calldata_ptrt_uint256t_bytes32t_bytes32t_bytes32t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(value8, value8) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value8, value8) }\n        let value1_1, value2_1 := abi_decode_t_array$_t_bytes32_$dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(value8, value8) }\n        let value3_1, value4_1 := abi_decode_t_array$_t_bytes32_$dyn_calldata(add(headStart, offset_1), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        value5 := calldataload(add(headStart, 96))\n        value6 := calldataload(add(headStart, 128))\n        value7 := calldataload(add(headStart, 160))\n        value8 := calldataload(add(headStart, 192))\n        value9 := calldataload(add(headStart, 224))\n    }\n    function abi_decode_tuple_t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let value0_1, value1_1 := abi_decode_t_bytes_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_decode_tuple_t_bytes_calldata_ptrt_bytes32t_array$_t_bytes32_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value2, value2) }\n        let value0_1, value1_1 := abi_decode_t_bytes_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := calldataload(add(headStart, 32))\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(value4, value4) }\n        let value3_1, value4_1 := abi_decode_t_array$_t_bytes32_$dyn_calldata(add(headStart, offset_1), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n    }\n    function abi_decode_tuple_t_bytes_calldata_ptrt_bytes32t_bytes32t_array$_t_bytes32_$dyn_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(value6, value6) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value6, value6) }\n        let value0_1, value1_1 := abi_decode_t_bytes_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := calldataload(add(headStart, 32))\n        value3 := calldataload(add(headStart, 64))\n        let offset_1 := calldataload(add(headStart, 96))\n        if gt(offset_1, _1) { revert(value6, value6) }\n        let value4_1, value5_1 := abi_decode_t_array$_t_bytes32_$dyn_calldata(add(headStart, offset_1), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n        value6 := calldataload(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_bytes_calldata_ptrt_bytes32t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        let value0_1, value1_1 := abi_decode_t_bytes_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := calldataload(add(headStart, 32))\n        value3 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_packed_t_bytes1_t_bytes_calldata_ptr__to_t_bytes1_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        mstore(pos, and(value0, 0xff00000000000000000000000000000000000000000000000000000000000000))\n        calldatacopy(add(pos, 1), value1, value2)\n        let _1 := add(add(pos, value2), 1)\n        mstore(_1, end)\n        end := _1\n    }\n    function abi_encode_tuple_packed_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        mstore(pos, value0)\n        mstore(add(pos, 32), value1)\n        mstore(add(pos, 64), value2)\n        end := add(pos, 96)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), value1)\n        calldatacopy(add(headStart, 64), value0, value1)\n        mstore(add(add(headStart, value1), 64), tail)\n        tail := add(add(headStart, and(add(value1, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_contract$_Optimistic_Roll_In_Compatible_$61__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_09408156ba11532b86afbd369ce6b6d13495c1833ce415228722cff371a6667a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"NOT_LOCKER\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1a4c145c2ce98330adf0740358f2a74d3800d628516fa14ab01326ce1b58d576__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"INSUFFICIENT_ROLLBACK\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1d78e5a07119f9b645a7581e958e2cbd94e3faf79a215f6ad2c050e79ae8858f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"ROLLBACK_REQUIRED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_215ab9ed5ef5204c0b078038fc53ccc3354c9ce0951b366c01a50f8f928b6507__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"INVALID_CALLDATA\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"ALREADY_INITIALIZED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_38010cb9e4e379eba95db333cad0bad5245b6dab781c70ead72769075aa77f91__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"INCORRECT_CALLDATA\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_3d4674c7a24a849f99f84bc9e7d24d02a1b1940b7124f7d651f5ad32c06dc52b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"INVALID_PROOF\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_404769adf8d26bf2a8d6c04c4b34b3b5af22abb581709cbcfc0a448ab9a51428__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"VALID_TRANSITION\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4e220f8b6f749b0194f20634ede0b720d5eceef378539ca2169a81f56aa833b3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"INVALID_TREE\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"INVALID_ROOTS\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_5b0326815c949ba02e79cc00c9c705f4cc5fe5d094c066aa12411c3fe67689a1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"INVALID_SIZE\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6bace5e21acabd474698bbe6ec192fcd6115960c23cb618f270e1eb277fca082__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"ACCOUNT_UNLOCKED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7475ac284e86e08ce776bbe1320019693ab8c3a2aa62a3b51988d29374752a3c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"ROLLBACK_UNNECESSARY\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_75b798616894f882ce14b76db6c3631d00de9b6c56a6b2356d5c5945068593de__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"INSUFFICIENT_CALLDATA\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_88c7125d9fc860b0f2c82ce8e25fceae4ba76f43ecee84a3aa6e61dead5544c2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"ROLLBACK_TOO_DEEP\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8b449114c092032f95ab19cd2ef16cc3b95ca6c1503334a20acfd3d332b8a351__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"UNEXPECTED_UNDERFLOW\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9d48b545779b96f560612b82c655ba6eceb166f41c67537af4882fd7107529bc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"INSUFFICIENT_WINDOW\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c4df44981ed843032dcd66739e9d9ca9b39714bc67038b45850ddccb94cfaeeb__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"INVALID_ROLLBACK\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_d8cd4d34be656b6a3d5f1388122c3376b98d03bc8880e73b32080138dac9d22e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"ACCOUNT_LOCKED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e6e29aa742787528e4ef5658c2f6ed3ed5d0e420556a6b49b0477b986b54ba9e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"INSUFFICIENT_TIME\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e9472d2f4adc85e67d1fbddf9a34ced8c121cb448f0981625858678913ce21d6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"CALLER_USER_MISMATCH\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"INVALID_BOND\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f14886dce54eed8f2c7fac7b8cb79aa35276e9b008920bb3c153d53ca3c75a28__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"INSUFFICIENT_BOND\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1))) { revert(addr, addr) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(addr, addr) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function calldata_array_index_range_access_t_bytes_calldata_ptr(offset, length, startIndex, endIndex) -> offsetOut, lengthOut\n    {\n        if gt(startIndex, endIndex) { revert(offsetOut, offsetOut) }\n        if gt(endIndex, length) { revert(offsetOut, offsetOut) }\n        offsetOut := add(offset, startIndex)\n        lengthOut := sub(endIndex, startIndex)\n    }\n    function validator_revert_t_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n}",
      "id": 5,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "540:19821:2:-:0;;;1598:233;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1700:62;;;;;-1:-1:-1;;;;;;1700:62:2;;;1768:22;;1796:30;;540:19821;;14:432:5;;;;171:2;159:9;150:7;146:23;142:32;139:2;;;192:6;184;177:22;139:2;223:16;;-1:-1:-1;;;;;268:31:5;;258:42;;248:2;;319:6;311;304:22;248:2;392;377:18;;371:25;436:2;421:18;;;415:25;347:5;;371:25;;-1:-1:-1;415:25:5;129:317;-1:-1:-1;;;129:317:5:o;:::-;540:19821:2;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "540:19821:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3125:22;3136:10;3125;:22::i;:::-;;540:19821;;;;;12201:235;;;;;;;;;;-1:-1:-1;12201:235:2;;;;;:::i;:::-;;:::i;:::-;;10605:276;;;;;;;;;;-1:-1:-1;10605:276:2;;;;;:::i;:::-;;:::i;10271:223::-;;;;;;;;;;-1:-1:-1;10271:223:2;;;;;:::i;:::-;;:::i;3540:102::-;;;;;;:::i;:::-;;:::i;1395:43::-;;;;;;;;;;-1:-1:-1;1395:43:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8698:265;;;;;;:::i;:::-;;:::i;1442:42::-;;;;;;;;;;-1:-1:-1;1442:42:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1261:34::-;;;;;;;;;;;;;:::i;1196:61::-;;;;;;;;;;;;;:::i;4725:486::-;;;;;;;;;;-1:-1:-1;4725:486:2;;;;;:::i;:::-;;:::i;12555:288::-;;;;;;;;;;-1:-1:-1;12555:288:2;;;;;:::i;:::-;;:::i;1488:52::-;;;;;;;;;;-1:-1:-1;1488:52:2;;;;;:::i;:::-;;:::i;6316:182::-;;;:::i;3716:584::-;;;:::i;13609:1467::-;;;;;;;;;;-1:-1:-1;13609:1467:2;;;;;:::i;:::-;;:::i;15199:2660::-;;;;;;;;;;-1:-1:-1;15199:2660:2;;;;;:::i;:::-;;:::i;1342:49::-;;;;;;;;;;-1:-1:-1;1342:49:2;;;;;:::i;:::-;;:::i;1299:38::-;;;;;;;;;;;;;:::i;8457:123::-;;;;;;:::i;:::-;;:::i;1544:49::-;;;;;;;;;;-1:-1:-1;1544:49:2;;;;;:::i;:::-;;:::i;17978:2381::-;;;;;;:::i;:::-;;:::i;4378:247::-;;;;;;;;;;-1:-1:-1;4378:247:2;;;;;:::i;:::-;;:::i;5311:924::-;;;;;;;;;;-1:-1:-1;5311:924:2;;;;;:::i;:::-;;:::i;13025:536::-;;;;;;:::i;:::-;;:::i;3233:273::-;3314:14;;;3285:17;3314:14;;;:8;:14;;;;;;3332:13;3314:31;3310:53;;;-1:-1:-1;3354:9:2;3347:16;;3310:53;3391:13;3378:9;:26;;3370:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;3433:14:2;;;;;;;:8;:14;;;;;3450:13;3433:30;;;;3476:9;:25;3233:273;;;;:::o;12201:235::-;12352:79;12376:10;12388:9;;12399;12418:1;12422:5;;12418:1;12352:23;:79::i;:::-;12201:235;;;;;:::o;10605:276::-;10790:86;10809:10;10821:9;;10832;10843:14;10859:5;;10866:9;10790:18;:86::i;:::-;10605:276;;;;;;;:::o;10271:223::-;10415:74;10434:10;10446:9;;10457;10476:1;10480:5;;10476:1;10415:18;:74::i;3540:102::-;3599:16;3610:4;3599:10;:16::i;:::-;:21;3591:46;;;;;;;;;;;;:::i;:::-;3540:102;:::o;1395:43::-;;;;;;;;;;;;;:::o;8698:265::-;8847:10;2364:20;;;;:14;:20;;;;;;:25;2356:55;;;;;;;;;;;;:::i;:::-;8877:9:::1;2593:15;2581:9;2569;:21;:39;2561:69;;;;;;;;;;;;:::i;:::-;8894:64:::2;8909:10;8921:9;;8932:14;8948:9;8894:14;:64::i;:::-;2417:1:::1;8698:265:::0;;;;;:::o;1442:42::-;;;;;;;;;;;;;;;:::o;1261:34::-;;;:::o;1196:61::-;;;:::o;4725:486::-;4792:10;2158:1;2133:13;;;:7;:13;;;;;;:27;:13;:27;2125:54;;;;;;;;;;;;:::i;:::-;4825:10:::1;4810:12;4863:20:::0;;;::::1;::::0;;;;;;;;4929:8:::1;:14:::0;;;;;;4863:34;;::::1;::::0;;4966:66:::1;;5017:15;4966:66;;;5001:13;4983:15;:31;4966:66;4949:83;;5084:15;5074:6;:25;;5066:58;;;;;;;;;;;;:::i;:::-;5131:14;::::0;;::::1;;::::0;;;:8:::1;:14;::::0;;;;;5148:24;;::::1;5131:41:::0;;5178:28;:20;;::::1;::::0;:28;::::1;;;::::0;5166:6;;5178:28;;5131:14;5178:28;5166:6;5178:20;:28;::::1;;;;;;;;;;;;;::::0;::::1;;;;12555:288:::0;12747:91;12771:10;12783:9;;12794;12805:14;12821:5;;12828:9;12747:23;:91::i;1488:52::-;;;;;;;;;;;;;:::o;6316:182::-;6347:10;2267:1;2242:13;;;:7;:13;;;;;;:27;:13;2234:56;;;;;;;;;;;;:::i;:::-;6397:10:::1;6422:16;6397:10:::0;6422::::1;:16::i;:::-;:21:::0;6414:46:::1;;;;;;;;;;;;:::i;:::-;6467:13;;6491:1;6467:13:::0;;;:7:::1;:13;::::0;;;;:26;;;::::1;::::0;;-1:-1:-1;6316:182:2:o;3716:584::-;3771:10;2043:1;2011:20;;;;;;;;;;;:34;2003:66;;;;;;;;;;;;:::i;:::-;3804:10:::1;3789:12;3840:16;3804:10:::0;3840::::1;:16::i;:::-;3820:36;;3949:21;3973:14;:31;;;4013:9;4025:4;3973:57;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4193:55;::::0;3949:81;;-1:-1:-1;4193:55:2::1;::::0;4218:1:::1;::::0;3949:81;;4218:1;;4193:55:::1;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;;;;4183:66;;4193:55:::1;4183:66:::0;;::::1;::::0;4160:20:::1;::::0;::::1;:14;:20:::0;;;;;;;;;;:89;4281:13;;4261:34:::1;::::0;4160:14;4261:34:::1;2075:1;;;3716:584:::0;:::o;13609:1467::-;2242:27;:13;;;2267:1;2242:13;;;:7;:13;;;;;;13739:7;;2242:13;2234:56;;;;;;;;;;;;:::i;:::-;2935:23:::1;::::0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;2974:15:::1;2961:9;2935:35:::0;;::::1;:54;;2927:86;;;;;;;;;;;;:::i;:::-;2364:20:::2;::::0;::::2;;::::0;;;:14:::2;:20;::::0;;;;;13791:7;;2364:25;2356:55:::2;;;;;;;;;;;;:::i;:::-;13992:23:::3;::::0;::::3;:14;:23:::0;;;::::3;::::0;;;;;;;;;13928:59;;::::3;::::0;13945:14;;13961:5;;13976:9;;13928:59:::3;;:::i;:::-;;;;;;;;;;;;;13918:70;;;;;;:97;13903:141;;;;;;;;;;;;:::i;:::-;14097:16;::::0;;::::3;14079:15;14097:16:::0;;;:7:::3;:16;::::0;;;;;;;;;14119:29;;;::::3;::::0;;;14154:17:::3;:26:::0;;;;;;:30;;;14097:16;::::3;14190::::0;;;;;;;;;:29;;;;::::3;::::0;;14225:26;;;;;;:30;;;14097:16;14457:17;;;;;;;14480:21;;;;14507:17;;;;;;:27;;;::::3;::::0;;14624:14;14620:87:::3;;14684:1;14675:7;14653:33;;14666:7;14653:33;;;;;;;;;;;;14694:7;;;;14620:87;14946:65;::::0;::::3;::::0;14963:14;;14979:5;;14994:15:::3;::::0;14946:65:::3;;;:::i;:::-;;::::0;;;;;::::3;::::0;;;;;;14936:76;;14946:65:::3;14936:76:::0;;::::3;::::0;14910:23:::3;::::0;;::::3;:14;:23:::0;;;;;;;;;;:102;;;;15055:15:::3;::::0;15024:47;;::::3;::::0;14910:23;15024:47:::3;::::0;::::3;2417:1;;3019::::2;2296::::1;13609:1467:::0;;;;;:::o;15199:2660::-;2242:27;:13;;;2267:1;2242:13;;;:7;:13;;;;;;15396:7;;2242:13;2234:56;;;;;;;;;;;;:::i;:::-;15523:27:::1;:16:::0;;::::1;15411:15;15523:16:::0;;;:7:::1;:16;::::0;;;;;15429:10:::1;::::0;15523:16:::1;:27:::0;::::1;15515:50;;;;;;;;;;;;:::i;:::-;15758:23;::::0;::::1;:14;:23:::0;;;::::1;::::0;;;;;;;;;15694:59;;::::1;::::0;15711:14;;15727:5;;15742:9;;15694:59:::1;;:::i;:::-;;;;;;;;;;;;;15684:70;;;;;;:97;15669:141;;;;;;;;;;;;:::i;:::-;15863:74;15904:14;15920:9;;15931:5;;15863:40;:74::i;:::-;15855:103;;;;;;;;;;;;:::i;:::-;16026:34;16063:53;16099:9;;16110:5;;16063:35;:53::i;:::-;16026:90;;16209:24;16236:17;16254:1;16236:20;;;;;;;;;;;;;;16209:47;;16365:9;;:16;;16385:1;16365:21;16361:777;;;16518:5;;16524:1;16518:8;;;;;;;;;;;;;16510:17;;16486:16;16505:1;16486:20;:41;16478:72;;;;;;;;;;;;:::i;:::-;16615:47;16633:7;16642:9;;16652:1;16642:12;;;;;;;;;;;;;;;;;;:::i;:::-;16656:5;16615:17;:47::i;:::-;:56;16607:85;;;;;;;;;;;;:::i;:::-;16361:777;;;16800:17;16818:1;16800:20;;;;;;;;;;;;;;16776:16;16795:1;16776:20;:44;16768:53;;;::::0;::::1;;16960:9;;16970:1;16960:12;;;;;;;;;;;;;;;;;;:::i;:::-;:17;::::0;16973:2:::1;::::0;16960:17;;::::1;:::i;:::-;16949:40;;;;;;;:::i;:::-;16941:48;;17054:47;17072:7;17081:9;;17091:1;17081:12;;;;;;17054:47;:56;17046:85;;;;;;;;;;;;:::i;:::-;17313:17;::::0;;::::1;;::::0;;;:8:::1;:17;::::0;;;;;;;;;17336:21;;;;17363:17;;::::1;::::0;;;;;;:30;;;::::1;::::0;;17436:7:::1;:16:::0;;;;;;:29;;;;;::::1;::::0;;;17471:17:::1;:26:::0;;;;;;:30;;;17617:23;;;:14:::1;:23:::0;;;;;:42;;;17728:16;;;;;;:26;;;;::::1;::::0;::::1;::::0;;17760;;;;;;:30;;;17802:52;17313:17;;-1:-1:-1;17643:16:2;;17363:17;;17802:52:::1;::::0;::::1;2296:1;;;15199:2660:::0;;;;;;;;;:::o;1342:49::-;;;;;;;;;;;;;;:::o;1299:38::-;;;:::o;8457:123::-;8523:52;8538:10;8550:9;;8569:1;;8523:14;:52::i;:::-;8457:123;;:::o;1544:49::-;;;;;;;;;;;;;:::o;17978:2381::-;18290:10;18275:12;18330:20;;;:14;:20;;;;;;18364:18;18356:51;;;;;;;;;;;;:::i;:::-;18600:20;;;:14;:20;;;;;;;;;;;;;18536:59;;;;18553:14;;18569:5;;18584:9;;18536:59;;:::i;:::-;;;;;;;;;;;;;18526:70;;;;;;:94;18511:138;;;;;;;;;;;;:::i;:::-;18741:85;18777:14;18793:12;18807:18;18741:35;:85::i;:::-;18733:110;;;;;;;;;;;;:::i;:::-;18966:24;19001:15;;19017:1;19001:18;;;;;;;;;;;;;18993:27;;18966:54;;19053:12;19034:16;:31;19026:65;;;;;;;;;;;;:::i;:::-;19185:13;19165:16;:33;;19157:63;;;;;;;;;;;;:::i;:::-;19492:14;19371:109;19413:26;19441:21;;19464:15;;19371:41;:109::i;:::-;:135;19356:182;;;;;;;;;;;;:::i;:::-;19684:21;;19706:1;19684:24;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;19709:2;;19684:29;;;:::i;:::-;19673:52;;;;;;;:::i;:::-;19863:77;;19665:60;;-1:-1:-1;19863:77:2;;19880:26;;19665:60;;19923:15;;19863:77;;;:::i;:::-;;;;;;;;;;;;;;19853:88;;19863:77;19853:88;;;;19830:20;;;:14;:20;;;;;;;;;:111;20029:33;;;20025:112;;;20072:13;;;20096:1;20072:13;;;:7;:13;;;;;;;;:26;;;;;;20106:14;:20;;;;;:24;20025:112;20248:16;20259:4;20248:10;:16::i;:::-;:21;20240:46;;;;;;;;;;;;:::i;:::-;20338:15;20320:16;20314:4;20298:56;;;;;;;;;;;;17978:2381;;;;;;;;;;;;;:::o;4378:247::-;4443:10;2158:1;2133:13;;;:7;:13;;;;;;:27;:13;:27;2125:54;;;;;;;;;;;;:::i;:::-;4476:10:::1;4461:12;4509:14:::0;;;:8:::1;:14;::::0;;;;;;;;;4529:18;;;;4553:20;;;;;;;:33;;;4592:28;4509:14;;::::1;4592:20:::0;::::1;::::0;:28;::::1;;;::::0;4509:14;;4592:28;;4461:12;4592:28;4509:14;4592:20;:28;::::1;;;;;;;;;;;;;::::0;::::1;;;;5311:924:::0;5455:10;2158:1;2133:13;;;:7;:13;;;;;;:27;:13;:27;2125:54;;;;;;;;;;;;:::i;:::-;5485:9:::1;2593:15;2581:9;2569;:21;:39;2561:69;;;;;;;;;;;;:::i;:::-;5517:10:::2;5502:12;5786:20:::0;;;::::2;::::0;;;;;;;;;5722:59;;::::2;::::0;5739:14;;5755:5;;5770:9;;5722:59:::2;;:::i;:::-;;;;;;;;;;;;;5712:70;;;;;;:94;5697:138;;;;;;;;;;;;:::i;:::-;5969:47;::::0;::::2;::::0;5994:1:::2;::::0;5998:5;;5994:1;;5969:47:::2;;;:::i;:::-;;::::0;;;;;::::2;::::0;;;;;;5959:58;;5969:47:::2;5959:58:::0;;::::2;::::0;5936:20:::2;::::0;;::::2;:14;:20:::0;;;;;;;;;:81;;;;6110:7:::2;:13:::0;;;;;:20;;;::::2;::::0;;::::2;::::0;;;6158:14;;;;;;;;6178:18;;;;6158:14;6202:20;;::::2;::::0;:28;::::2;;;::::0;6158:14;;5969:47;5936:14;5969:47;6158:14;6202:20;:28;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;2636:1;;2185::::1;5311:924:::0;;;;;:::o;13025:536::-;13084:10;2158:1;2133:13;;;:7;:13;;;;;;:27;:13;:27;2125:54;;;;;;;;;;;;:::i;:::-;2133:27:::1;:13:::0;;::::1;2158:1;2133:13:::0;;;:7:::1;:13;::::0;;;;;13107:7;;2133:13:::1;:27:::0;2125:54:::1;;;;;;;;;;;;:::i;:::-;13202:16:::2;::::0;::::2;13122:15;13202:16:::0;;;:7:::2;:16;::::0;;;;;;;:26;;13140:10:::2;13202:26:::0;;;::::2;::::0;::::2;::::0;;;13234:17:::2;:26:::0;;;;;;13263:15:::2;13234:44:::0;;;;13284:16;;;;;;;;;:26;;;;::::2;::::0;::::2;::::0;;;13316;;;;;;:44;13475:19:::2;13140:10:::0;13475::::2;:19::i;:::-;:24:::0;13467:49:::2;;;;;;;;;;;;:::i;:::-;13548:7;13528:28;;13539:7;13528:28;;;;;;;;;;;;2185:1;::::1;13025:536:::0;;:::o;10950:1112::-;2133:27;:13;;;2158:1;2133:13;;;:7;:13;;;;;;11161:4;;2133:13;:27;2125:54;;;;;;;;;;;;:::i;:::-;11187:9;;2842:1:::1;2823:20:::0;::::1;2815:54;;;;;;;;;;;;:::i;:::-;11299:13:::2;11326:9;;11336:1;11326:12;;;;;;;;;;;;;;;;;;:::i;:::-;:17;::::0;11339:2:::2;::::0;11326:17;;::::2;:::i;:::-;11315:40;;;;;;;:::i;:::-;11548:20;::::0;::::2;:14;:20:::0;;;::::2;::::0;;;;;;;;;11484:59;;11299:56;;-1:-1:-1;11548:20:2;;11484:59:::2;::::0;11501:14;;11299:56;;11532:9;;11484:59:::2;;:::i;:::-;;;;;;;;;;;;;11474:70;;;;;;:94;11459:138;;;;;;;;;;;;:::i;:::-;11735:75;11777:14;11793:9;;11804:5;;11735:41;:75::i;:::-;11936:60;::::0;11727:83;;-1:-1:-1;11936:60:2::2;::::0;11727:83;;11960:9;;11979:15:::2;::::0;11936:60:::2;;;:::i;:::-;;;;;;;;;;;;;11926:71;;;;;;11903:14;:20:::0;11918:4:::2;11903:20;;;;;;;;;;;;;;;:94;;;;12041:15;12035:4;12009:48;;;;;;;;;;;;2875:1;2185::::1;;10950:1112:::0;;;;;;;;;:::o;9026:1114::-;2133:27;:13;;;2158:1;2133:13;;;:7;:13;;;;;;9232:6;;2133:13;:27;2125:54;;;;;;;;;;;;:::i;:::-;9335:13:::1;9362:14;:9:::0;9372:2:::1;9362:9:::0;;:14:::1;:::i;:::-;9351:37;;;;;;;:::i;:::-;9647:22;::::0;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;;;9583:59;;9335:53;;-1:-1:-1;9647:22:2;;9583:59:::1;::::0;9600:14;;9335:53;;9631:9;;9583:59:::1;;:::i;:::-;;;;;;;;;;;;;9573:70;;;;;;:96;9558:140;;;;;;;;;;;;:::i;:::-;9813:74;9854:14;9870:9;;9881:5;;9813:40;:74::i;:::-;10013:60;::::0;9805:82;;-1:-1:-1;10013:60:2::1;::::0;9805:82;;10037:9;;10056:15:::1;::::0;10013:60:::1;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;;;;10003:71;;10013:60:::1;10003:71:::0;;::::1;::::0;9978:22:::1;::::0;::::1;:14;:22:::0;;;;;;;;;;:96;10119:15:::1;::::0;10086:49:::1;::::0;9978:14;10086:49:::1;2185:1;9026:1114:::0;;;;;;;;;:::o;7139:1222::-;2133:27;:13;;;2158:1;2133:13;;;:7;:13;;;;;;7288:6;;2133:13;:27;2125:54;;;;;;;;;;;;:::i;:::-;7445:13:::1;:9:::0;7455:1:::1;7445:9:::0;;:13:::1;:::i;:::-;7434:36;;;;;;;:::i;:::-;7424:46;;:6;:46;;;7416:79;;;;;;;;;;;;:::i;:::-;7601:13;7628:14;:9:::0;7638:2:::1;7628:9:::0;;:14:::1;:::i;:::-;7617:37;;;;;;;:::i;:::-;7925:22;::::0;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;;;7861:59;;7601:53;;-1:-1:-1;7925:22:2;;7861:59:::1;::::0;7878:14;;7601:53;;7909:9;;7861:59:::1;;:::i;:::-;;;;;;;;;;;;;7851:70;;;;;;:96;7836:140;;;;;;;;;;;;:::i;:::-;8061:62;::::0;;;;:31:::1;:14;:31;::::0;::::1;::::0;8101:9:::1;::::0;8061:62:::1;::::0;8113:9;;;;8061:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8268:47;::::0;8053:70;;-1:-1:-1;8268:47:2::1;::::0;8293:1:::1;::::0;8053:70;;8293:1;;8268:47:::1;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;;;;8258:58;;8268:47:::1;8258:58:::0;;::::1;::::0;8233:22:::1;::::0;::::1;:14;:22:::0;;;;;;;;;;:83;8350:5;;8328:28:::1;::::0;8233:14;8328:28:::1;2185:1;7139:1222:::0;;;;;;:::o;61558:229:4:-;61690:4;61778;61709:65;61719:5;;61725:1;61719:8;;;;;;;;;;;;;61729:44;61757:8;;61767:5;;61729:27;:44::i;:::-;61709:9;:65::i;:::-;:73;61702:80;;61558:229;;;;;;;;:::o;62861:208::-;62958:16;62989:75;63018:8;63035:5;;63041:1;63035:8;;;;;;;;;;;;;63045:5;;63051:1;63045:8;;;;;;;;;;;;;63055:5;;63061:1;63055:8;;;;;;;;;;;;;62989:28;:75::i;:::-;62982:82;;62861:208;;;;;;;:::o;6590:493:2:-;6715:4;6862:13;:9;6872:1;6862:9;;:13;:::i;:::-;6851:36;;;;;;;:::i;:::-;6843:44;;:4;:44;;;6839:62;;-1:-1:-1;6896:5:2;6889:12;;6839:62;6939:41;;;;;:30;:14;:30;;;;:41;;6970:9;;;;6939:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6939:41:2;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6935:144;;-1:-1:-1;7067:5:2;7060:12;;6935:144;7020:18;;;-1:-1:-1;7013:25:2;;63783:235:4;63893:4;63909:18;;:31;;;;-1:-1:-1;63931:9:4;;63909:31;63905:48;;;-1:-1:-1;63949:4:4;63942:11;;63905:48;64009:4;63967:38;63985:4;63992:12;63967:9;:38::i;:::-;:46;63960:53;;63783:235;;;;;;:::o;71896:761::-;72036:24;72068:27;72098:5;;72104:1;72098:8;;;;;;;;;;;;;;;-1:-1:-1;;72122:18:4;;72146:33;;72121:59;72113:84;;;;;;;;;;;;:::i;:::-;72208:18;72204:112;;72235:81;72253:15;72278:37;72253:15;;72278:20;:37::i;72235:81::-;72228:88;;;;;72204:112;72323:24;72392:66;72435:15;;72452:5;;72392:42;:66::i;:::-;72353:105;-1:-1:-1;72353:105:4;-1:-1:-1;72525:4:4;72473:48;72483:19;72353:105;72473:9;:48::i;:::-;:56;72465:82;;;;;;;;;;;;:::i;:::-;72561:91;72579:53;;;72635:16;72561:9;:91::i;:::-;72554:98;71896:761;-1:-1:-1;;;;;;;;71896:761:4:o;69470:722::-;69606:24;69638:27;69668:5;;69674:1;69668:8;;;;;;;;;;;;;;;-1:-1:-1;;69692:18:4;;69716:33;;69691:59;69683:84;;;;;;;;;;;;:::i;:::-;69778:18;69774:98;;69805:67;69831:1;69836:35;69856:14;;69836:19;:35::i;69774:98::-;69879:24;69948:66;69992:14;;70008:5;;69948:43;:66::i;:::-;69909:105;-1:-1:-1;69909:105:4;-1:-1:-1;70081:4:4;70029:48;70039:19;69909:105;70029:9;:48::i;:::-;:56;70021:82;;;;;;;;;;;;:::i;:::-;70117:70;70166:1;70135:32;;70170:16;70117:9;:70::i;17302:242::-;17427:7;17451:88;17487:44;17522:8;;17487:34;:44::i;:::-;17533:5;;17451:35;:88::i;185:184::-;249:12;286:15;;;315:4;308:15;354:4;338:21;;;278:87::o;11874:1868::-;12024:24;12080:13;12066:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12066:28:4;;12056:38;;12100:28;12145:13;12131:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12131:28:4;;12100:59;;12165:31;12210:13;12199:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12199:25:4;-1:-1:-1;12230:18:4;;;;;12165:59;-1:-1:-1;12230:18:4;12247:1;12254:13;;;;12463:1275;12499:9;12491:5;:17;12484:24;;12531:9;12523:5;:17;12516:24;;12565:9;12556:6;:18;12548:26;;12602:11;12614:5;12602:18;;;;;;;;;;;;;;12597:1;:23;;12582:38;;12641:9;12633:4;:17;12629:335;;;12674:9;12666:4;:17;12662:37;;;12685:14;;;;;;;;;;12662:37;12735:11;12747:5;12735:18;;;;;;;;;;;;;;;;;:20;;;;;;12772:10;12768:83;;12806:13;12798:21;;12833:5;;12768:83;12868:26;;12886:7;;;;12868:17;;:26;;;;;;;;;;;;12863:38;;12896:5;;12863:38;12710:202;;;12936:1;12922:15;;;;;12947:8;;12629:335;12984:9;12976:4;:17;12972:453;;;13005:412;13043:9;13034:5;:18;13030:81;;;13086:12;13068:7;13076:5;13068:14;;;;;;;;;;;;;:30;;;;;;;;;;;13030:81;13123:11;13135:5;13123:18;;;;;;;;;;;;;;;;;:20;;;;;;13160:10;13156:83;;13194:13;13186:21;;13221:5;;13156:83;13256:17;13274:5;13256:24;;;;;;;;;;;;;;13251:110;;13325:4;13296:17;13314:7;;;;;;;13296:26;;;;;;;;:33;;;:26;;;;;;;;;;;:33;13343:5;;13251:110;13402:4;13373:17;13391:7;;;;;;;13373:26;;;;;;;;:33;;;:26;;;;;;;;;;;:33;13005:412;;;13469:9;13460:5;:18;13456:77;;13510:12;13492:7;13500:5;13492:14;;;;;;;;;;;;;:30;;;;;;;;;;;13456:77;13543:11;13555:5;13543:18;;;;;;;;;;;;;;;;;:20;;;;;;13578:10;13574:77;;13610:13;13602:21;;13635:5;;13574:77;13666:26;;13684:7;;;;13666:17;;:26;;;;;;;;;;;;13661:38;;13694:5;;13661:38;13433:275;;6027:163;6107:7;6129:56;6149:35;6175:8;;6149:25;:35::i;:::-;6129:19;:56::i;32397:286::-;32544:7;32553;32577:101;32628:42;32654:15;;32628:25;:42::i;:::-;32672:5;;32577:50;:101::i;:::-;32570:108;;;;32397:286;;;;;;;:::o;1257:150::-;1365:36;;1333:7;;1365:36;;1333:7;;1393;;;;1365:36;;;:::i;:::-;;;;;;;;;;;;;1355:47;;;;;;1348:54;;1257:150;;;;:::o;27858:339::-;28003:19;28024:7;28089:1;28082:9;;28093:14;;28065:43;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28055:54;;;;;;28041:68;;28122:70;28173:11;28186:5;;28122:50;:70::i;13811:478::-;13917:22;13973:8;;14002:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14002:28:4;-1:-1:-1;13994:36:4;-1:-1:-1;14057:17:4;;;14036:18;14106:179;14127:13;14113:11;:27;14106:179;;;14205:1;14209:8;;14218:10;14209:20;;;;;;;;;;;;;;;;;;:::i;:::-;14181:49;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14171:60;;;;;;14150:5;14156:11;14150:18;;;;;;;;;;;;;;;;;:81;14263:15;;;;;14254:1;14239:16;14106:179;;;13811:478;;;;;;;:::o;16004:1189::-;16178:12;;16134:13;;;;16267:1;16294:66;16134:13;16382:5;;16294:66;16382:8;;;;;;;;;;;;;16366:24;;16396:13;16412:5;;16418:1;16412:8;;;;;;;;;;;;;16396:24;;16426:14;16443:5;;16449:1;16443:8;;;;;;;;;;;;;16426:25;;16458:731;16504:9;16491;16483:5;:17;:30;16479:353;;;16550:9;16537;16529:5;:17;:30;16525:99;;;16568:5;16622:1;16575:16;;:43;;16607:11;16575:43;;;16594:10;16575:43;16574:49;16568:56;;;;;;;;;;;;;;16561:63;;;;;;;;;;;;16525:99;16656:5;16662:10;16656:17;;;;;;;;;;;;;;16635:5;16641:11;16635:18;;;;;;;;;;;;;:38;;;;;16716:10;16698;16711:1;16698:14;16697:29;;;;;;16684:42;;16770:10;16751:11;16765:1;16751:15;16750:30;;;;;;16736:44;;16804:1;16790:15;;;;;16815:8;;16479:353;16870:9;16857;16849:5;:17;:30;16848:77;;16905:5;;16911:13;;;;;;16905:20;;;;;;;;;;;;;16848:77;;;16883:19;;16889:12;;;;16883:5;;:19;;;;;;;;;;;;16848:77;16840:85;;16948:10;16934:24;;;;;;;;;16988:68;16998:5;17004:10;16998:17;;;;;;;;;;;;;;17017:5;17046:9;17033;17024:6;:18;:31;16988:9;:68::i;:::-;16967:5;16973:11;16967:18;;;;;;;1951:752;2036:22;2090:8;2172:1;2133:18;;;2156:17;;;2132:42;;2188:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2188:25:4;;2180:33;;2219:19;2244:18;2269:430;2290:10;2276:11;:24;2269:430;;;-1:-1:-1;2338:1:4;2323:16;;;2366:17;;;2352:31;;2348:152;;;2450:1;2454:8;;2463:10;2454:20;;;;;;;;;;;;;;;;;;:::i;:::-;2426:49;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2416:60;;;;;;2395:5;2401:11;2395:18;;;;;;;;;;;;;:81;;;;;2486:5;;2348:152;2531:161;2584:1;2588:8;;2597:10;2588:20;;;;;;;;;;;;;;;;;;:::i;:::-;2560:49;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2550:60;;;;;;2654:1;2647:9;;2658:8;;2667:10;2680:1;2667:14;2658:24;;;;;;;;;;;;;;;;;;:::i;:::-;2630:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2620:64;;;;;;2531:9;:161::i;:::-;2508:20;;2514:13;;;;2508:5;;:20;;;;;;;;;;;:184;;;;;2269:430;;;1951:752;;;;;;;;:::o;5233:706::-;5345:12;;5309:7;;;;5413:500;5433:1;5420:10;:14;5413:500;;;-1:-1:-1;5472:1:4;5457:16;;;5500:14;;;5486:28;;5482:193;;;5547:5;5553:10;5547:17;;;;;;;;;;;;;;5526:5;5532:11;5526:18;;;;;;;;;;;;;:38;;;;;5588:1;5574:15;;5633:10;5646:1;5633:14;5627:1;5613:10;:15;;5612:36;5599:49;;5658:8;;5482:193;5701:10;5687;:24;5683:141;;5737:1;5723:15;;5782:10;5795:1;5782:14;5776:1;5762:10;:15;;5761:36;5748:49;;5807:8;;5683:141;5855:51;5865:5;5871:10;5865:17;;;;;;;;;;;;;;5884:5;5890:10;5903:1;5890:14;5884:21;;;;;;;;;;;;;;5855:9;:51::i;:::-;5832:20;;5838:13;;;;5832:5;;:20;;;;;;;;;;;:74;;;;;5413:500;;;5926:5;5932:1;5926:8;;;;;;;;;;;;;;5919:15;;;;;5233:706;;;:::o;29155:360::-;29240:22;29294:8;;29323:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29323:28:4;;29315:36;;29358:153;29365:17;;29358:153;;29392:18;;29475:1;29479:8;;29392:18;29479:23;;;;;;;;;;;;;;;;;;:::i;:::-;29451:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29441:63;;;;;;29418:5;29424:13;29418:20;;;;;;;;;;;;;:86;;;;;29358:153;;;29155:360;;;;;:::o;30846:1432::-;31050:19;;30998:12;;;;;;;31149:5;;30998:12;31149:8;;;;;;;;;;;;31276:20;;;31302:15;;;31149:8;-1:-1:-1;31149:8:4;;-1:-1:-1;31141:17:4;31345:28;31149:8;31345:12;:28::i;:::-;31323:50;;;;31386:5;;31392:11;31386:18;;;;;;;;;;;;;31379:25;;31411:826;31418:14;;31411:826;;31447:16;;31446:38;;;;;31469:5;31477:1;31469:9;31482:1;31469:14;31446:38;31442:516;;;31514:55;31524:5;;31530:11;31524:18;;;;;;;;;;;;;31544:12;31557:10;31544:24;;;;;;;31514:55;31496:12;31509:1;31496:15;;;;;;;;;;;;;;;;;:73;31594:1;31605:15;;;;;31579:16;;31635:15;;31631:86;;31671:35;31681:5;;31687:11;31681:18;;;;;;;;;;;;;31701:4;31671:9;:35::i;:::-;31664:42;;31631:86;31741:1;;-1:-1:-1;31752:10:4;;;;31442:516;;;31789:10;31781:5;:18;31777:181;;;31841:63;31851:12;31864;;;;;;31851:26;;;;;;;;;;;;;;31879:12;31892:10;31879:24;;;;;;;31841:63;31811:27;;31824:13;;;;31811:12;;:27;;;;;;;;;;;:93;;;;;31928:1;31914:15;;;;31948:1;31939:10;;;;31777:181;31979:10;31970:5;:19;31966:265;;32014:10;32005:5;:19;32001:100;;;32066:12;32079:10;32066:24;;;;;;;;;;;;;;32038:12;32051:11;32038:25;;;;;;;;;;;;;:52;;;;;32001:100;32175:1;32160:16;;;;32124:1;;-1:-1:-1;32124:1:4;;-1:-1:-1;32186:12:4;;;;;;;-1:-1:-1;31966:265:4;31411:826;;;32251:4;32257:12;32270:1;32257:15;;;;;;;;;;;;;;32243:30;;;;;;;;;;30846:1432;;;;;;:::o;27190:548::-;27332:12;27346:15;27371:19;27393:39;27421:5;;27427:1;27421:8;;;;;;;;;;;;;27413:17;;27393:12;:39::i;:::-;27371:61;;;;27445:5;;27451:11;27445:18;;;;;;;;;;;;;27438:25;;27483:28;27493:4;27499:11;27483:9;:28::i;:::-;27469:42;;27518:183;27539:1;27525:11;:15;27518:183;;;27550:16;;27584:5;;27550:16;27584:18;;;;;;;;;;;;;27574:28;;27624:31;27634:7;27643:11;27624:9;:31::i;:::-;27610:45;;27670:24;27680:7;27689:4;27670:9;:24::i;:::-;27663:31;;27518:183;;;-1:-1:-1;27190:548:4;;;-1:-1:-1;;;27190:548:4:o;420:165::-;512:12;539:5;:41;;565:15;575:1;578;565:9;:15::i;:::-;539:41;;;547:15;557:1;560;547:9;:15::i;653:219::-;737:1;732:6;;;742:10;731:21;726:27;;789:1;784:6;;;794:10;783:21;;;764:14;;763:42;832:1;827:6;;;;;822:12;838:9;821:26;851:9;820:40;865:2;819:48;;;;653:219::o;14:404:5:-;;;147:3;140:4;132:6;128:17;124:27;114:2;;172:8;162;155:26;114:2;-1:-1:-1;202:20:5;;245:18;234:30;;231:2;;;284:8;274;267:26;231:2;328:4;320:6;316:17;304:29;;391:3;384:4;376;368:6;364:17;356:6;352:30;348:41;345:50;342:2;;;408:1;405;398:12;342:2;104:314;;;;;:::o;423:377::-;;;540:3;533:4;525:6;521:17;517:27;507:2;;565:8;555;548:26;507:2;-1:-1:-1;595:20:5;;638:18;627:30;;624:2;;;677:8;667;660:26;624:2;721:4;713:6;709:17;697:29;;773:3;766:4;757:6;749;745:19;741:30;738:39;735:2;;;790:1;787;780:12;805:259;;917:2;905:9;896:7;892:23;888:32;885:2;;;938:6;930;923:22;885:2;982:9;969:23;1001:33;1028:5;1001:33;:::i;1341:472::-;;;;;1512:3;1500:9;1491:7;1487:23;1483:33;1480:2;;;1534:6;1526;1519:22;1480:2;1578:9;1565:23;1597:33;1624:5;1597:33;:::i;:::-;1649:5;1701:2;1686:18;;1673:32;;-1:-1:-1;1752:2:5;1737:18;;1724:32;;1803:2;1788:18;1775:32;;-1:-1:-1;1470:343:5;-1:-1:-1;;;1470:343:5:o;1818:1170::-;;;;;;;;;2096:3;2084:9;2075:7;2071:23;2067:33;2064:2;;;2118:6;2110;2103:22;2064:2;2162:9;2149:23;2181:33;2208:5;2181:33;:::i;:::-;2233:5;-1:-1:-1;2289:2:5;2274:18;;2261:32;2312:18;2342:14;;;2339:2;;;2374:6;2366;2359:22;2339:2;2418:76;2486:7;2477:6;2466:9;2462:22;2418:76;:::i;:::-;2513:8;;-1:-1:-1;2392:102:5;-1:-1:-1;2595:2:5;2580:18;;2567:32;;-1:-1:-1;2646:2:5;2631:18;;2618:32;;-1:-1:-1;2703:3:5;2688:19;;2675:33;;-1:-1:-1;2720:16:5;;;2717:2;;;2754:6;2746;2739:22;2717:2;;2798:78;2868:7;2857:8;2846:9;2842:24;2798:78;:::i;:::-;2054:934;;;;-1:-1:-1;2054:934:5;;;;;;2772:104;;2977:3;2962:19;2949:33;;2054:934;-1:-1:-1;;;;2054:934:5:o;2993:464::-;;;;;3156:3;3144:9;3135:7;3131:23;3127:33;3124:2;;;3178:6;3170;3163:22;3462:894;;;;;;3689:2;3677:9;3668:7;3664:23;3660:32;3657:2;;;3710:6;3702;3695:22;3657:2;3755:9;3742:23;3784:18;3825:2;3817:6;3814:14;3811:2;;;3846:6;3838;3831:22;3811:2;3890:76;3958:7;3949:6;3938:9;3934:22;3890:76;:::i;:::-;3985:8;;-1:-1:-1;3864:102:5;-1:-1:-1;4067:2:5;4052:18;;4039:32;;-1:-1:-1;4124:2:5;4109:18;;4096:32;;-1:-1:-1;4140:16:5;;;4137:2;;;4174:6;4166;4159:22;4137:2;;4218:78;4288:7;4277:8;4266:9;4262:24;4218:78;:::i;:::-;3647:709;;;;-1:-1:-1;3647:709:5;;-1:-1:-1;4315:8:5;;4192:104;3647:709;-1:-1:-1;;;3647:709:5:o;4361:1032::-;;;;;;;;4622:3;4610:9;4601:7;4597:23;4593:33;4590:2;;;4644:6;4636;4629:22;4590:2;4689:9;4676:23;4718:18;4759:2;4751:6;4748:14;4745:2;;;4780:6;4772;4765:22;4745:2;4824:76;4892:7;4883:6;4872:9;4868:22;4824:76;:::i;:::-;4919:8;;-1:-1:-1;4798:102:5;-1:-1:-1;5001:2:5;4986:18;;4973:32;;-1:-1:-1;5052:2:5;5037:18;;5024:32;;-1:-1:-1;5109:2:5;5094:18;;5081:32;;-1:-1:-1;5125:16:5;;;5122:2;;;5159:6;5151;5144:22;5122:2;;5203:78;5273:7;5262:8;5251:9;5247:24;5203:78;:::i;:::-;4580:813;;;;-1:-1:-1;4580:813:5;;;;;;5382:3;5367:19;;;5354:33;;4580:813;-1:-1:-1;;;;4580:813:5:o;5398:190::-;;5510:2;5498:9;5489:7;5485:23;5481:32;5478:2;;;5531:6;5523;5516:22;5478:2;-1:-1:-1;5559:23:5;;5468:120;-1:-1:-1;5468:120:5:o;5593:194::-;;5716:2;5704:9;5695:7;5691:23;5687:32;5684:2;;;5737:6;5729;5722:22;5684:2;-1:-1:-1;5765:16:5;;5674:113;-1:-1:-1;5674:113:5:o;5792:1239::-;;;;;;;;;;;6104:3;6092:9;6083:7;6079:23;6075:33;6072:2;;;6126:6;6118;6111:22;6072:2;6167:9;6154:23;6144:33;;6228:2;6217:9;6213:18;6200:32;6251:18;6292:2;6284:6;6281:14;6278:2;;;6313:6;6305;6298:22;6278:2;6357:76;6425:7;6416:6;6405:9;6401:22;6357:76;:::i;:::-;6452:8;;-1:-1:-1;6331:102:5;-1:-1:-1;6540:2:5;6525:18;;6512:32;;-1:-1:-1;6556:16:5;;;6553:2;;;6590:6;6582;6575:22;6553:2;;6634:78;6704:7;6693:8;6682:9;6678:24;6634:78;:::i;:::-;6062:969;;;;-1:-1:-1;6062:969:5;;6731:8;;6608:104;6813:2;6798:18;;6785:32;;6864:3;6849:19;;6836:33;;-1:-1:-1;6916:3:5;6901:19;;6888:33;;-1:-1:-1;6968:3:5;6953:19;;6940:33;;-1:-1:-1;7020:3:5;7005:19;6992:33;;-1:-1:-1;6062:969:5;-1:-1:-1;;;;6062:969:5:o;7036:431::-;;;7167:2;7155:9;7146:7;7142:23;7138:32;7135:2;;;7188:6;7180;7173:22;7135:2;7233:9;7220:23;7266:18;7258:6;7255:30;7252:2;;;7303:6;7295;7288:22;7252:2;7347:60;7399:7;7390:6;7379:9;7375:22;7347:60;:::i;:::-;7426:8;;7321:86;;-1:-1:-1;7125:342:5;-1:-1:-1;;;;7125:342:5:o;7472:851::-;;;;;;7672:2;7660:9;7651:7;7647:23;7643:32;7640:2;;;7693:6;7685;7678:22;7640:2;7738:9;7725:23;7767:18;7808:2;7800:6;7797:14;7794:2;;;7829:6;7821;7814:22;7794:2;7873:60;7925:7;7916:6;7905:9;7901:22;7873:60;:::i;8328:989::-;;;;;;;;8562:3;8550:9;8541:7;8537:23;8533:33;8530:2;;;8584:6;8576;8569:22;8530:2;8629:9;8616:23;8658:18;8699:2;8691:6;8688:14;8685:2;;;8720:6;8712;8705:22;8685:2;8764:60;8816:7;8807:6;8796:9;8792:22;8764:60;:::i;:::-;8843:8;;-1:-1:-1;8738:86:5;-1:-1:-1;8925:2:5;8910:18;;8897:32;;-1:-1:-1;8976:2:5;8961:18;;8948:32;;-1:-1:-1;9033:2:5;9018:18;;9005:32;;-1:-1:-1;9049:16:5;;;9046:2;;;9083:6;9075;9068:22;9322:567;;;;;9487:2;9475:9;9466:7;9462:23;9458:32;9455:2;;;9508:6;9500;9493:22;9455:2;9553:9;9540:23;9586:18;9578:6;9575:30;9572:2;;;9623:6;9615;9608:22;9572:2;9667:60;9719:7;9710:6;9699:9;9695:22;9667:60;:::i;:::-;9746:8;;9641:86;;-1:-1:-1;9828:2:5;9813:18;;9800:32;;9879:2;9864:18;9851:32;;-1:-1:-1;9445:444:5;-1:-1:-1;;;;9445:444:5:o;9894:416::-;;10101:66;10093:6;10089:79;10084:3;10077:92;10212:6;10204;10200:1;10195:3;10191:11;10178:41;10242:16;;10260:1;10238:24;10271:15;;;10238:24;10067:243;-1:-1:-1;;10067:243:5:o;10315:312::-;10500:19;;;10544:2;10535:12;;10528:28;;;;10581:2;10572:12;;10565:28;10618:2;10609:12;;10490:137::o;10632:226::-;10808:42;10796:55;;;;10778:74;;10766:2;10751:18;;10733:125::o;10863:177::-;11009:25;;;10997:2;10982:18;;10964:76::o;11045:450::-;;11202:2;11191:9;11184:21;11241:6;11236:2;11225:9;11221:18;11214:34;11298:6;11290;11285:2;11274:9;11270:18;11257:48;11325:22;;;11349:2;11321:31;;;11314:45;;;;11411:2;11399:15;;;11416:66;11395:88;11380:104;11376:113;;11174:321;-1:-1:-1;11174:321:5:o;11767:334::-;11969:2;11951:21;;;12008:2;11988:18;;;11981:30;12047:12;12042:2;12027:18;;12020:40;12092:2;12077:18;;11941:160::o;12106:345::-;12308:2;12290:21;;;12347:2;12327:18;;;12320:30;12386:23;12381:2;12366:18;;12359:51;12442:2;12427:18;;12280:171::o;12456:341::-;12658:2;12640:21;;;12697:2;12677:18;;;12670:30;12736:19;12731:2;12716:18;;12709:47;12788:2;12773:18;;12630:167::o;12802:340::-;13004:2;12986:21;;;13043:2;13023:18;;;13016:30;13082:18;13077:2;13062:18;;13055:46;13133:2;13118:18;;12976:166::o;13147:343::-;13349:2;13331:21;;;13388:2;13368:18;;;13361:30;13427:21;13422:2;13407:18;;13400:49;13481:2;13466:18;;13321:169::o;13495:342::-;13697:2;13679:21;;;13736:2;13716:18;;;13709:30;13775:20;13770:2;13755:18;;13748:48;13828:2;13813:18;;13669:168::o;13842:337::-;14044:2;14026:21;;;14083:2;14063:18;;;14056:30;14122:15;14117:2;14102:18;;14095:43;14170:2;14155:18;;14016:163::o;14184:340::-;14386:2;14368:21;;;14425:2;14405:18;;;14398:30;14464:18;14459:2;14444:18;;14437:46;14515:2;14500:18;;14358:166::o;14529:336::-;14731:2;14713:21;;;14770:2;14750:18;;;14743:30;14809:14;14804:2;14789:18;;14782:42;14856:2;14841:18;;14703:162::o;14870:337::-;15072:2;15054:21;;;15111:2;15091:18;;;15084:30;15150:15;15145:2;15130:18;;15123:43;15198:2;15183:18;;15044:163::o;15212:336::-;15414:2;15396:21;;;15453:2;15433:18;;;15426:30;15492:14;15487:2;15472:18;;15465:42;15539:2;15524:18;;15386:162::o;15553:340::-;15755:2;15737:21;;;15794:2;15774:18;;;15767:30;15833:18;15828:2;15813:18;;15806:46;15884:2;15869:18;;15727:166::o;15898:344::-;16100:2;16082:21;;;16139:2;16119:18;;;16112:30;16178:22;16173:2;16158:18;;16151:50;16233:2;16218:18;;16072:170::o;16247:345::-;16449:2;16431:21;;;16488:2;16468:18;;;16461:30;16527:23;16522:2;16507:18;;16500:51;16583:2;16568:18;;16421:171::o;16597:341::-;16799:2;16781:21;;;16838:2;16818:18;;;16811:30;16877:19;16872:2;16857:18;;16850:47;16929:2;16914:18;;16771:167::o;16943:344::-;17145:2;17127:21;;;17184:2;17164:18;;;17157:30;17223:22;17218:2;17203:18;;17196:50;17278:2;17263:18;;17117:170::o;17292:343::-;17494:2;17476:21;;;17533:2;17513:18;;;17506:30;17572:21;17567:2;17552:18;;17545:49;17626:2;17611:18;;17466:169::o;17640:340::-;17842:2;17824:21;;;17881:2;17861:18;;;17854:30;17920:18;17915:2;17900:18;;17893:46;17971:2;17956:18;;17814:166::o;17985:338::-;18187:2;18169:21;;;18226:2;18206:18;;;18199:30;18265:16;18260:2;18245:18;;18238:44;18314:2;18299:18;;18159:164::o;18328:341::-;18530:2;18512:21;;;18569:2;18549:18;;;18542:30;18608:19;18603:2;18588:18;;18581:47;18660:2;18645:18;;18502:167::o;18674:344::-;18876:2;18858:21;;;18915:2;18895:18;;;18888:30;18954:22;18949:2;18934:18;;18927:50;19009:2;18994:18;;18848:170::o;19023:336::-;19225:2;19207:21;;;19264:2;19244:18;;;19237:30;19303:14;19298:2;19283:18;;19276:42;19350:2;19335:18;;19197:162::o;19364:341::-;19566:2;19548:21;;;19605:2;19585:18;;;19578:30;19644:19;19639:2;19624:18;;19617:47;19696:2;19681:18;;19538:167::o;19892:592::-;;;20035:11;20022:25;20125:66;20114:8;20098:14;20094:29;20090:102;20070:18;20066:127;20056:2;;20210:4;20204;20197:18;20056:2;20240:33;;20292:20;;;-1:-1:-1;20335:18:5;20324:30;;20321:2;;;20370:4;20364;20357:18;20321:2;20406:4;20394:17;;-1:-1:-1;20437:14:5;20433:27;;;20423:38;;20420:2;;;20474:1;20471;20464:12;20489:363;;;20647:8;20635:10;20632:24;20629:2;;;20677:9;20666;20659:28;20629:2;20714:6;20704:8;20701:20;20698:2;;;20742:9;20731;20724:28;20698:2;-1:-1:-1;;20776:23:5;;;20821:25;;;;;-1:-1:-1;20619:233:5:o;20857:156::-;20945:42;20938:5;20934:54;20927:5;20924:65;20914:2;;21003:1;21000;20993:12",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <=0.7.3;\npragma experimental ABIEncoderV2;\n\nimport \"merkle-trees/eth/contracts/internal-merkle-library.sol\";\nimport \"./optimistic-roll-in-compatible.sol\";\n\n// TODO: perhaps a owner-controlled sighash whitelist for optimistically performing, and therefore a non-performing exit method\n// TODO: consider verifying being view, or some kind of forced \"come up for air\" mechanism\n// TODO: make required bond queryable\n// TODO: logic_address cannot be immutable if it will be upgradeable\n\ncontract Optimistic_Roll_In {\n  event ORI_New_State(address indexed user, bytes32 indexed new_state);\n  event ORI_New_Optimistic_State(address indexed user, uint256 indexed block_time);\n  event ORI_New_Optimistic_States(address indexed user, uint256 indexed block_time);\n  event ORI_Locked(address indexed suspect, address indexed accuser);\n  event ORI_Unlocked(address indexed suspect, address indexed accuser, uint256 indexed block_time);\n  event ORI_Fraud_Proven(address indexed accuser, address indexed suspect, uint256 indexed transition_index);\n  event ORI_Rolled_Back(address indexed user, uint256 indexed tree_size, uint256 indexed block_time);\n\n  Optimistic_Roll_In_Compatible public immutable logic_contract;\n  uint256 public immutable lock_time;\n  uint256 public immutable required_bond;\n\n  mapping(address => bytes32) public account_states;\n  mapping(address => uint256) public balances;\n  mapping(address => address) public lockers;\n  mapping(address => uint256) public locked_timestamps;\n  mapping(address => uint256) public rollback_sizes;\n\n  constructor(\n    address _logic_address,\n    uint256 _lock_time,\n    uint256 _required_bond\n  ) {\n    logic_contract = Optimistic_Roll_In_Compatible(_logic_address);\n    lock_time = _lock_time;\n    required_bond = _required_bond;\n  }\n\n  modifier initialized(address user) {\n    require(account_states[user] != bytes32(0), \"ALREADY_INITIALIZED\");\n    _;\n  }\n\n  modifier not_initialized(address user) {\n    require(account_states[user] == bytes32(0), \"ALREADY_INITIALIZED\");\n    _;\n  }\n\n  modifier not_locked(address user) {\n    require(lockers[user] == address(0), \"ACCOUNT_LOCKED\");\n    _;\n  }\n\n  modifier is_locked(address user) {\n    require(lockers[user] != address(0), \"ACCOUNT_UNLOCKED\");\n    _;\n  }\n\n  modifier no_rollback_required(address user) {\n    require(rollback_sizes[user] == 0, \"ROLLBACK_REQUIRED\");\n    _;\n  }\n\n  modifier can_exit_optimism(uint256 last_time) {\n    // Check that enough time has elapsed for potential fraud proofs (10 minutes)\n    require(last_time + lock_time < block.timestamp, \"INSUFFICIENT_TIME\");\n    _;\n  }\n\n  modifier sufficient_calldata(bytes[] calldata call_data) {\n    // Check that there is more than 1 call data (if not, user should have called perform_optimistically)\n    require(call_data.length > 1, \"INSUFFICIENT_CALLDATA\");\n    _;\n  }\n\n  modifier lock_expired(address user) {\n    require(locked_timestamps[user] + lock_time <= block.timestamp, \"INSUFFICIENT_WINDOW\");\n    _;\n  }\n\n  // Fallback to receive ETH and bond msg.value for msg.sender\n  receive() external payable {\n    apply_bond(msg.sender);\n  }\n\n  // Bonds amount for user, and reverts if resulting balance less than 1 ETH\n  function apply_bond(address user) internal returns (uint256 remainder) {\n    if (balances[user] == required_bond) return msg.value;\n\n    require(msg.value >= required_bond, \"INSUFFICIENT_BOND\");\n\n    balances[user] = required_bond;\n    return msg.value - required_bond;\n  }\n\n  // Bonds msg.value for user\n  function bond(address user) external payable {\n    require(apply_bond(user) == 0, \"INVALID_BOND\");\n  }\n\n  // Sets user's account state to starting point, and bonds msg.value\n  function initialize() external payable not_initialized(msg.sender) {\n    address user = msg.sender;\n    uint256 remainder = apply_bond(user);\n\n    // call the initializer, passing any remaining amount and get initial state (S_0)\n    bytes32 initial_state = logic_contract.initialize_state{ value: remainder }(user);\n\n    // Set account state to combination of empty call data tree, initial state (S_0), and last time of 0 (not in optimism)\n    account_states[user] = keccak256(abi.encodePacked(bytes32(0), initial_state, bytes32(0)));\n\n    emit ORI_New_State(user, initial_state);\n  }\n\n  // Allows unbonding of ETH if account not locked (clears account state)\n  function unbond(address payable destination) external not_locked(msg.sender) {\n    address user = msg.sender;\n    uint256 amount = balances[user];\n    balances[user] = 0;\n    account_states[user] = bytes32(0);\n    destination.transfer(amount);\n  }\n\n  // Withdraws entire balance if no account state, or all minus bond if an account state exists\n  function withdraw(address payable destination) external not_locked(msg.sender) {\n    address user = msg.sender;\n    bool account_exists = account_states[user] != bytes32(0);\n    uint256 account_balance = balances[user];\n    uint256 amount = account_exists ? account_balance - required_bond : account_balance;\n\n    // Check for underflow\n    require(amount <= account_balance, \"UNEXPECTED_UNDERFLOW\");\n\n    balances[user] = account_balance - amount;\n    destination.transfer(amount);\n  }\n\n  // Allows unbonding of all user's ETH balance if account has or can have non-optimistic state\n  function archive(\n    address payable destination,\n    bytes32 call_data_root,\n    bytes32 state,\n    uint256 last_time\n  ) external not_locked(msg.sender) can_exit_optimism(last_time) {\n    address user = msg.sender;\n\n    // Check that the user it not in an optimistic state, which means that their account state is\n    // a call data tree, current state (S_n), and the last block\n    require(\n      keccak256(abi.encodePacked(call_data_root, state, bytes32(last_time))) == account_states[user],\n      \"INVALID_ROOTS\"\n    );\n\n    // Set the account state to an empty call data tree, current state (S_n), and last time 0\n    account_states[user] = keccak256(abi.encodePacked(bytes32(0), state, bytes32(0)));\n\n    // Make user their own locker, requiring them to unlock if they wish to unarchive\n    lockers[user] = user;\n    \n    uint256 amount = balances[user];\n    balances[user] = 0;\n    destination.transfer(amount);\n  }\n\n  // Bonds msg.value for user of an archived account (that they have locked)\n  function unarchive() is_locked(msg.sender) external payable {\n    address user = msg.sender;\n\n    require(apply_bond(user) == 0, \"INVALID_BOND\");\n\n    lockers[user] = address(0);\n  }\n\n  // Returns true if calling the logic contract with the call data results in new state\n  function verify_transition(\n    address user,\n    bytes calldata call_data,\n    bytes32 new_state\n  ) internal view returns (bool) {\n    // Check that the user is the user extracted from calldata (20 bytes starting after the function signature)\n    if (user != abi.decode(call_data[4:], (address))) return false;\n\n    // Compute a new state\n    try logic_contract.optimistic_call(call_data) returns (bytes32 state) {\n      return state == new_state;\n    } catch {\n      return false;\n    }\n  }\n\n  // Calls logic contract and updates account state\n  function normal_perform(\n    address caller,\n    bytes calldata call_data,\n    bytes32 call_data_root,\n    uint256 last_time\n  ) internal not_locked(caller) {\n    // Check that the caller is the user extracted from calldata (20 bytes starting after the function signature)\n    require(caller == abi.decode(call_data[4:], (address)), \"CALLER_USER_MISMATCH\");\n\n    // Extract current state (S_n or S_0) from calldata (32 bytes starting after the sig and user)\n    bytes32 state = abi.decode(call_data[36:], (bytes32));\n\n    // Check that the user it not in an optimistic state, which means that their account state is\n    // a call data tree, current state (S_n or S_0), and the last block is 0\n    require(\n      keccak256(abi.encodePacked(call_data_root, state, bytes32(last_time))) == account_states[caller],\n      \"INVALID_ROOTS\"\n    );\n\n    // Compute a new state (S_n+1 or S_1), reusing the state variable\n    state = logic_contract.pessimistic_call{ value: msg.value }(call_data);\n\n    // Set the account state to an empty call data tree, the new state (S_n+1 or S_1), and last time 0\n    account_states[caller] = keccak256(abi.encodePacked(bytes32(0), state, bytes32(0)));\n\n    emit ORI_New_State(caller, state);\n  }\n\n  // Set the account state to the on-chain computed new state, if the account is not locked\n  function perform(bytes calldata call_data) external payable {\n    normal_perform(msg.sender, call_data, bytes32(0), 0);\n  }\n\n  // Exits optimism by setting the account state to the on-chain computed new state, if the account is not locked\n  function perform_and_exit(\n    bytes calldata call_data,\n    bytes32 call_data_root,\n    uint256 last_time\n  ) external payable no_rollback_required(msg.sender) can_exit_optimism(last_time) {\n    normal_perform(msg.sender, call_data, call_data_root, last_time);\n  }\n\n  // Updates account state with optimistic transition data\n  function optimistic_perform(\n    address caller,\n    bytes calldata call_data,\n    bytes32 new_state,\n    bytes32 call_data_root,\n    bytes32[] calldata proof,\n    uint256 last_time\n  ) internal not_locked(caller) {\n    // Extract current state (S_0) from call data (32 bytes starting after sig and user)\n    bytes32 state = abi.decode(call_data[36:], (bytes32));\n\n    // Check that the user it not in an optimistic state, which means that their account state is\n    // a call data tree, current state (S_0), and the last block\n    require(\n      keccak256(abi.encodePacked(call_data_root, state, bytes32(last_time))) == account_states[caller],\n      \"INVALID_ROOTS\"\n    );\n\n    // Get root of new merkle tree with 1 call data element (CD_0), reusing state as call_data_root\n    state = Internal_Merkle_Library.try_append_one_c(call_data_root, call_data, proof);\n\n    // Combine call data root, new state (S_1), and current time into account state\n    account_states[caller] = keccak256(abi.encodePacked(state, new_state, bytes32(block.timestamp)));\n\n    emit ORI_New_Optimistic_State(caller, block.timestamp);\n  }\n\n  // Enters optimism by updating the account state optimistically with call data and a new state, if the account is not locked\n  function perform_optimistically_and_enter(\n    bytes calldata call_data,\n    bytes32 new_state,\n    bytes32[] calldata proof\n  ) external {\n    optimistic_perform(msg.sender, call_data, new_state, bytes32(0), proof, 0);\n  }\n\n  // Updates the account state optimistically with call data and a new state, if the account is not locked\n  function perform_optimistically(\n    bytes calldata call_data,\n    bytes32 new_state,\n    bytes32 call_data_root,\n    bytes32[] calldata proof,\n    uint256 last_time\n  ) external {\n    optimistic_perform(msg.sender, call_data, new_state, call_data_root, proof, last_time);\n  }\n\n  // Updates account state with optimistic batch transition data\n  function optimistic_perform_many(\n    address user,\n    bytes[] calldata call_data,\n    bytes32 new_state,\n    bytes32 call_data_root,\n    bytes32[] calldata proof,\n    uint256 last_time\n  ) internal not_locked(user) sufficient_calldata(call_data) {\n    // Extract current state (S_n) from first call data (32 bytes starting after sig and user)\n    bytes32 state = abi.decode(call_data[0][36:], (bytes32));\n\n    // Check that the call data root, current state (S_n), and last time are valid for this user\n    require(\n      keccak256(abi.encodePacked(call_data_root, state, bytes32(last_time))) == account_states[user],\n      \"INVALID_ROOTS\"\n    );\n\n    // Get new merkle root of call data tree, appending several call data (CD_n - CD_n+m), reusing state as call_data_root\n    state = Internal_Merkle_Library.try_append_many_c(call_data_root, call_data, proof);\n\n    // Combine call data root, new state (S_n+m), and current time into account state\n    account_states[user] = keccak256(abi.encodePacked(state, new_state, bytes32(block.timestamp)));\n\n    emit ORI_New_Optimistic_States(user, block.timestamp);\n  }\n\n  // Enters optimism by updating the account state optimistically with several call data and final state, if the account is not locked\n  function perform_many_optimistically_and_enter(\n    bytes[] calldata call_data,\n    bytes32 new_state,\n    bytes32[] calldata proof\n  ) external {\n    optimistic_perform_many(msg.sender, call_data, new_state, bytes32(0), proof, 0);\n  }\n\n  // Updates the account state optimistically with several call data and final state, if the account is not locked\n  function perform_many_optimistically(\n    bytes[] calldata call_data,\n    bytes32 new_state,\n    bytes32 call_data_root,\n    bytes32[] calldata proof,\n    uint256 last_time\n  ) external {\n    optimistic_perform_many(msg.sender, call_data, new_state, call_data_root, proof, last_time);\n  }\n\n  // Lock two users (suspect and accuser)\n  // Note: accuser and suspect cannot already be locked, but this might have to change so a single accuser isn't overwhelmed with fraud\n  function lock(address suspect) external payable not_locked(msg.sender) not_locked(suspect) {\n    address accuser = msg.sender;\n\n    // Lock both the accuser and the suspect\n    lockers[suspect] = accuser;\n    locked_timestamps[suspect] = block.timestamp;\n    lockers[accuser] = accuser;\n    locked_timestamps[accuser] = block.timestamp;\n\n    // The accuser may be trying to bond at the same time (this also check that have enough bonded)\n    require(apply_bond(accuser) == 0, \"INVALID_BOND\");\n\n    emit ORI_Locked(suspect, accuser);\n  }\n\n  // Unlock two users (suspect and accuser)\n  function unlock(\n    address suspect,\n    bytes32 state,\n    bytes32 call_data_root,\n    uint256 last_time\n  ) external is_locked(suspect) lock_expired(suspect) no_rollback_required(suspect) {\n    // Check that the call data root, current state (S_n), and last time are valid for this user\n    require(\n      keccak256(abi.encodePacked(call_data_root, state, bytes32(last_time))) == account_states[suspect],\n      \"INVALID_ROOTS\"\n    );\n\n    // Unlock both accounts\n    address accuser = lockers[suspect];\n    lockers[suspect] = address(0);\n    locked_timestamps[suspect] = 0;\n    lockers[accuser] = address(0);\n    locked_timestamps[accuser] = 0;\n\n    // Give the suspect the accuser's bond for having not proven fraud within a reasonable time frame\n    // TODO: consider burning some here to prevent self-reporting breakeven\n    uint256 amount = balances[accuser];\n    balances[accuser] = 0;\n    balances[suspect] += amount;\n\n    // If suspect was not in optimistic state, then just emit event and return\n    if (last_time == 0) {\n      emit ORI_Unlocked(suspect, accuser, 0);\n      return;\n    }\n\n    // Combine call data root, current state (S_n), and current time into account state\n    // Note: updating last time is important, to prevent suspect blocking fraud proofs by locking themselves\n    account_states[suspect] = keccak256(abi.encodePacked(call_data_root, state, bytes32(block.timestamp)));\n\n    emit ORI_Unlocked(suspect, accuser, block.timestamp);\n  }\n\n  // Reward accuser for proving fraud in a suspect's transition, and track the expected rolled back account state size\n  function prove_fraud(\n    address suspect,\n    bytes[] calldata call_data,\n    bytes32 state,\n    bytes32 call_data_root,\n    bytes32[] calldata proof,\n    uint256 last_time\n  ) external is_locked(suspect) {\n    address accuser = msg.sender;\n\n    // Only the user that flagged/locked the suspect can prove fraud\n    require(lockers[suspect] == accuser, \"NOT_LOCKER\");\n\n    // Check that the call data root, current state (S_n), and last time are valid for this user\n    require(\n      keccak256(abi.encodePacked(call_data_root, state, bytes32(last_time))) == account_states[suspect],\n      \"INVALID_ROOTS\"\n    );\n\n    // Check that the call data exist\n    require(Internal_Merkle_Library.elements_exist_c(call_data_root, call_data, proof), \"INVALID_CALLDATA\");\n\n    // get the indices of the call data in the call data tre\n    uint256[] memory call_data_indices = Internal_Merkle_Library.get_indices(call_data, proof);\n\n    // The transition index is the index of the starting call data of the fraud proof\n    uint256 transition_index = call_data_indices[0];\n\n    // If only one call data is provided, the fraud involves the last call data and current state\n    if (call_data.length == 1) {\n      // Check that the call data index is the last (call data tree size minus 1)\n      require(transition_index + 1 == uint256(proof[0]), \"INCORRECT_CALLDATA\");\n\n      // Fail if the state transition was valid\n      require(verify_transition(suspect, call_data[0], state) == false, \"VALID_TRANSITION\");\n    } else {\n      // Check that call data provided are consecutive\n      require(transition_index + 1 == call_data_indices[1]);\n\n      // Extract new state from second call data (32 bytes starting after the sig and user), reusing state var\n      state = abi.decode(call_data[1][36:], (bytes32));\n\n      // Fail if the state transition was valid\n      require(verify_transition(suspect, call_data[0], state) == false, \"VALID_TRANSITION\");\n    }\n\n    // Take the suspect's bond and give it to the accuser, reusing last_time var\n    // TODO: consider burning some here to prevent self-reporting breakeven\n    last_time = balances[suspect];\n    balances[suspect] = 0;\n    balances[accuser] += last_time;\n\n    // Unlock the accuser's account\n    lockers[accuser] = address(0);\n    locked_timestamps[accuser] = 0;\n\n    // Set the rollback size to the amount of elements that should be in the call data tree once rolled back\n    rollback_sizes[suspect] = transition_index;\n\n    // Set the suspect as the reason for their account's lock\n    lockers[suspect] = suspect;\n    locked_timestamps[suspect] = 0;\n\n    emit ORI_Fraud_Proven(accuser, suspect, transition_index);\n  }\n\n  // Rolls a user back, given the current roots, old roots, and a proof of the optimistic transitions between them\n  function rollback(\n    bytes32 rolled_back_call_data_root,\n    bytes[] calldata rolled_back_call_data,\n    bytes32[] calldata roll_back_proof,\n    uint256 current_size,\n    bytes32 current_size_proof,\n    bytes32 call_data_root,\n    bytes32 state,\n    uint256 last_time\n  ) external payable {\n    address user = msg.sender;\n    uint256 expected_size = rollback_sizes[user];\n    require(expected_size != 0, \"ROLLBACK_UNNECESSARY\");\n\n    // Check that the call data root, current state (S_n), and last time are valid for this user\n    require(\n      keccak256(abi.encodePacked(call_data_root, state, bytes32(last_time))) == account_states[user],\n      \"INVALID_ROOTS\"\n    );\n\n    // Check that the provided size of the current call data tree is correct\n    require(Internal_Merkle_Library.verify_size(call_data_root, current_size, current_size_proof), \"INVALID_SIZE\");\n\n    // Allow incremental roll back by checking that the rolled back call data tree is smaller than the current tree\n    uint256 rolled_back_size = uint256(roll_back_proof[0]);\n    require(rolled_back_size < current_size, \"INSUFFICIENT_ROLLBACK\");\n\n    // Check that this is not rolling back too far, though\n    require(rolled_back_size >= expected_size, \"ROLLBACK_TOO_DEEP\");\n\n    // Check that the current call data root is derived by appending the rolled back call data to the rolled back call data root\n    require(\n      Internal_Merkle_Library.try_append_many_c(rolled_back_call_data_root, rolled_back_call_data, roll_back_proof) ==\n        call_data_root,\n      \"INVALID_ROLLBACK\"\n    );\n\n    // Extract new state from first rolled back call data (32 bytes starting after the sig and user), reusing state var\n    state = abi.decode(rolled_back_call_data[0][36:], (bytes32));\n\n    // Combine rolled back call data root, new state (S_n-m), and current time into account state\n    account_states[user] = keccak256(abi.encodePacked(rolled_back_call_data_root, state, bytes32(block.timestamp)));\n\n    // Unlock the user and clear the rollback flag, if roll back is complete\n    if (rolled_back_size == expected_size) {\n      lockers[user] = address(0);\n      rollback_sizes[user] = 0;\n    }\n\n    // The user may be trying to bond at the same time (this also check that have enough bonded)\n    require(apply_bond(user) == 0, \"INVALID_BOND\");\n\n    emit ORI_Rolled_Back(user, rolled_back_size, block.timestamp);\n  }\n}\n",
  "sourcePath": "/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/optimistic-roll-in.sol",
  "ast": {
    "absolutePath": "/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/optimistic-roll-in.sol",
    "exportedSymbols": {
      "Internal_Merkle_Library": [
        12016
      ],
      "Optimistic_Roll_In": [
        1655
      ],
      "Optimistic_Roll_In_Compatible": [
        61
      ]
    },
    "id": 1656,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 63,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0",
          "<=",
          "0.7",
          ".3"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:32:2"
      },
      {
        "id": 64,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:2"
      },
      {
        "absolutePath": "merkle-trees/eth/contracts/internal-merkle-library.sol",
        "file": "merkle-trees/eth/contracts/internal-merkle-library.sol",
        "id": 65,
        "nodeType": "ImportDirective",
        "scope": 1656,
        "sourceUnit": 12017,
        "src": "101:64:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/optimistic-roll-in-compatible.sol",
        "file": "./optimistic-roll-in-compatible.sol",
        "id": 66,
        "nodeType": "ImportDirective",
        "scope": 1656,
        "sourceUnit": 62,
        "src": "166:45:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 1655,
        "linearizedBaseContracts": [
          1655
        ],
        "name": "Optimistic_Roll_In",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "id": 72,
            "name": "ORI_New_State",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 71,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 68,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 72,
                  "src": "592:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "592:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 72,
                  "src": "614:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 69,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "614:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "591:49:2"
            },
            "src": "572:69:2"
          },
          {
            "anonymous": false,
            "id": 78,
            "name": "ORI_New_Optimistic_State",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 77,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 74,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "675:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 73,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "675:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 76,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "block_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "697:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 75,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "697:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "674:50:2"
            },
            "src": "644:81:2"
          },
          {
            "anonymous": false,
            "id": 84,
            "name": "ORI_New_Optimistic_States",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 83,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 80,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 84,
                  "src": "760:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 79,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "760:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 82,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "block_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 84,
                  "src": "782:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 81,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "782:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "759:50:2"
            },
            "src": "728:82:2"
          },
          {
            "anonymous": false,
            "id": 90,
            "name": "ORI_Locked",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 89,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 86,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 90,
                  "src": "830:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 85,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "830:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 88,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "accuser",
                  "nodeType": "VariableDeclaration",
                  "scope": 90,
                  "src": "855:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 87,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "855:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "829:50:2"
            },
            "src": "813:67:2"
          },
          {
            "anonymous": false,
            "id": 98,
            "name": "ORI_Unlocked",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 97,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 92,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 98,
                  "src": "902:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 91,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "902:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 94,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "accuser",
                  "nodeType": "VariableDeclaration",
                  "scope": 98,
                  "src": "927:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 93,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "927:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 96,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "block_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 98,
                  "src": "952:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 95,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "952:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "901:78:2"
            },
            "src": "883:97:2"
          },
          {
            "anonymous": false,
            "id": 106,
            "name": "ORI_Fraud_Proven",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 105,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 100,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "accuser",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1006:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 99,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1006:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 102,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1031:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 101,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1031:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 104,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "transition_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1056:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 103,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1056:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1005:84:2"
            },
            "src": "983:107:2"
          },
          {
            "anonymous": false,
            "id": 114,
            "name": "ORI_Rolled_Back",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 108,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 114,
                  "src": "1115:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 107,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1115:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 110,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "tree_size",
                  "nodeType": "VariableDeclaration",
                  "scope": 114,
                  "src": "1137:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 109,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1137:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 112,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "block_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 114,
                  "src": "1164:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 111,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1164:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1114:77:2"
            },
            "src": "1093:99:2"
          },
          {
            "constant": false,
            "functionSelector": "4de94320",
            "id": 116,
            "mutability": "immutable",
            "name": "logic_contract",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1196:61:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
              "typeString": "contract Optimistic_Roll_In_Compatible"
            },
            "typeName": {
              "id": 115,
              "name": "Optimistic_Roll_In_Compatible",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 61,
              "src": "1196:29:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                "typeString": "contract Optimistic_Roll_In_Compatible"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "480bb7c4",
            "id": 118,
            "mutability": "immutable",
            "name": "lock_time",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1261:34:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 117,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1261:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "b2055400",
            "id": 120,
            "mutability": "immutable",
            "name": "required_bond",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1299:38:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 119,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1299:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "af7b5a41",
            "id": 124,
            "mutability": "mutable",
            "name": "account_states",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1342:49:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
              "typeString": "mapping(address => bytes32)"
            },
            "typeName": {
              "id": 123,
              "keyType": {
                "id": 121,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1350:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1342:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                "typeString": "mapping(address => bytes32)"
              },
              "valueType": {
                "id": 122,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1361:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "27e235e3",
            "id": 128,
            "mutability": "mutable",
            "name": "balances",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1395:43:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 127,
              "keyType": {
                "id": 125,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1403:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1395:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 126,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1414:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "2c8e7a21",
            "id": 132,
            "mutability": "mutable",
            "name": "lockers",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1442:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
              "typeString": "mapping(address => address)"
            },
            "typeName": {
              "id": 131,
              "keyType": {
                "id": 129,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1450:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1442:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                "typeString": "mapping(address => address)"
              },
              "valueType": {
                "id": 130,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1461:7:2",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "7a9f05b5",
            "id": 136,
            "mutability": "mutable",
            "name": "locked_timestamps",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1488:52:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 135,
              "keyType": {
                "id": 133,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1496:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1488:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 134,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1507:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c45481bb",
            "id": 140,
            "mutability": "mutable",
            "name": "rollback_sizes",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1544:49:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 139,
              "keyType": {
                "id": 137,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1552:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1544:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 138,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1563:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 163,
              "nodeType": "Block",
              "src": "1694:137:2",
              "statements": [
                {
                  "expression": {
                    "id": 153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 149,
                      "name": "logic_contract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 116,
                      "src": "1700:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                        "typeString": "contract Optimistic_Roll_In_Compatible"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 151,
                          "name": "_logic_address",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 142,
                          "src": "1747:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 150,
                        "name": "Optimistic_Roll_In_Compatible",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61,
                        "src": "1717:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Optimistic_Roll_In_Compatible_$61_$",
                          "typeString": "type(contract Optimistic_Roll_In_Compatible)"
                        }
                      },
                      "id": 152,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1717:45:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                        "typeString": "contract Optimistic_Roll_In_Compatible"
                      }
                    },
                    "src": "1700:62:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                      "typeString": "contract Optimistic_Roll_In_Compatible"
                    }
                  },
                  "id": 154,
                  "nodeType": "ExpressionStatement",
                  "src": "1700:62:2"
                },
                {
                  "expression": {
                    "id": 157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 155,
                      "name": "lock_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 118,
                      "src": "1768:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 156,
                      "name": "_lock_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 144,
                      "src": "1780:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1768:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 158,
                  "nodeType": "ExpressionStatement",
                  "src": "1768:22:2"
                },
                {
                  "expression": {
                    "id": 161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 159,
                      "name": "required_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 120,
                      "src": "1796:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 160,
                      "name": "_required_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 146,
                      "src": "1812:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1796:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 162,
                  "nodeType": "ExpressionStatement",
                  "src": "1796:30:2"
                }
              ]
            },
            "id": 164,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 147,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 142,
                  "mutability": "mutable",
                  "name": "_logic_address",
                  "nodeType": "VariableDeclaration",
                  "scope": 164,
                  "src": "1615:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 141,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1615:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 144,
                  "mutability": "mutable",
                  "name": "_lock_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 164,
                  "src": "1643:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 143,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1643:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 146,
                  "mutability": "mutable",
                  "name": "_required_bond",
                  "nodeType": "VariableDeclaration",
                  "scope": 164,
                  "src": "1667:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 145,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1667:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1609:84:2"
            },
            "returnParameters": {
              "id": 148,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1694:0:2"
            },
            "scope": 1655,
            "src": "1598:233:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 181,
              "nodeType": "Block",
              "src": "1870:84:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 169,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "1884:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 171,
                          "indexExpression": {
                            "id": 170,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 166,
                            "src": "1899:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1884:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 174,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1916:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1908:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 172,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1908:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1908:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "1884:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f494e495449414c495a4544",
                        "id": 177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1920:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3",
                          "typeString": "literal_string \"ALREADY_INITIALIZED\""
                        },
                        "value": "ALREADY_INITIALIZED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3",
                          "typeString": "literal_string \"ALREADY_INITIALIZED\""
                        }
                      ],
                      "id": 168,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1876:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1876:66:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 179,
                  "nodeType": "ExpressionStatement",
                  "src": "1876:66:2"
                },
                {
                  "id": 180,
                  "nodeType": "PlaceholderStatement",
                  "src": "1948:1:2"
                }
              ]
            },
            "id": 182,
            "name": "initialized",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 166,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 182,
                  "src": "1856:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 165,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1856:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1855:14:2"
            },
            "src": "1835:119:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 199,
              "nodeType": "Block",
              "src": "1997:84:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 187,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "2011:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 189,
                          "indexExpression": {
                            "id": 188,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 184,
                            "src": "2026:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2011:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 192,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2043:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 191,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2035:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 190,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "2035:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2035:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "2011:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f494e495449414c495a4544",
                        "id": 195,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2047:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3",
                          "typeString": "literal_string \"ALREADY_INITIALIZED\""
                        },
                        "value": "ALREADY_INITIALIZED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3",
                          "typeString": "literal_string \"ALREADY_INITIALIZED\""
                        }
                      ],
                      "id": 186,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2003:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2003:66:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 197,
                  "nodeType": "ExpressionStatement",
                  "src": "2003:66:2"
                },
                {
                  "id": 198,
                  "nodeType": "PlaceholderStatement",
                  "src": "2075:1:2"
                }
              ]
            },
            "id": 200,
            "name": "not_initialized",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 184,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 200,
                  "src": "1983:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 183,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1983:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1982:14:2"
            },
            "src": "1958:123:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 217,
              "nodeType": "Block",
              "src": "2119:72:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 205,
                            "name": "lockers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "2133:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 207,
                          "indexExpression": {
                            "id": 206,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 202,
                            "src": "2141:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2133:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 210,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2158:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 209,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2150:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 208,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2150:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 211,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2150:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2133:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4143434f554e545f4c4f434b4544",
                        "id": 213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2162:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d8cd4d34be656b6a3d5f1388122c3376b98d03bc8880e73b32080138dac9d22e",
                          "typeString": "literal_string \"ACCOUNT_LOCKED\""
                        },
                        "value": "ACCOUNT_LOCKED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d8cd4d34be656b6a3d5f1388122c3376b98d03bc8880e73b32080138dac9d22e",
                          "typeString": "literal_string \"ACCOUNT_LOCKED\""
                        }
                      ],
                      "id": 204,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2125:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2125:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 215,
                  "nodeType": "ExpressionStatement",
                  "src": "2125:54:2"
                },
                {
                  "id": 216,
                  "nodeType": "PlaceholderStatement",
                  "src": "2185:1:2"
                }
              ]
            },
            "id": 218,
            "name": "not_locked",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 202,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 218,
                  "src": "2105:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 201,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2105:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2104:14:2"
            },
            "src": "2085:106:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 235,
              "nodeType": "Block",
              "src": "2228:74:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 230,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 223,
                            "name": "lockers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "2242:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 225,
                          "indexExpression": {
                            "id": 224,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 220,
                            "src": "2250:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2242:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 228,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2267:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 227,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2259:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 226,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2259:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2259:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2242:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4143434f554e545f554e4c4f434b4544",
                        "id": 231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2271:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6bace5e21acabd474698bbe6ec192fcd6115960c23cb618f270e1eb277fca082",
                          "typeString": "literal_string \"ACCOUNT_UNLOCKED\""
                        },
                        "value": "ACCOUNT_UNLOCKED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6bace5e21acabd474698bbe6ec192fcd6115960c23cb618f270e1eb277fca082",
                          "typeString": "literal_string \"ACCOUNT_UNLOCKED\""
                        }
                      ],
                      "id": 222,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2234:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2234:56:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 233,
                  "nodeType": "ExpressionStatement",
                  "src": "2234:56:2"
                },
                {
                  "id": 234,
                  "nodeType": "PlaceholderStatement",
                  "src": "2296:1:2"
                }
              ]
            },
            "id": 236,
            "name": "is_locked",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 221,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 220,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 236,
                  "src": "2214:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 219,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2214:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2213:14:2"
            },
            "src": "2195:107:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 250,
              "nodeType": "Block",
              "src": "2350:73:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 245,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 241,
                            "name": "rollback_sizes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 140,
                            "src": "2364:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 243,
                          "indexExpression": {
                            "id": 242,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 238,
                            "src": "2379:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2364:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2388:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2364:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "524f4c4c4241434b5f5245515549524544",
                        "id": 246,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2391:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1d78e5a07119f9b645a7581e958e2cbd94e3faf79a215f6ad2c050e79ae8858f",
                          "typeString": "literal_string \"ROLLBACK_REQUIRED\""
                        },
                        "value": "ROLLBACK_REQUIRED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1d78e5a07119f9b645a7581e958e2cbd94e3faf79a215f6ad2c050e79ae8858f",
                          "typeString": "literal_string \"ROLLBACK_REQUIRED\""
                        }
                      ],
                      "id": 240,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2356:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2356:55:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 248,
                  "nodeType": "ExpressionStatement",
                  "src": "2356:55:2"
                },
                {
                  "id": 249,
                  "nodeType": "PlaceholderStatement",
                  "src": "2417:1:2"
                }
              ]
            },
            "id": 251,
            "name": "no_rollback_required",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 238,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 251,
                  "src": "2336:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 237,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2336:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2335:14:2"
            },
            "src": "2306:117:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 266,
              "nodeType": "Block",
              "src": "2473:169:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 261,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 256,
                            "name": "last_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 253,
                            "src": "2569:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 257,
                            "name": "lock_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 118,
                            "src": "2581:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2569:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "expression": {
                            "id": 259,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "2593:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "2593:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2569:39:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f54494d45",
                        "id": 262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2610:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e6e29aa742787528e4ef5658c2f6ed3ed5d0e420556a6b49b0477b986b54ba9e",
                          "typeString": "literal_string \"INSUFFICIENT_TIME\""
                        },
                        "value": "INSUFFICIENT_TIME"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e6e29aa742787528e4ef5658c2f6ed3ed5d0e420556a6b49b0477b986b54ba9e",
                          "typeString": "literal_string \"INSUFFICIENT_TIME\""
                        }
                      ],
                      "id": 255,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2561:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2561:69:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 264,
                  "nodeType": "ExpressionStatement",
                  "src": "2561:69:2"
                },
                {
                  "id": 265,
                  "nodeType": "PlaceholderStatement",
                  "src": "2636:1:2"
                }
              ]
            },
            "id": 267,
            "name": "can_exit_optimism",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 254,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 253,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 267,
                  "src": "2454:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 252,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2454:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2453:19:2"
            },
            "src": "2427:215:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 281,
              "nodeType": "Block",
              "src": "2703:178:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 273,
                            "name": "call_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 270,
                            "src": "2823:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "2823:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2842:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "2823:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f43414c4c44415441",
                        "id": 277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2845:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_75b798616894f882ce14b76db6c3631d00de9b6c56a6b2356d5c5945068593de",
                          "typeString": "literal_string \"INSUFFICIENT_CALLDATA\""
                        },
                        "value": "INSUFFICIENT_CALLDATA"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_75b798616894f882ce14b76db6c3631d00de9b6c56a6b2356d5c5945068593de",
                          "typeString": "literal_string \"INSUFFICIENT_CALLDATA\""
                        }
                      ],
                      "id": 272,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2815:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2815:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 279,
                  "nodeType": "ExpressionStatement",
                  "src": "2815:54:2"
                },
                {
                  "id": 280,
                  "nodeType": "PlaceholderStatement",
                  "src": "2875:1:2"
                }
              ]
            },
            "id": 282,
            "name": "sufficient_calldata",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 271,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 270,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 282,
                  "src": "2675:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 268,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "2675:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 269,
                    "nodeType": "ArrayTypeName",
                    "src": "2675:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2674:28:2"
            },
            "src": "2646:235:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 299,
              "nodeType": "Block",
              "src": "2921:104:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 294,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 291,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 287,
                              "name": "locked_timestamps",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 136,
                              "src": "2935:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 289,
                            "indexExpression": {
                              "id": 288,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 284,
                              "src": "2953:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2935:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 290,
                            "name": "lock_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 118,
                            "src": "2961:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2935:35:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 292,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "2974:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "2974:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2935:54:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f57494e444f57",
                        "id": 295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2991:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9d48b545779b96f560612b82c655ba6eceb166f41c67537af4882fd7107529bc",
                          "typeString": "literal_string \"INSUFFICIENT_WINDOW\""
                        },
                        "value": "INSUFFICIENT_WINDOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9d48b545779b96f560612b82c655ba6eceb166f41c67537af4882fd7107529bc",
                          "typeString": "literal_string \"INSUFFICIENT_WINDOW\""
                        }
                      ],
                      "id": 286,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2927:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2927:86:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 297,
                  "nodeType": "ExpressionStatement",
                  "src": "2927:86:2"
                },
                {
                  "id": 298,
                  "nodeType": "PlaceholderStatement",
                  "src": "3019:1:2"
                }
              ]
            },
            "id": 300,
            "name": "lock_expired",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 284,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 300,
                  "src": "2907:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 283,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2907:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2906:14:2"
            },
            "src": "2885:140:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 308,
              "nodeType": "Block",
              "src": "3119:33:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 304,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3136:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "3136:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 303,
                      "name": "apply_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 345,
                      "src": "3125:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) returns (uint256)"
                      }
                    },
                    "id": 306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3125:22:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 307,
                  "nodeType": "ExpressionStatement",
                  "src": "3125:22:2"
                }
              ]
            },
            "id": 309,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 301,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3099:2:2"
            },
            "returnParameters": {
              "id": 302,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3119:0:2"
            },
            "scope": 1655,
            "src": "3092:60:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 344,
              "nodeType": "Block",
              "src": "3304:202:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 316,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "3314:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 318,
                      "indexExpression": {
                        "id": 317,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 311,
                        "src": "3323:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3314:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 319,
                      "name": "required_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 120,
                      "src": "3332:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3314:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 324,
                  "nodeType": "IfStatement",
                  "src": "3310:53:2",
                  "trueBody": {
                    "expression": {
                      "expression": {
                        "id": 321,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "3354:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "3354:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 315,
                    "id": 323,
                    "nodeType": "Return",
                    "src": "3347:16:2"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 329,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 326,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3378:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "3378:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 328,
                          "name": "required_bond",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 120,
                          "src": "3391:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3378:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f424f4e44",
                        "id": 330,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3406:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f14886dce54eed8f2c7fac7b8cb79aa35276e9b008920bb3c153d53ca3c75a28",
                          "typeString": "literal_string \"INSUFFICIENT_BOND\""
                        },
                        "value": "INSUFFICIENT_BOND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f14886dce54eed8f2c7fac7b8cb79aa35276e9b008920bb3c153d53ca3c75a28",
                          "typeString": "literal_string \"INSUFFICIENT_BOND\""
                        }
                      ],
                      "id": 325,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3370:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 331,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3370:56:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 332,
                  "nodeType": "ExpressionStatement",
                  "src": "3370:56:2"
                },
                {
                  "expression": {
                    "id": 337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 333,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "3433:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 335,
                      "indexExpression": {
                        "id": 334,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 311,
                        "src": "3442:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3433:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 336,
                      "name": "required_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 120,
                      "src": "3450:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3433:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 338,
                  "nodeType": "ExpressionStatement",
                  "src": "3433:30:2"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 339,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "3476:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "3476:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 341,
                      "name": "required_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 120,
                      "src": "3488:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3476:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 315,
                  "id": 343,
                  "nodeType": "Return",
                  "src": "3469:32:2"
                }
              ]
            },
            "id": 345,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "apply_bond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 311,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 345,
                  "src": "3253:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 310,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3253:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3252:14:2"
            },
            "returnParameters": {
              "id": 315,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 314,
                  "mutability": "mutable",
                  "name": "remainder",
                  "nodeType": "VariableDeclaration",
                  "scope": 345,
                  "src": "3285:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 313,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3285:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3284:19:2"
            },
            "scope": 1655,
            "src": "3233:273:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 359,
              "nodeType": "Block",
              "src": "3585:57:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 355,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 352,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 347,
                              "src": "3610:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 351,
                            "name": "apply_bond",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 345,
                            "src": "3599:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3599:16:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3619:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3599:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f424f4e44",
                        "id": 356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3622:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        },
                        "value": "INVALID_BOND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        }
                      ],
                      "id": 350,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3591:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3591:46:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 358,
                  "nodeType": "ExpressionStatement",
                  "src": "3591:46:2"
                }
              ]
            },
            "functionSelector": "247ce85b",
            "id": 360,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 347,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 360,
                  "src": "3554:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 346,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3554:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3553:14:2"
            },
            "returnParameters": {
              "id": 349,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3585:0:2"
            },
            "scope": 1655,
            "src": "3540:102:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 411,
              "nodeType": "Block",
              "src": "3783:517:2",
              "statements": [
                {
                  "assignments": [
                    368
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 368,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 411,
                      "src": "3789:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 367,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3789:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 371,
                  "initialValue": {
                    "expression": {
                      "id": 369,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "3804:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 370,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "3804:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3789:25:2"
                },
                {
                  "assignments": [
                    373
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 373,
                      "mutability": "mutable",
                      "name": "remainder",
                      "nodeType": "VariableDeclaration",
                      "scope": 411,
                      "src": "3820:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 372,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3820:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 377,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 375,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 368,
                        "src": "3851:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 374,
                      "name": "apply_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 345,
                      "src": "3840:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) returns (uint256)"
                      }
                    },
                    "id": 376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3840:16:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3820:36:2"
                },
                {
                  "assignments": [
                    379
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 379,
                      "mutability": "mutable",
                      "name": "initial_state",
                      "nodeType": "VariableDeclaration",
                      "scope": 411,
                      "src": "3949:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 378,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3949:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 386,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 384,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 368,
                        "src": "4025:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 380,
                          "name": "logic_contract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 116,
                          "src": "3973:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                            "typeString": "contract Optimistic_Roll_In_Compatible"
                          }
                        },
                        "id": 381,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "initialize_state",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46,
                        "src": "3973:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_address_$returns$_t_bytes32_$",
                          "typeString": "function (address) payable external returns (bytes32)"
                        }
                      },
                      "id": 383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "id": 382,
                          "name": "remainder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 373,
                          "src": "4013:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "3973:51:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_address_$returns$_t_bytes32_$value",
                        "typeString": "function (address) payable external returns (bytes32)"
                      }
                    },
                    "id": 385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3973:57:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3949:81:2"
                },
                {
                  "expression": {
                    "id": 404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 387,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "4160:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 389,
                      "indexExpression": {
                        "id": 388,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 368,
                        "src": "4175:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4160:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 395,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4218:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 394,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4210:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 393,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4210:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 396,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4210:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 397,
                              "name": "initial_state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 379,
                              "src": "4222:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 400,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4245:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 399,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4237:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 398,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4237:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 401,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4237:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 391,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "4193:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 392,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "4193:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4193:55:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 390,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "4183:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4183:66:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4160:89:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 405,
                  "nodeType": "ExpressionStatement",
                  "src": "4160:89:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 407,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 368,
                        "src": "4275:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 408,
                        "name": "initial_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 379,
                        "src": "4281:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 406,
                      "name": "ORI_New_State",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 72,
                      "src": "4261:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,bytes32)"
                      }
                    },
                    "id": 409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4261:34:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 410,
                  "nodeType": "EmitStatement",
                  "src": "4256:39:2"
                }
              ]
            },
            "functionSelector": "8129fc1c",
            "id": 412,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 363,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "3771:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "3771:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 365,
                "modifierName": {
                  "id": 362,
                  "name": "not_initialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 200,
                  "src": "3755:15:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3755:27:2"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 361,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3735:2:2"
            },
            "returnParameters": {
              "id": 366,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3783:0:2"
            },
            "scope": 1655,
            "src": "3716:584:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 453,
              "nodeType": "Block",
              "src": "4455:170:2",
              "statements": [
                {
                  "assignments": [
                    422
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 422,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 453,
                      "src": "4461:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 421,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4461:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 425,
                  "initialValue": {
                    "expression": {
                      "id": 423,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "4476:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "4476:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4461:25:2"
                },
                {
                  "assignments": [
                    427
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 427,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 453,
                      "src": "4492:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 426,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4492:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 431,
                  "initialValue": {
                    "baseExpression": {
                      "id": 428,
                      "name": "balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 128,
                      "src": "4509:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 430,
                    "indexExpression": {
                      "id": 429,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 422,
                      "src": "4518:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4509:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4492:31:2"
                },
                {
                  "expression": {
                    "id": 436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 432,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "4529:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 434,
                      "indexExpression": {
                        "id": 433,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 422,
                        "src": "4538:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4529:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 435,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4546:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4529:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 437,
                  "nodeType": "ExpressionStatement",
                  "src": "4529:18:2"
                },
                {
                  "expression": {
                    "id": 445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 438,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "4553:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 440,
                      "indexExpression": {
                        "id": 439,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 422,
                        "src": "4568:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4553:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 443,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4584:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 442,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4576:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": {
                          "id": 441,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4576:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 444,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4576:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4553:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 446,
                  "nodeType": "ExpressionStatement",
                  "src": "4553:33:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 450,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 427,
                        "src": "4613:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 447,
                        "name": "destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 414,
                        "src": "4592:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "src": "4592:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4592:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 452,
                  "nodeType": "ExpressionStatement",
                  "src": "4592:28:2"
                }
              ]
            },
            "functionSelector": "e4da61ab",
            "id": 454,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 417,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "4443:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "4443:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 419,
                "modifierName": {
                  "id": 416,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "4432:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4432:22:2"
              }
            ],
            "name": "unbond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 415,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 414,
                  "mutability": "mutable",
                  "name": "destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 454,
                  "src": "4394:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 413,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4394:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4393:29:2"
            },
            "returnParameters": {
              "id": 420,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4455:0:2"
            },
            "scope": 1655,
            "src": "4378:247:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 515,
              "nodeType": "Block",
              "src": "4804:407:2",
              "statements": [
                {
                  "assignments": [
                    464
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 464,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 515,
                      "src": "4810:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 463,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4810:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 467,
                  "initialValue": {
                    "expression": {
                      "id": 465,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "4825:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "4825:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4810:25:2"
                },
                {
                  "assignments": [
                    469
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 469,
                      "mutability": "mutable",
                      "name": "account_exists",
                      "nodeType": "VariableDeclaration",
                      "scope": 515,
                      "src": "4841:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 468,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4841:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 478,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 470,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "4863:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 472,
                      "indexExpression": {
                        "id": 471,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 464,
                        "src": "4878:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4863:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 475,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4895:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4887:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": {
                          "id": 473,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4887:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4887:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4863:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4841:56:2"
                },
                {
                  "assignments": [
                    480
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 480,
                      "mutability": "mutable",
                      "name": "account_balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 515,
                      "src": "4903:23:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 479,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4903:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 484,
                  "initialValue": {
                    "baseExpression": {
                      "id": 481,
                      "name": "balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 128,
                      "src": "4929:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 483,
                    "indexExpression": {
                      "id": 482,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 464,
                      "src": "4938:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4929:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4903:40:2"
                },
                {
                  "assignments": [
                    486
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 486,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 515,
                      "src": "4949:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 485,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4949:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 493,
                  "initialValue": {
                    "condition": {
                      "id": 487,
                      "name": "account_exists",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 469,
                      "src": "4966:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "id": 491,
                      "name": "account_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 480,
                      "src": "5017:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "4966:66:2",
                    "trueExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 488,
                        "name": "account_balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 480,
                        "src": "4983:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "id": 489,
                        "name": "required_bond",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 120,
                        "src": "5001:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4983:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4949:83:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 497,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 495,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 486,
                          "src": "5074:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 496,
                          "name": "account_balance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 480,
                          "src": "5084:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5074:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e45585045435445445f554e444552464c4f57",
                        "id": 498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5101:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b449114c092032f95ab19cd2ef16cc3b95ca6c1503334a20acfd3d332b8a351",
                          "typeString": "literal_string \"UNEXPECTED_UNDERFLOW\""
                        },
                        "value": "UNEXPECTED_UNDERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b449114c092032f95ab19cd2ef16cc3b95ca6c1503334a20acfd3d332b8a351",
                          "typeString": "literal_string \"UNEXPECTED_UNDERFLOW\""
                        }
                      ],
                      "id": 494,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5066:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5066:58:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 500,
                  "nodeType": "ExpressionStatement",
                  "src": "5066:58:2"
                },
                {
                  "expression": {
                    "id": 507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 501,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "5131:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 503,
                      "indexExpression": {
                        "id": 502,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 464,
                        "src": "5140:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5131:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 504,
                        "name": "account_balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 480,
                        "src": "5148:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "id": 505,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 486,
                        "src": "5166:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5148:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5131:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 508,
                  "nodeType": "ExpressionStatement",
                  "src": "5131:41:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 512,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 486,
                        "src": "5199:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 509,
                        "name": "destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 456,
                        "src": "5178:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "src": "5178:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5178:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 514,
                  "nodeType": "ExpressionStatement",
                  "src": "5178:28:2"
                }
              ]
            },
            "functionSelector": "51cff8d9",
            "id": 516,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 459,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "4792:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "4792:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 461,
                "modifierName": {
                  "id": 458,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "4781:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4781:22:2"
              }
            ],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 456,
                  "mutability": "mutable",
                  "name": "destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 516,
                  "src": "4743:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 455,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4743:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4742:29:2"
            },
            "returnParameters": {
              "id": 462,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4804:0:2"
            },
            "scope": 1655,
            "src": "4725:486:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 601,
              "nodeType": "Block",
              "src": "5496:739:2",
              "statements": [
                {
                  "assignments": [
                    535
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 535,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 601,
                      "src": "5502:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 534,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5502:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 538,
                  "initialValue": {
                    "expression": {
                      "id": 536,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "5517:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 537,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "5517:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5502:25:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 554,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 543,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 520,
                                  "src": "5739:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 544,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 522,
                                  "src": "5755:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 547,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 524,
                                      "src": "5770:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 546,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5762:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 545,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5762:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 548,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5762:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 541,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "5722:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 542,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "5722:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5722:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 540,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "5712:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5712:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 551,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "5786:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 553,
                          "indexExpression": {
                            "id": 552,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 535,
                            "src": "5801:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5786:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "5712:94:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5814:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 539,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5697:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5697:138:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 557,
                  "nodeType": "ExpressionStatement",
                  "src": "5697:138:2"
                },
                {
                  "expression": {
                    "id": 575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 558,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "5936:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 560,
                      "indexExpression": {
                        "id": 559,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 535,
                        "src": "5951:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5936:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 566,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5994:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 565,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5986:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 564,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5986:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 567,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5986:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 568,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 522,
                              "src": "5998:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 571,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6013:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 570,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6005:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 569,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6005:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6005:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 562,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "5969:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 563,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "5969:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5969:47:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 561,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "5959:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5959:58:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "5936:81:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 576,
                  "nodeType": "ExpressionStatement",
                  "src": "5936:81:2"
                },
                {
                  "expression": {
                    "id": 581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 577,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "6110:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 579,
                      "indexExpression": {
                        "id": 578,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 535,
                        "src": "6118:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6110:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 580,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 535,
                      "src": "6126:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6110:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 582,
                  "nodeType": "ExpressionStatement",
                  "src": "6110:20:2"
                },
                {
                  "assignments": [
                    584
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 584,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 601,
                      "src": "6141:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 583,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6141:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 588,
                  "initialValue": {
                    "baseExpression": {
                      "id": 585,
                      "name": "balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 128,
                      "src": "6158:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 587,
                    "indexExpression": {
                      "id": 586,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 535,
                      "src": "6167:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6158:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6141:31:2"
                },
                {
                  "expression": {
                    "id": 593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 589,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "6178:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 591,
                      "indexExpression": {
                        "id": 590,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 535,
                        "src": "6187:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6178:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 592,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6195:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6178:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 594,
                  "nodeType": "ExpressionStatement",
                  "src": "6178:18:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 598,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 584,
                        "src": "6223:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 595,
                        "name": "destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 518,
                        "src": "6202:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "src": "6202:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6202:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 600,
                  "nodeType": "ExpressionStatement",
                  "src": "6202:28:2"
                }
              ]
            },
            "functionSelector": "e6a64799",
            "id": 602,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 527,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "5455:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "5455:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 529,
                "modifierName": {
                  "id": 526,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "5444:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5444:22:2"
              },
              {
                "arguments": [
                  {
                    "id": 531,
                    "name": "last_time",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 524,
                    "src": "5485:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 532,
                "modifierName": {
                  "id": 530,
                  "name": "can_exit_optimism",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 267,
                  "src": "5467:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5467:28:2"
              }
            ],
            "name": "archive",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 518,
                  "mutability": "mutable",
                  "name": "destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 602,
                  "src": "5333:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 517,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5333:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 520,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 602,
                  "src": "5366:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 519,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5366:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 522,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 602,
                  "src": "5394:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 521,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5394:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 524,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 602,
                  "src": "5413:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 523,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5413:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5327:107:2"
            },
            "returnParameters": {
              "id": 533,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5496:0:2"
            },
            "scope": 1655,
            "src": "5311:924:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 632,
              "nodeType": "Block",
              "src": "6376:122:2",
              "statements": [
                {
                  "assignments": [
                    610
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 610,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 632,
                      "src": "6382:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 609,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6382:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 613,
                  "initialValue": {
                    "expression": {
                      "id": 611,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "6397:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "6397:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6382:25:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 619,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 616,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 610,
                              "src": "6433:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 615,
                            "name": "apply_bond",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 345,
                            "src": "6422:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6422:16:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6442:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6422:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f424f4e44",
                        "id": 620,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6445:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        },
                        "value": "INVALID_BOND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        }
                      ],
                      "id": 614,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6414:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6414:46:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 622,
                  "nodeType": "ExpressionStatement",
                  "src": "6414:46:2"
                },
                {
                  "expression": {
                    "id": 630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 623,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "6467:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 625,
                      "indexExpression": {
                        "id": 624,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 610,
                        "src": "6475:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6467:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6491:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 627,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6483:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 626,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6483:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 629,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6483:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "6467:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 631,
                  "nodeType": "ExpressionStatement",
                  "src": "6467:26:2"
                }
              ]
            },
            "functionSelector": "7ad246f8",
            "id": 633,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 605,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "6347:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "6347:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 607,
                "modifierName": {
                  "id": 604,
                  "name": "is_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 236,
                  "src": "6337:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6337:21:2"
              }
            ],
            "name": "unarchive",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 603,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6334:2:2"
            },
            "returnParameters": {
              "id": 608,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6376:0:2"
            },
            "scope": 1655,
            "src": "6316:182:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 676,
              "nodeType": "Block",
              "src": "6721:362:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 644,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 635,
                      "src": "6843:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "id": 647,
                            "name": "call_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 637,
                            "src": "6862:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "id": 649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "6862:13:2",
                          "startExpression": {
                            "hexValue": "34",
                            "id": 648,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6872:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6878:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 650,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6878:7:2",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 652,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6877:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          },
                          {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          }
                        ],
                        "expression": {
                          "id": 645,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "6851:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 646,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "6851:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 653,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6851:36:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "6843:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 657,
                  "nodeType": "IfStatement",
                  "src": "6839:62:2",
                  "trueBody": {
                    "expression": {
                      "hexValue": "66616c7365",
                      "id": 655,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6896:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 643,
                    "id": 656,
                    "nodeType": "Return",
                    "src": "6889:12:2"
                  }
                },
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 669,
                        "nodeType": "Block",
                        "src": "7005:40:2",
                        "statements": [
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 667,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 665,
                                "name": "state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "7020:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 666,
                                "name": "new_state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 639,
                                "src": "7029:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "7020:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "functionReturnParameters": 643,
                            "id": 668,
                            "nodeType": "Return",
                            "src": "7013:25:2"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 670,
                      "nodeType": "TryCatchClause",
                      "parameters": {
                        "id": 664,
                        "nodeType": "ParameterList",
                        "parameters": [
                          {
                            "constant": false,
                            "id": 663,
                            "mutability": "mutable",
                            "name": "state",
                            "nodeType": "VariableDeclaration",
                            "scope": 670,
                            "src": "6990:13:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 662,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "6990:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "src": "6989:15:2"
                      },
                      "src": "6981:64:2"
                    },
                    {
                      "block": {
                        "id": 673,
                        "nodeType": "Block",
                        "src": "7052:27:2",
                        "statements": [
                          {
                            "expression": {
                              "hexValue": "66616c7365",
                              "id": 671,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7067:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            "functionReturnParameters": 643,
                            "id": 672,
                            "nodeType": "Return",
                            "src": "7060:12:2"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 674,
                      "nodeType": "TryCatchClause",
                      "src": "7046:33:2"
                    }
                  ],
                  "externalCall": {
                    "arguments": [
                      {
                        "id": 660,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 637,
                        "src": "6970:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "id": 658,
                        "name": "logic_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 116,
                        "src": "6939:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                          "typeString": "contract Optimistic_Roll_In_Compatible"
                        }
                      },
                      "id": 659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "optimistic_call",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53,
                      "src": "6939:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) view external returns (bytes32)"
                      }
                    },
                    "id": 661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6939:41:2",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 675,
                  "nodeType": "TryStatement",
                  "src": "6935:144:2"
                }
              ]
            },
            "id": 677,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verify_transition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 640,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 635,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 677,
                  "src": "6622:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 634,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6622:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 637,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 677,
                  "src": "6640:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 636,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6640:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 639,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 677,
                  "src": "6670:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 638,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6670:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6616:75:2"
            },
            "returnParameters": {
              "id": 643,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 642,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 677,
                  "src": "6715:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 641,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6715:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6714:6:2"
            },
            "scope": 1655,
            "src": "6590:493:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 771,
              "nodeType": "Block",
              "src": "7296:1065:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 702,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 692,
                          "name": "caller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 679,
                          "src": "7424:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 695,
                                "name": "call_data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 681,
                                "src": "7445:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexRangeAccess",
                              "src": "7445:13:2",
                              "startExpression": {
                                "hexValue": "34",
                                "id": 696,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7455:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                "typeString": "bytes calldata slice"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 699,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7461:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 698,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7461:7:2",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "id": 700,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "7460:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                "typeString": "bytes calldata slice"
                              },
                              {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              }
                            ],
                            "expression": {
                              "id": 693,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "7434:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 694,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "7434:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 701,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7434:36:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7424:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "43414c4c45525f555345525f4d49534d41544348",
                        "id": 703,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7472:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e9472d2f4adc85e67d1fbddf9a34ced8c121cb448f0981625858678913ce21d6",
                          "typeString": "literal_string \"CALLER_USER_MISMATCH\""
                        },
                        "value": "CALLER_USER_MISMATCH"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e9472d2f4adc85e67d1fbddf9a34ced8c121cb448f0981625858678913ce21d6",
                          "typeString": "literal_string \"CALLER_USER_MISMATCH\""
                        }
                      ],
                      "id": 691,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7416:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7416:79:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 705,
                  "nodeType": "ExpressionStatement",
                  "src": "7416:79:2"
                },
                {
                  "assignments": [
                    707
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 707,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "scope": 771,
                      "src": "7601:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 706,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7601:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 717,
                  "initialValue": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 710,
                          "name": "call_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 681,
                          "src": "7628:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 712,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexRangeAccess",
                        "src": "7628:14:2",
                        "startExpression": {
                          "hexValue": "3336",
                          "id": 711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7638:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_36_by_1",
                            "typeString": "int_const 36"
                          },
                          "value": "36"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 714,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7645:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 713,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "7645:7:2",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 715,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "7644:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        },
                        {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      ],
                      "expression": {
                        "id": 708,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "7617:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "7617:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7617:37:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7601:53:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 722,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 683,
                                  "src": "7878:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 723,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 707,
                                  "src": "7894:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 726,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 685,
                                      "src": "7909:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 725,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7901:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 724,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7901:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 727,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7901:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 720,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "7861:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 721,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "7861:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 728,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7861:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 719,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "7851:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7851:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 730,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "7925:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 732,
                          "indexExpression": {
                            "id": 731,
                            "name": "caller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 679,
                            "src": "7940:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7925:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "7851:96:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 734,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7955:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 718,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7836:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7836:140:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 736,
                  "nodeType": "ExpressionStatement",
                  "src": "7836:140:2"
                },
                {
                  "expression": {
                    "id": 745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 737,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 707,
                      "src": "8053:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 743,
                          "name": "call_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 681,
                          "src": "8113:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "id": 738,
                            "name": "logic_contract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 116,
                            "src": "8061:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                              "typeString": "contract Optimistic_Roll_In_Compatible"
                            }
                          },
                          "id": 739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pessimistic_call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 60,
                          "src": "8061:31:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_payable$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) payable external returns (bytes32)"
                          }
                        },
                        "id": 742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "names": [
                          "value"
                        ],
                        "nodeType": "FunctionCallOptions",
                        "options": [
                          {
                            "expression": {
                              "id": 740,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "8101:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "8101:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "src": "8061:51:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_bytes_memory_ptr_$returns$_t_bytes32_$value",
                          "typeString": "function (bytes memory) payable external returns (bytes32)"
                        }
                      },
                      "id": 744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8061:62:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "8053:70:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 746,
                  "nodeType": "ExpressionStatement",
                  "src": "8053:70:2"
                },
                {
                  "expression": {
                    "id": 764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 747,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "8233:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 749,
                      "indexExpression": {
                        "id": 748,
                        "name": "caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 679,
                        "src": "8248:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8233:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 755,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8293:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 754,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8285:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 753,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8285:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8285:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 757,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 707,
                              "src": "8297:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 760,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8312:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 759,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8304:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 758,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8304:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 761,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8304:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 751,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "8268:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "8268:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 762,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8268:47:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 750,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "8258:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 763,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8258:58:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "8233:83:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 765,
                  "nodeType": "ExpressionStatement",
                  "src": "8233:83:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 767,
                        "name": "caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 679,
                        "src": "8342:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 768,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 707,
                        "src": "8350:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 766,
                      "name": "ORI_New_State",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 72,
                      "src": "8328:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,bytes32)"
                      }
                    },
                    "id": 769,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8328:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 770,
                  "nodeType": "EmitStatement",
                  "src": "8323:33:2"
                }
              ]
            },
            "id": 772,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 688,
                    "name": "caller",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 679,
                    "src": "7288:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 689,
                "modifierName": {
                  "id": 687,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "7277:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7277:18:2"
              }
            ],
            "name": "normal_perform",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 679,
                  "mutability": "mutable",
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 772,
                  "src": "7168:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 678,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7168:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 681,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 772,
                  "src": "7188:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 680,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7188:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 683,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 772,
                  "src": "7218:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 682,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7218:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 685,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 772,
                  "src": "7246:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 684,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7246:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7162:105:2"
            },
            "returnParameters": {
              "id": 690,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7296:0:2"
            },
            "scope": 1655,
            "src": "7139:1222:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 788,
              "nodeType": "Block",
              "src": "8517:63:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 778,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "8538:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 779,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "8538:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 780,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 774,
                        "src": "8550:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 783,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8569:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8561:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 781,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "8561:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 784,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8561:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 785,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8573:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 777,
                      "name": "normal_perform",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 772,
                      "src": "8523:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata,bytes32,uint256)"
                      }
                    },
                    "id": 786,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8523:52:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 787,
                  "nodeType": "ExpressionStatement",
                  "src": "8523:52:2"
                }
              ]
            },
            "functionSelector": "bb6ae2cb",
            "id": 789,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "perform",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 775,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 774,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 789,
                  "src": "8474:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 773,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8474:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8473:26:2"
            },
            "returnParameters": {
              "id": 776,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8517:0:2"
            },
            "scope": 1655,
            "src": "8457:123:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 813,
              "nodeType": "Block",
              "src": "8888:75:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 806,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "8909:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 807,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "8909:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 808,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 791,
                        "src": "8921:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 809,
                        "name": "call_data_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 793,
                        "src": "8932:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 810,
                        "name": "last_time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 795,
                        "src": "8948:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 805,
                      "name": "normal_perform",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 772,
                      "src": "8894:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata,bytes32,uint256)"
                      }
                    },
                    "id": 811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8894:64:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 812,
                  "nodeType": "ExpressionStatement",
                  "src": "8894:64:2"
                }
              ]
            },
            "functionSelector": "2a415454",
            "id": 814,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 798,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "8847:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "8847:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 800,
                "modifierName": {
                  "id": 797,
                  "name": "no_rollback_required",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 251,
                  "src": "8826:20:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8826:32:2"
              },
              {
                "arguments": [
                  {
                    "id": 802,
                    "name": "last_time",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 795,
                    "src": "8877:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 803,
                "modifierName": {
                  "id": 801,
                  "name": "can_exit_optimism",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 267,
                  "src": "8859:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8859:28:2"
              }
            ],
            "name": "perform_and_exit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 791,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 814,
                  "src": "8729:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 790,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8729:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 793,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 814,
                  "src": "8759:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 792,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8759:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 795,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 814,
                  "src": "8787:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8787:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8723:85:2"
            },
            "returnParameters": {
              "id": 804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8888:0:2"
            },
            "scope": 1655,
            "src": "8698:265:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 896,
              "nodeType": "Block",
              "src": "9240:900:2",
              "statements": [
                {
                  "assignments": [
                    834
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 834,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "scope": 896,
                      "src": "9335:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 833,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9335:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 844,
                  "initialValue": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 837,
                          "name": "call_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 818,
                          "src": "9362:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexRangeAccess",
                        "src": "9362:14:2",
                        "startExpression": {
                          "hexValue": "3336",
                          "id": 838,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9372:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_36_by_1",
                            "typeString": "int_const 36"
                          },
                          "value": "36"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 841,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9379:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 840,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "9379:7:2",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 842,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "9378:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        },
                        {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      ],
                      "expression": {
                        "id": 835,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "9351:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 836,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "9351:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9351:37:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9335:53:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 860,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 849,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 822,
                                  "src": "9600:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 850,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 834,
                                  "src": "9616:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 853,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 827,
                                      "src": "9631:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 852,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "9623:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 851,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "9623:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 854,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9623:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 847,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "9583:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 848,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "9583:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 855,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9583:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 846,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "9573:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9573:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 857,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "9647:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 859,
                          "indexExpression": {
                            "id": 858,
                            "name": "caller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 816,
                            "src": "9662:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9647:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "9573:96:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 861,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9677:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 845,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9558:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9558:140:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 863,
                  "nodeType": "ExpressionStatement",
                  "src": "9558:140:2"
                },
                {
                  "expression": {
                    "id": 871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 864,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 834,
                      "src": "9805:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 867,
                          "name": "call_data_root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 822,
                          "src": "9854:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 868,
                          "name": "call_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 818,
                          "src": "9870:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "id": 869,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 825,
                          "src": "9881:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          }
                        ],
                        "expression": {
                          "id": 865,
                          "name": "Internal_Merkle_Library",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12016,
                          "src": "9813:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                            "typeString": "type(library Internal_Merkle_Library)"
                          }
                        },
                        "id": 866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "try_append_one_c",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8765,
                        "src": "9813:40:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes calldata,bytes32[] calldata) pure returns (bytes32)"
                        }
                      },
                      "id": 870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9813:74:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9805:82:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 872,
                  "nodeType": "ExpressionStatement",
                  "src": "9805:82:2"
                },
                {
                  "expression": {
                    "id": 888,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 873,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "9978:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 875,
                      "indexExpression": {
                        "id": 874,
                        "name": "caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 816,
                        "src": "9993:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9978:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 879,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 834,
                              "src": "10030:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 880,
                              "name": "new_state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 820,
                              "src": "10037:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 883,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "10056:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 884,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "10056:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 882,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10048:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 881,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10048:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10048:24:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 877,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "10013:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 878,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "10013:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 886,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10013:60:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 876,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "10003:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10003:71:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9978:96:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 889,
                  "nodeType": "ExpressionStatement",
                  "src": "9978:96:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 891,
                        "name": "caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 816,
                        "src": "10111:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 892,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "10119:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 893,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "10119:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 890,
                      "name": "ORI_New_Optimistic_State",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 78,
                      "src": "10086:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10086:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 895,
                  "nodeType": "EmitStatement",
                  "src": "10081:54:2"
                }
              ]
            },
            "id": 897,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 830,
                    "name": "caller",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 816,
                    "src": "9232:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 831,
                "modifierName": {
                  "id": 829,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "9221:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9221:18:2"
              }
            ],
            "name": "optimistic_perform",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 828,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 816,
                  "mutability": "mutable",
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9059:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 815,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9059:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 818,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9079:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 817,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9079:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 820,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9109:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 819,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9109:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 822,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9132:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 821,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9132:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 825,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9160:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 823,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9160:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 824,
                    "nodeType": "ArrayTypeName",
                    "src": "9160:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 827,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9190:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 826,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9190:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9053:158:2"
            },
            "returnParameters": {
              "id": 832,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9240:0:2"
            },
            "scope": 1655,
            "src": "9026:1114:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 920,
              "nodeType": "Block",
              "src": "10409:85:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 908,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10434:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "10434:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 910,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 899,
                        "src": "10446:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 911,
                        "name": "new_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 901,
                        "src": "10457:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10476:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10468:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 912,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "10468:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 915,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10468:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 916,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "10480:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 917,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10487:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 907,
                      "name": "optimistic_perform",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 897,
                      "src": "10415:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata,bytes32,bytes32,bytes32[] calldata,uint256)"
                      }
                    },
                    "id": 918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10415:74:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 919,
                  "nodeType": "ExpressionStatement",
                  "src": "10415:74:2"
                }
              ]
            },
            "functionSelector": "177f15c5",
            "id": 921,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "perform_optimistically_and_enter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 899,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 921,
                  "src": "10318:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 898,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10318:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 901,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 921,
                  "src": "10348:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 900,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10348:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 904,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 921,
                  "src": "10371:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 902,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "10371:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 903,
                    "nodeType": "ArrayTypeName",
                    "src": "10371:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10312:87:2"
            },
            "returnParameters": {
              "id": 906,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10409:0:2"
            },
            "scope": 1655,
            "src": "10271:223:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 945,
              "nodeType": "Block",
              "src": "10784:97:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 936,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10809:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 937,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "10809:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 938,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 923,
                        "src": "10821:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 939,
                        "name": "new_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 925,
                        "src": "10832:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 940,
                        "name": "call_data_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 927,
                        "src": "10843:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 941,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 930,
                        "src": "10859:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      },
                      {
                        "id": 942,
                        "name": "last_time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 932,
                        "src": "10866:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 935,
                      "name": "optimistic_perform",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 897,
                      "src": "10790:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata,bytes32,bytes32,bytes32[] calldata,uint256)"
                      }
                    },
                    "id": 943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10790:86:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 944,
                  "nodeType": "ExpressionStatement",
                  "src": "10790:86:2"
                }
              ]
            },
            "functionSelector": "1646d051",
            "id": 946,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "perform_optimistically",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 923,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 946,
                  "src": "10642:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 922,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10642:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 925,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 946,
                  "src": "10672:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 924,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10672:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 927,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 946,
                  "src": "10695:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 926,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10695:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 930,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 946,
                  "src": "10723:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 928,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "10723:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 929,
                    "nodeType": "ArrayTypeName",
                    "src": "10723:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 932,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 946,
                  "src": "10753:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 931,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10753:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10636:138:2"
            },
            "returnParameters": {
              "id": 934,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10784:0:2"
            },
            "scope": 1655,
            "src": "10605:276:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1034,
              "nodeType": "Block",
              "src": "11198:864:2",
              "statements": [
                {
                  "assignments": [
                    970
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 970,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "scope": 1034,
                      "src": "11299:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 969,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11299:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 982,
                  "initialValue": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 973,
                            "name": "call_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 951,
                            "src": "11326:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 975,
                          "indexExpression": {
                            "hexValue": "30",
                            "id": 974,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11336:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "11326:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexRangeAccess",
                        "src": "11326:17:2",
                        "startExpression": {
                          "hexValue": "3336",
                          "id": 976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11339:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_36_by_1",
                            "typeString": "int_const 36"
                          },
                          "value": "36"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 979,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11346:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 978,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "11346:7:2",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 980,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "11345:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        },
                        {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      ],
                      "expression": {
                        "id": 971,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "11315:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 972,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "11315:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11315:40:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11299:56:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 987,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 955,
                                  "src": "11501:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 988,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 970,
                                  "src": "11517:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 991,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 960,
                                      "src": "11532:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 990,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "11524:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 989,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "11524:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 992,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11524:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 985,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "11484:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 986,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "11484:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 993,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11484:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 984,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "11474:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 994,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11474:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 995,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "11548:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 997,
                          "indexExpression": {
                            "id": 996,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 948,
                            "src": "11563:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "11548:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "11474:94:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11576:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 983,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11459:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11459:138:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1001,
                  "nodeType": "ExpressionStatement",
                  "src": "11459:138:2"
                },
                {
                  "expression": {
                    "id": 1009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1002,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 970,
                      "src": "11727:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1005,
                          "name": "call_data_root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 955,
                          "src": "11777:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 1006,
                          "name": "call_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 951,
                          "src": "11793:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "bytes calldata[] calldata"
                          }
                        },
                        {
                          "id": 1007,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 958,
                          "src": "11804:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "bytes calldata[] calldata"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          }
                        ],
                        "expression": {
                          "id": 1003,
                          "name": "Internal_Merkle_Library",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12016,
                          "src": "11735:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                            "typeString": "type(library Internal_Merkle_Library)"
                          }
                        },
                        "id": 1004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "try_append_many_c",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9044,
                        "src": "11735:41:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes calldata[] calldata,bytes32[] calldata) pure returns (bytes32)"
                        }
                      },
                      "id": 1008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11735:75:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "11727:83:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1010,
                  "nodeType": "ExpressionStatement",
                  "src": "11727:83:2"
                },
                {
                  "expression": {
                    "id": 1026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1011,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "11903:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 1013,
                      "indexExpression": {
                        "id": 1012,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 948,
                        "src": "11918:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11903:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 1017,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 970,
                              "src": "11953:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1018,
                              "name": "new_state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 953,
                              "src": "11960:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 1021,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "11979:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 1022,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "11979:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1020,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11971:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1019,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11971:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1023,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11971:24:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 1015,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "11936:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 1016,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "11936:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 1024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11936:60:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1014,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "11926:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 1025,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11926:71:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "11903:94:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1027,
                  "nodeType": "ExpressionStatement",
                  "src": "11903:94:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1029,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 948,
                        "src": "12035:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 1030,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "12041:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "12041:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1028,
                      "name": "ORI_New_Optimistic_States",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 84,
                      "src": "12009:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 1032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12009:48:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1033,
                  "nodeType": "EmitStatement",
                  "src": "12004:53:2"
                }
              ]
            },
            "id": 1035,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 963,
                    "name": "user",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 948,
                    "src": "11161:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 964,
                "modifierName": {
                  "id": 962,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "11150:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11150:16:2"
              },
              {
                "arguments": [
                  {
                    "id": 966,
                    "name": "call_data",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 951,
                    "src": "11187:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                      "typeString": "bytes calldata[] calldata"
                    }
                  }
                ],
                "id": 967,
                "modifierName": {
                  "id": 965,
                  "name": "sufficient_calldata",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 282,
                  "src": "11167:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$",
                    "typeString": "modifier (bytes calldata[] calldata)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11167:30:2"
              }
            ],
            "name": "optimistic_perform_many",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 961,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 948,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "10988:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10988:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 951,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "11006:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 949,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "11006:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 950,
                    "nodeType": "ArrayTypeName",
                    "src": "11006:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 953,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "11038:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 952,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11038:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 955,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "11061:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 954,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11061:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 958,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "11089:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 956,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11089:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 957,
                    "nodeType": "ArrayTypeName",
                    "src": "11089:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 960,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "11119:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 959,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11119:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10982:158:2"
            },
            "returnParameters": {
              "id": 968,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11198:0:2"
            },
            "scope": 1655,
            "src": "10950:1112:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1059,
              "nodeType": "Block",
              "src": "12346:90:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1047,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "12376:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1048,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "12376:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 1049,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1038,
                        "src": "12388:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        }
                      },
                      {
                        "id": 1050,
                        "name": "new_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1040,
                        "src": "12399:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1053,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12418:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1052,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12410:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 1051,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "12410:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1054,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12410:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 1055,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1043,
                        "src": "12422:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 1056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12429:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 1046,
                      "name": "optimistic_perform_many",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1035,
                      "src": "12352:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata[] calldata,bytes32,bytes32,bytes32[] calldata,uint256)"
                      }
                    },
                    "id": 1057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12352:79:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1058,
                  "nodeType": "ExpressionStatement",
                  "src": "12352:79:2"
                }
              ]
            },
            "functionSelector": "08542bb1",
            "id": 1060,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "perform_many_optimistically_and_enter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1038,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1060,
                  "src": "12253:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1036,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "12253:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 1037,
                    "nodeType": "ArrayTypeName",
                    "src": "12253:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1040,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1060,
                  "src": "12285:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1039,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12285:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1043,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1060,
                  "src": "12308:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1041,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "12308:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1042,
                    "nodeType": "ArrayTypeName",
                    "src": "12308:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12247:89:2"
            },
            "returnParameters": {
              "id": 1045,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12346:0:2"
            },
            "scope": 1655,
            "src": "12201:235:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1085,
              "nodeType": "Block",
              "src": "12741:102:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1076,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "12771:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "12771:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 1078,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1063,
                        "src": "12783:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        }
                      },
                      {
                        "id": 1079,
                        "name": "new_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1065,
                        "src": "12794:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 1080,
                        "name": "call_data_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1067,
                        "src": "12805:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 1081,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1070,
                        "src": "12821:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      },
                      {
                        "id": 1082,
                        "name": "last_time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1072,
                        "src": "12828:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1075,
                      "name": "optimistic_perform_many",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1035,
                      "src": "12747:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata[] calldata,bytes32,bytes32,bytes32[] calldata,uint256)"
                      }
                    },
                    "id": 1083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12747:91:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1084,
                  "nodeType": "ExpressionStatement",
                  "src": "12747:91:2"
                }
              ]
            },
            "functionSelector": "6a8dddef",
            "id": 1086,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "perform_many_optimistically",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1063,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "12597:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1061,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "12597:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 1062,
                    "nodeType": "ArrayTypeName",
                    "src": "12597:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1065,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "12629:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1064,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12629:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1067,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "12652:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1066,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12652:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1070,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "12680:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1068,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "12680:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1069,
                    "nodeType": "ArrayTypeName",
                    "src": "12680:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1072,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "12710:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1071,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12710:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12591:140:2"
            },
            "returnParameters": {
              "id": 1074,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12741:0:2"
            },
            "scope": 1655,
            "src": "12555:288:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1143,
              "nodeType": "Block",
              "src": "13116:445:2",
              "statements": [
                {
                  "assignments": [
                    1099
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1099,
                      "mutability": "mutable",
                      "name": "accuser",
                      "nodeType": "VariableDeclaration",
                      "scope": 1143,
                      "src": "13122:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1098,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "13122:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1102,
                  "initialValue": {
                    "expression": {
                      "id": 1100,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "13140:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 1101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "13140:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13122:28:2"
                },
                {
                  "expression": {
                    "id": 1107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1103,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "13202:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1105,
                      "indexExpression": {
                        "id": 1104,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1088,
                        "src": "13210:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13202:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1106,
                      "name": "accuser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1099,
                      "src": "13221:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13202:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1108,
                  "nodeType": "ExpressionStatement",
                  "src": "13202:26:2"
                },
                {
                  "expression": {
                    "id": 1114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1109,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "13234:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1111,
                      "indexExpression": {
                        "id": 1110,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1088,
                        "src": "13252:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13234:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 1112,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "13263:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 1113,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "13263:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13234:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1115,
                  "nodeType": "ExpressionStatement",
                  "src": "13234:44:2"
                },
                {
                  "expression": {
                    "id": 1120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1116,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "13284:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1118,
                      "indexExpression": {
                        "id": 1117,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1099,
                        "src": "13292:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13284:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1119,
                      "name": "accuser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1099,
                      "src": "13303:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13284:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1121,
                  "nodeType": "ExpressionStatement",
                  "src": "13284:26:2"
                },
                {
                  "expression": {
                    "id": 1127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1122,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "13316:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1124,
                      "indexExpression": {
                        "id": 1123,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1099,
                        "src": "13334:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13316:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 1125,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "13345:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 1126,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "13345:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13316:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1128,
                  "nodeType": "ExpressionStatement",
                  "src": "13316:44:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 1131,
                              "name": "accuser",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1099,
                              "src": "13486:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1130,
                            "name": "apply_bond",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 345,
                            "src": "13475:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 1132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13475:19:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13498:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "13475:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f424f4e44",
                        "id": 1135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13501:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        },
                        "value": "INVALID_BOND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        }
                      ],
                      "id": 1129,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13467:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13467:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1137,
                  "nodeType": "ExpressionStatement",
                  "src": "13467:49:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1139,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1088,
                        "src": "13539:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1140,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1099,
                        "src": "13548:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1138,
                      "name": "ORI_Locked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 90,
                      "src": "13528:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 1141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13528:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1142,
                  "nodeType": "EmitStatement",
                  "src": "13523:33:2"
                }
              ]
            },
            "functionSelector": "f435f5a7",
            "id": 1144,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 1091,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "13084:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 1092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "13084:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 1093,
                "modifierName": {
                  "id": 1090,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "13073:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13073:22:2"
              },
              {
                "arguments": [
                  {
                    "id": 1095,
                    "name": "suspect",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1088,
                    "src": "13107:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1096,
                "modifierName": {
                  "id": 1094,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "13096:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13096:19:2"
              }
            ],
            "name": "lock",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1088,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 1144,
                  "src": "13039:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1087,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13039:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13038:17:2"
            },
            "returnParameters": {
              "id": 1097,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13116:0:2"
            },
            "scope": 1655,
            "src": "13025:536:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1273,
              "nodeType": "Block",
              "src": "13800:1276:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 1179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1168,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1150,
                                  "src": "13945:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 1169,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1148,
                                  "src": "13961:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 1172,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1152,
                                      "src": "13976:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1171,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "13968:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 1170,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "13968:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1173,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "13968:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 1166,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "13928:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 1167,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "13928:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 1174,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13928:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1165,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "13918:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13918:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 1176,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "13992:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 1178,
                          "indexExpression": {
                            "id": 1177,
                            "name": "suspect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1146,
                            "src": "14007:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "13992:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "13918:97:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 1180,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14023:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 1164,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13903:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13903:141:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1182,
                  "nodeType": "ExpressionStatement",
                  "src": "13903:141:2"
                },
                {
                  "assignments": [
                    1184
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1184,
                      "mutability": "mutable",
                      "name": "accuser",
                      "nodeType": "VariableDeclaration",
                      "scope": 1273,
                      "src": "14079:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1183,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "14079:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1188,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1185,
                      "name": "lockers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 132,
                      "src": "14097:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 1187,
                    "indexExpression": {
                      "id": 1186,
                      "name": "suspect",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1146,
                      "src": "14105:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14097:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14079:34:2"
                },
                {
                  "expression": {
                    "id": 1196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1189,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "14119:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1191,
                      "indexExpression": {
                        "id": 1190,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "14127:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14119:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 1194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14146:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1193,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14138:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1192,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14138:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1195,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14138:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "14119:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1197,
                  "nodeType": "ExpressionStatement",
                  "src": "14119:29:2"
                },
                {
                  "expression": {
                    "id": 1202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1198,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "14154:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1200,
                      "indexExpression": {
                        "id": 1199,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "14172:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14154:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14183:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14154:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1203,
                  "nodeType": "ExpressionStatement",
                  "src": "14154:30:2"
                },
                {
                  "expression": {
                    "id": 1211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1204,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "14190:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1206,
                      "indexExpression": {
                        "id": 1205,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1184,
                        "src": "14198:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14190:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 1209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14217:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14209:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1207,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14209:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14209:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "14190:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1212,
                  "nodeType": "ExpressionStatement",
                  "src": "14190:29:2"
                },
                {
                  "expression": {
                    "id": 1217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1213,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "14225:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1215,
                      "indexExpression": {
                        "id": 1214,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1184,
                        "src": "14243:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14225:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1216,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14254:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14225:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1218,
                  "nodeType": "ExpressionStatement",
                  "src": "14225:30:2"
                },
                {
                  "assignments": [
                    1220
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1220,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 1273,
                      "src": "14440:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1219,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14440:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1224,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1221,
                      "name": "balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 128,
                      "src": "14457:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1223,
                    "indexExpression": {
                      "id": 1222,
                      "name": "accuser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1184,
                      "src": "14466:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14457:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14440:34:2"
                },
                {
                  "expression": {
                    "id": 1229,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1225,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "14480:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1227,
                      "indexExpression": {
                        "id": 1226,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1184,
                        "src": "14489:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14480:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1228,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14500:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14480:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1230,
                  "nodeType": "ExpressionStatement",
                  "src": "14480:21:2"
                },
                {
                  "expression": {
                    "id": 1235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1231,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "14507:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1233,
                      "indexExpression": {
                        "id": 1232,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "14516:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14507:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 1234,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1220,
                      "src": "14528:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14507:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1236,
                  "nodeType": "ExpressionStatement",
                  "src": "14507:27:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1237,
                      "name": "last_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1152,
                      "src": "14624:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14637:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14624:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1248,
                  "nodeType": "IfStatement",
                  "src": "14620:87:2",
                  "trueBody": {
                    "id": 1247,
                    "nodeType": "Block",
                    "src": "14640:67:2",
                    "statements": [
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1241,
                              "name": "suspect",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1146,
                              "src": "14666:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1242,
                              "name": "accuser",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1184,
                              "src": "14675:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 1243,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14684:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1240,
                            "name": "ORI_Unlocked",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 98,
                            "src": "14653:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14653:33:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1245,
                        "nodeType": "EmitStatement",
                        "src": "14648:38:2"
                      },
                      {
                        "functionReturnParameters": 1163,
                        "id": 1246,
                        "nodeType": "Return",
                        "src": "14694:7:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 1264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1249,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "14910:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 1251,
                      "indexExpression": {
                        "id": 1250,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "14925:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14910:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 1255,
                              "name": "call_data_root",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1150,
                              "src": "14963:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1256,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1148,
                              "src": "14979:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 1259,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "14994:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 1260,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "14994:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1258,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14986:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1257,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14986:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1261,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14986:24:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 1253,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "14946:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 1254,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "14946:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 1262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14946:65:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1252,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "14936:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 1263,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14936:76:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "14910:102:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1265,
                  "nodeType": "ExpressionStatement",
                  "src": "14910:102:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1267,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "15037:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1268,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1184,
                        "src": "15046:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 1269,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "15055:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "15055:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1266,
                      "name": "ORI_Unlocked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 98,
                      "src": "15024:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15024:47:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1272,
                  "nodeType": "EmitStatement",
                  "src": "15019:52:2"
                }
              ]
            },
            "functionSelector": "8ee16d13",
            "id": 1274,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 1155,
                    "name": "suspect",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1146,
                    "src": "13739:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1156,
                "modifierName": {
                  "id": 1154,
                  "name": "is_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 236,
                  "src": "13729:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13729:18:2"
              },
              {
                "arguments": [
                  {
                    "id": 1158,
                    "name": "suspect",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1146,
                    "src": "13761:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1159,
                "modifierName": {
                  "id": 1157,
                  "name": "lock_expired",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 300,
                  "src": "13748:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13748:21:2"
              },
              {
                "arguments": [
                  {
                    "id": 1161,
                    "name": "suspect",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1146,
                    "src": "13791:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1162,
                "modifierName": {
                  "id": 1160,
                  "name": "no_rollback_required",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 251,
                  "src": "13770:20:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13770:29:2"
              }
            ],
            "name": "unlock",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1153,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1146,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 1274,
                  "src": "13630:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1145,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13630:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1148,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1274,
                  "src": "13651:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1147,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13651:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1150,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1274,
                  "src": "13670:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1149,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13670:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1152,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1274,
                  "src": "13698:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1151,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13698:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13624:95:2"
            },
            "returnParameters": {
              "id": 1163,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13800:0:2"
            },
            "scope": 1655,
            "src": "13609:1467:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1482,
              "nodeType": "Block",
              "src": "15405:2454:2",
              "statements": [
                {
                  "assignments": [
                    1295
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1295,
                      "mutability": "mutable",
                      "name": "accuser",
                      "nodeType": "VariableDeclaration",
                      "scope": 1482,
                      "src": "15411:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1294,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "15411:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1298,
                  "initialValue": {
                    "expression": {
                      "id": 1296,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "15429:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 1297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "15429:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15411:28:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1304,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 1300,
                            "name": "lockers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "15523:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 1302,
                          "indexExpression": {
                            "id": 1301,
                            "name": "suspect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1276,
                            "src": "15531:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "15523:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 1303,
                          "name": "accuser",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1295,
                          "src": "15543:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "15523:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4e4f545f4c4f434b4552",
                        "id": 1305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15552:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_09408156ba11532b86afbd369ce6b6d13495c1833ce415228722cff371a6667a",
                          "typeString": "literal_string \"NOT_LOCKER\""
                        },
                        "value": "NOT_LOCKER"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_09408156ba11532b86afbd369ce6b6d13495c1833ce415228722cff371a6667a",
                          "typeString": "literal_string \"NOT_LOCKER\""
                        }
                      ],
                      "id": 1299,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15515:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15515:50:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1307,
                  "nodeType": "ExpressionStatement",
                  "src": "15515:50:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 1323,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1312,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1283,
                                  "src": "15711:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 1313,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1281,
                                  "src": "15727:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 1316,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1288,
                                      "src": "15742:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1315,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15734:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 1314,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "15734:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1317,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15734:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 1310,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "15694:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 1311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "15694:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 1318,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15694:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1309,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "15684:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15684:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 1320,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "15758:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 1322,
                          "indexExpression": {
                            "id": 1321,
                            "name": "suspect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1276,
                            "src": "15773:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "15758:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "15684:97:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 1324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15789:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 1308,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15669:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1325,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15669:141:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1326,
                  "nodeType": "ExpressionStatement",
                  "src": "15669:141:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1330,
                            "name": "call_data_root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1283,
                            "src": "15904:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 1331,
                            "name": "call_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1279,
                            "src": "15920:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          {
                            "id": 1332,
                            "name": "proof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1286,
                            "src": "15931:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                              "typeString": "bytes32[] calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                              "typeString": "bytes32[] calldata"
                            }
                          ],
                          "expression": {
                            "id": 1328,
                            "name": "Internal_Merkle_Library",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12016,
                            "src": "15863:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                              "typeString": "type(library Internal_Merkle_Library)"
                            }
                          },
                          "id": 1329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "elements_exist_c",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7987,
                          "src": "15863:40:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes calldata[] calldata,bytes32[] calldata) pure returns (bool)"
                          }
                        },
                        "id": 1333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15863:74:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f43414c4c44415441",
                        "id": 1334,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15939:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_215ab9ed5ef5204c0b078038fc53ccc3354c9ce0951b366c01a50f8f928b6507",
                          "typeString": "literal_string \"INVALID_CALLDATA\""
                        },
                        "value": "INVALID_CALLDATA"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_215ab9ed5ef5204c0b078038fc53ccc3354c9ce0951b366c01a50f8f928b6507",
                          "typeString": "literal_string \"INVALID_CALLDATA\""
                        }
                      ],
                      "id": 1327,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15855:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15855:103:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1336,
                  "nodeType": "ExpressionStatement",
                  "src": "15855:103:2"
                },
                {
                  "assignments": [
                    1341
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1341,
                      "mutability": "mutable",
                      "name": "call_data_indices",
                      "nodeType": "VariableDeclaration",
                      "scope": 1482,
                      "src": "16026:34:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1339,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16026:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1340,
                        "nodeType": "ArrayTypeName",
                        "src": "16026:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1347,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1344,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1279,
                        "src": "16099:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        }
                      },
                      {
                        "id": 1345,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1286,
                        "src": "16110:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      ],
                      "expression": {
                        "id": 1342,
                        "name": "Internal_Merkle_Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12016,
                        "src": "16063:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                          "typeString": "type(library Internal_Merkle_Library)"
                        }
                      },
                      "id": 1343,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "get_indices",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8092,
                      "src": "16063:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (bytes calldata[] calldata,bytes32[] calldata) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16063:53:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16026:90:2"
                },
                {
                  "assignments": [
                    1349
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1349,
                      "mutability": "mutable",
                      "name": "transition_index",
                      "nodeType": "VariableDeclaration",
                      "scope": 1482,
                      "src": "16209:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1348,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16209:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1353,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1350,
                      "name": "call_data_indices",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1341,
                      "src": "16236:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "id": 1352,
                    "indexExpression": {
                      "hexValue": "30",
                      "id": 1351,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16254:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16236:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16209:47:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1354,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1279,
                        "src": "16365:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        }
                      },
                      "id": 1355,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "16365:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 1356,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16385:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "16365:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1423,
                    "nodeType": "Block",
                    "src": "16705:433:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1393,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1389,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1387,
                                  "name": "transition_index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1349,
                                  "src": "16776:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 1388,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16795:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "16776:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "baseExpression": {
                                  "id": 1390,
                                  "name": "call_data_indices",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1341,
                                  "src": "16800:17:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 1392,
                                "indexExpression": {
                                  "hexValue": "31",
                                  "id": 1391,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16818:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "16800:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16776:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1386,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "16768:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16768:53:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1395,
                        "nodeType": "ExpressionStatement",
                        "src": "16768:53:2"
                      },
                      {
                        "expression": {
                          "id": 1408,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1396,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1281,
                            "src": "16941:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 1399,
                                    "name": "call_data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1279,
                                    "src": "16960:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                      "typeString": "bytes calldata[] calldata"
                                    }
                                  },
                                  "id": 1401,
                                  "indexExpression": {
                                    "hexValue": "31",
                                    "id": 1400,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16970:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "16960:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  }
                                },
                                "id": 1403,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexRangeAccess",
                                "src": "16960:17:2",
                                "startExpression": {
                                  "hexValue": "3336",
                                  "id": 1402,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16973:2:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_36_by_1",
                                    "typeString": "int_const 36"
                                  },
                                  "value": "36"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                  "typeString": "bytes calldata slice"
                                }
                              },
                              {
                                "components": [
                                  {
                                    "id": 1405,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "16980:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 1404,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "16980:7:2",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "id": 1406,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "16979:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                  "typeString": "bytes calldata slice"
                                },
                                {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                }
                              ],
                              "expression": {
                                "id": 1397,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -1,
                                "src": "16949:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 1398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "decode",
                              "nodeType": "MemberAccess",
                              "src": "16949:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1407,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16949:40:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "16941:48:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1409,
                        "nodeType": "ExpressionStatement",
                        "src": "16941:48:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1419,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 1412,
                                    "name": "suspect",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1276,
                                    "src": "17072:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 1413,
                                      "name": "call_data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1279,
                                      "src": "17081:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                        "typeString": "bytes calldata[] calldata"
                                      }
                                    },
                                    "id": 1415,
                                    "indexExpression": {
                                      "hexValue": "30",
                                      "id": 1414,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "17091:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "17081:12:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  },
                                  {
                                    "id": 1416,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1281,
                                    "src": "17095:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 1411,
                                  "name": "verify_transition",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 677,
                                  "src": "17054:17:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$returns$_t_bool_$",
                                    "typeString": "function (address,bytes calldata,bytes32) view returns (bool)"
                                  }
                                },
                                "id": 1417,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17054:47:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "66616c7365",
                                "id": 1418,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17105:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "src": "17054:56:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "56414c49445f5452414e534954494f4e",
                              "id": 1420,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "17112:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_404769adf8d26bf2a8d6c04c4b34b3b5af22abb581709cbcfc0a448ab9a51428",
                                "typeString": "literal_string \"VALID_TRANSITION\""
                              },
                              "value": "VALID_TRANSITION"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_404769adf8d26bf2a8d6c04c4b34b3b5af22abb581709cbcfc0a448ab9a51428",
                                "typeString": "literal_string \"VALID_TRANSITION\""
                              }
                            ],
                            "id": 1410,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "17046:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17046:85:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1422,
                        "nodeType": "ExpressionStatement",
                        "src": "17046:85:2"
                      }
                    ]
                  },
                  "id": 1424,
                  "nodeType": "IfStatement",
                  "src": "16361:777:2",
                  "trueBody": {
                    "id": 1385,
                    "nodeType": "Block",
                    "src": "16388:311:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1361,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1359,
                                  "name": "transition_index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1349,
                                  "src": "16486:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 1360,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16505:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "16486:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 1364,
                                      "name": "proof",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1286,
                                      "src": "16518:5:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                        "typeString": "bytes32[] calldata"
                                      }
                                    },
                                    "id": 1366,
                                    "indexExpression": {
                                      "hexValue": "30",
                                      "id": 1365,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "16524:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "16518:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 1363,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "16510:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 1362,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16510:7:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16510:17:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16486:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "494e434f52524543545f43414c4c44415441",
                              "id": 1369,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16529:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_38010cb9e4e379eba95db333cad0bad5245b6dab781c70ead72769075aa77f91",
                                "typeString": "literal_string \"INCORRECT_CALLDATA\""
                              },
                              "value": "INCORRECT_CALLDATA"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_38010cb9e4e379eba95db333cad0bad5245b6dab781c70ead72769075aa77f91",
                                "typeString": "literal_string \"INCORRECT_CALLDATA\""
                              }
                            ],
                            "id": 1358,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "16478:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16478:72:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1371,
                        "nodeType": "ExpressionStatement",
                        "src": "16478:72:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1381,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 1374,
                                    "name": "suspect",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1276,
                                    "src": "16633:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 1375,
                                      "name": "call_data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1279,
                                      "src": "16642:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                        "typeString": "bytes calldata[] calldata"
                                      }
                                    },
                                    "id": 1377,
                                    "indexExpression": {
                                      "hexValue": "30",
                                      "id": 1376,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "16652:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "16642:12:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  },
                                  {
                                    "id": 1378,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1281,
                                    "src": "16656:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 1373,
                                  "name": "verify_transition",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 677,
                                  "src": "16615:17:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$returns$_t_bool_$",
                                    "typeString": "function (address,bytes calldata,bytes32) view returns (bool)"
                                  }
                                },
                                "id": 1379,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16615:47:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "66616c7365",
                                "id": 1380,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16666:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "src": "16615:56:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "56414c49445f5452414e534954494f4e",
                              "id": 1382,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16673:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_404769adf8d26bf2a8d6c04c4b34b3b5af22abb581709cbcfc0a448ab9a51428",
                                "typeString": "literal_string \"VALID_TRANSITION\""
                              },
                              "value": "VALID_TRANSITION"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_404769adf8d26bf2a8d6c04c4b34b3b5af22abb581709cbcfc0a448ab9a51428",
                                "typeString": "literal_string \"VALID_TRANSITION\""
                              }
                            ],
                            "id": 1372,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "16607:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16607:85:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1384,
                        "nodeType": "ExpressionStatement",
                        "src": "16607:85:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 1429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1425,
                      "name": "last_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1288,
                      "src": "17301:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 1426,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "17313:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1428,
                      "indexExpression": {
                        "id": 1427,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17322:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "17313:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17301:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1430,
                  "nodeType": "ExpressionStatement",
                  "src": "17301:29:2"
                },
                {
                  "expression": {
                    "id": 1435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1431,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "17336:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1433,
                      "indexExpression": {
                        "id": 1432,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17345:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17336:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17356:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "17336:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1436,
                  "nodeType": "ExpressionStatement",
                  "src": "17336:21:2"
                },
                {
                  "expression": {
                    "id": 1441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1437,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "17363:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1439,
                      "indexExpression": {
                        "id": 1438,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1295,
                        "src": "17372:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17363:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 1440,
                      "name": "last_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1288,
                      "src": "17384:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17363:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1442,
                  "nodeType": "ExpressionStatement",
                  "src": "17363:30:2"
                },
                {
                  "expression": {
                    "id": 1450,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1443,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "17436:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1445,
                      "indexExpression": {
                        "id": 1444,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1295,
                        "src": "17444:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17436:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 1448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17463:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1447,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "17455:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1446,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "17455:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17455:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "17436:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1451,
                  "nodeType": "ExpressionStatement",
                  "src": "17436:29:2"
                },
                {
                  "expression": {
                    "id": 1456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1452,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "17471:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1454,
                      "indexExpression": {
                        "id": 1453,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1295,
                        "src": "17489:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17471:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1455,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17500:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "17471:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1457,
                  "nodeType": "ExpressionStatement",
                  "src": "17471:30:2"
                },
                {
                  "expression": {
                    "id": 1462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1458,
                        "name": "rollback_sizes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 140,
                        "src": "17617:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1460,
                      "indexExpression": {
                        "id": 1459,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17632:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17617:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1461,
                      "name": "transition_index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1349,
                      "src": "17643:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17617:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1463,
                  "nodeType": "ExpressionStatement",
                  "src": "17617:42:2"
                },
                {
                  "expression": {
                    "id": 1468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1464,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "17728:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1466,
                      "indexExpression": {
                        "id": 1465,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17736:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17728:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1467,
                      "name": "suspect",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1276,
                      "src": "17747:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "17728:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1469,
                  "nodeType": "ExpressionStatement",
                  "src": "17728:26:2"
                },
                {
                  "expression": {
                    "id": 1474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1470,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "17760:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1472,
                      "indexExpression": {
                        "id": 1471,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17778:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17760:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1473,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17789:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "17760:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1475,
                  "nodeType": "ExpressionStatement",
                  "src": "17760:30:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1477,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1295,
                        "src": "17819:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1478,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17828:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1479,
                        "name": "transition_index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1349,
                        "src": "17837:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1476,
                      "name": "ORI_Fraud_Proven",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 106,
                      "src": "17802:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17802:52:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1481,
                  "nodeType": "EmitStatement",
                  "src": "17797:57:2"
                }
              ]
            },
            "functionSelector": "a68f5913",
            "id": 1483,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 1291,
                    "name": "suspect",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1276,
                    "src": "15396:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1292,
                "modifierName": {
                  "id": 1290,
                  "name": "is_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 236,
                  "src": "15386:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15386:18:2"
              }
            ],
            "name": "prove_fraud",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1276,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15225:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1275,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15225:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1279,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15246:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1277,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "15246:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 1278,
                    "nodeType": "ArrayTypeName",
                    "src": "15246:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1281,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15278:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1280,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15278:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1283,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15297:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1282,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15297:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1286,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15325:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1284,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "15325:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1285,
                    "nodeType": "ArrayTypeName",
                    "src": "15325:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1288,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15355:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1287,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15355:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15219:157:2"
            },
            "returnParameters": {
              "id": 1293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15405:0:2"
            },
            "scope": 1655,
            "src": "15199:2660:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1653,
              "nodeType": "Block",
              "src": "18269:2090:2",
              "statements": [
                {
                  "assignments": [
                    1505
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1505,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 1653,
                      "src": "18275:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1504,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "18275:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1508,
                  "initialValue": {
                    "expression": {
                      "id": 1506,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "18290:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 1507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "18290:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18275:25:2"
                },
                {
                  "assignments": [
                    1510
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1510,
                      "mutability": "mutable",
                      "name": "expected_size",
                      "nodeType": "VariableDeclaration",
                      "scope": 1653,
                      "src": "18306:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1509,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18306:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1514,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1511,
                      "name": "rollback_sizes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 140,
                      "src": "18330:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1513,
                    "indexExpression": {
                      "id": 1512,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1505,
                      "src": "18345:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18330:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18306:44:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1516,
                          "name": "expected_size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1510,
                          "src": "18364:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18381:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "18364:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "524f4c4c4241434b5f554e4e4543455353415259",
                        "id": 1519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18384:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7475ac284e86e08ce776bbe1320019693ab8c3a2aa62a3b51988d29374752a3c",
                          "typeString": "literal_string \"ROLLBACK_UNNECESSARY\""
                        },
                        "value": "ROLLBACK_UNNECESSARY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7475ac284e86e08ce776bbe1320019693ab8c3a2aa62a3b51988d29374752a3c",
                          "typeString": "literal_string \"ROLLBACK_UNNECESSARY\""
                        }
                      ],
                      "id": 1515,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18356:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18356:51:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1521,
                  "nodeType": "ExpressionStatement",
                  "src": "18356:51:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 1537,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1526,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1497,
                                  "src": "18553:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 1527,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1499,
                                  "src": "18569:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 1530,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1501,
                                      "src": "18584:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1529,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "18576:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 1528,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "18576:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1531,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "18576:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 1524,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "18536:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 1525,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "18536:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 1532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18536:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1523,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "18526:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18526:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 1534,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "18600:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 1536,
                          "indexExpression": {
                            "id": 1535,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1505,
                            "src": "18615:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18600:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "18526:94:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 1538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18628:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 1522,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18511:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18511:138:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1540,
                  "nodeType": "ExpressionStatement",
                  "src": "18511:138:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1544,
                            "name": "call_data_root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1497,
                            "src": "18777:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 1545,
                            "name": "current_size",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1493,
                            "src": "18793:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 1546,
                            "name": "current_size_proof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1495,
                            "src": "18807:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 1542,
                            "name": "Internal_Merkle_Library",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12016,
                            "src": "18741:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                              "typeString": "type(library Internal_Merkle_Library)"
                            }
                          },
                          "id": 1543,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "verify_size",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8193,
                          "src": "18741:35:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (bytes32,uint256,bytes32) pure returns (bool)"
                          }
                        },
                        "id": 1547,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18741:85:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f53495a45",
                        "id": 1548,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18828:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5b0326815c949ba02e79cc00c9c705f4cc5fe5d094c066aa12411c3fe67689a1",
                          "typeString": "literal_string \"INVALID_SIZE\""
                        },
                        "value": "INVALID_SIZE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5b0326815c949ba02e79cc00c9c705f4cc5fe5d094c066aa12411c3fe67689a1",
                          "typeString": "literal_string \"INVALID_SIZE\""
                        }
                      ],
                      "id": 1541,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18733:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18733:110:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1550,
                  "nodeType": "ExpressionStatement",
                  "src": "18733:110:2"
                },
                {
                  "assignments": [
                    1552
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1552,
                      "mutability": "mutable",
                      "name": "rolled_back_size",
                      "nodeType": "VariableDeclaration",
                      "scope": 1653,
                      "src": "18966:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1551,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18966:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1559,
                  "initialValue": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 1555,
                          "name": "roll_back_proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1491,
                          "src": "19001:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          }
                        },
                        "id": 1557,
                        "indexExpression": {
                          "hexValue": "30",
                          "id": 1556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19017:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19001:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 1554,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18993:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 1553,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18993:7:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 1558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18993:27:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18966:54:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1563,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1561,
                          "name": "rolled_back_size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1552,
                          "src": "19034:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "id": 1562,
                          "name": "current_size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1493,
                          "src": "19053:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "19034:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f524f4c4c4241434b",
                        "id": 1564,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19067:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1a4c145c2ce98330adf0740358f2a74d3800d628516fa14ab01326ce1b58d576",
                          "typeString": "literal_string \"INSUFFICIENT_ROLLBACK\""
                        },
                        "value": "INSUFFICIENT_ROLLBACK"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1a4c145c2ce98330adf0740358f2a74d3800d628516fa14ab01326ce1b58d576",
                          "typeString": "literal_string \"INSUFFICIENT_ROLLBACK\""
                        }
                      ],
                      "id": 1560,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19026:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1565,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19026:65:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1566,
                  "nodeType": "ExpressionStatement",
                  "src": "19026:65:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1570,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1568,
                          "name": "rolled_back_size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1552,
                          "src": "19165:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 1569,
                          "name": "expected_size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1510,
                          "src": "19185:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "19165:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "524f4c4c4241434b5f544f4f5f44454550",
                        "id": 1571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19200:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_88c7125d9fc860b0f2c82ce8e25fceae4ba76f43ecee84a3aa6e61dead5544c2",
                          "typeString": "literal_string \"ROLLBACK_TOO_DEEP\""
                        },
                        "value": "ROLLBACK_TOO_DEEP"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_88c7125d9fc860b0f2c82ce8e25fceae4ba76f43ecee84a3aa6e61dead5544c2",
                          "typeString": "literal_string \"ROLLBACK_TOO_DEEP\""
                        }
                      ],
                      "id": 1567,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19157:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19157:63:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1573,
                  "nodeType": "ExpressionStatement",
                  "src": "19157:63:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 1582,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 1577,
                              "name": "rolled_back_call_data_root",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1485,
                              "src": "19413:26:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1578,
                              "name": "rolled_back_call_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1488,
                              "src": "19441:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "bytes calldata[] calldata"
                              }
                            },
                            {
                              "id": 1579,
                              "name": "roll_back_proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1491,
                              "src": "19464:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "bytes calldata[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              }
                            ],
                            "expression": {
                              "id": 1575,
                              "name": "Internal_Merkle_Library",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12016,
                              "src": "19371:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                                "typeString": "type(library Internal_Merkle_Library)"
                              }
                            },
                            "id": 1576,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "try_append_many_c",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9044,
                            "src": "19371:41:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32,bytes calldata[] calldata,bytes32[] calldata) pure returns (bytes32)"
                            }
                          },
                          "id": 1580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19371:109:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 1581,
                          "name": "call_data_root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1497,
                          "src": "19492:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "19371:135:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4c4c4241434b",
                        "id": 1583,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19514:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4df44981ed843032dcd66739e9d9ca9b39714bc67038b45850ddccb94cfaeeb",
                          "typeString": "literal_string \"INVALID_ROLLBACK\""
                        },
                        "value": "INVALID_ROLLBACK"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4df44981ed843032dcd66739e9d9ca9b39714bc67038b45850ddccb94cfaeeb",
                          "typeString": "literal_string \"INVALID_ROLLBACK\""
                        }
                      ],
                      "id": 1574,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19356:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19356:182:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1585,
                  "nodeType": "ExpressionStatement",
                  "src": "19356:182:2"
                },
                {
                  "expression": {
                    "id": 1598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1586,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1499,
                      "src": "19665:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 1589,
                              "name": "rolled_back_call_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1488,
                              "src": "19684:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "bytes calldata[] calldata"
                              }
                            },
                            "id": 1591,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 1590,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19706:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "19684:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "id": 1593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "19684:29:2",
                          "startExpression": {
                            "hexValue": "3336",
                            "id": 1592,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19709:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_36_by_1",
                              "typeString": "int_const 36"
                            },
                            "value": "36"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 1595,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19716:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1594,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "19716:7:2",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 1596,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "19715:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          },
                          {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        ],
                        "expression": {
                          "id": 1587,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "19673:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 1588,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "19673:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 1597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19673:52:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "19665:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1599,
                  "nodeType": "ExpressionStatement",
                  "src": "19665:60:2"
                },
                {
                  "expression": {
                    "id": 1615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1600,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "19830:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 1602,
                      "indexExpression": {
                        "id": 1601,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1505,
                        "src": "19845:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "19830:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 1606,
                              "name": "rolled_back_call_data_root",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1485,
                              "src": "19880:26:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1607,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1499,
                              "src": "19908:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 1610,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "19923:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 1611,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "19923:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1609,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "19915:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1608,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "19915:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1612,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19915:24:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 1604,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "19863:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 1605,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "19863:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 1613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19863:77:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1603,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "19853:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 1614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19853:88:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "19830:111:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1616,
                  "nodeType": "ExpressionStatement",
                  "src": "19830:111:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1617,
                      "name": "rolled_back_size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1552,
                      "src": "20029:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 1618,
                      "name": "expected_size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1510,
                      "src": "20049:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20029:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1636,
                  "nodeType": "IfStatement",
                  "src": "20025:112:2",
                  "trueBody": {
                    "id": 1635,
                    "nodeType": "Block",
                    "src": "20064:73:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 1627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1620,
                              "name": "lockers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 132,
                              "src": "20072:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 1622,
                            "indexExpression": {
                              "id": 1621,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1505,
                              "src": "20080:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "20072:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1625,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "20096:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1624,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "20088:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1623,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "20088:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20088:10:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "20072:26:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1628,
                        "nodeType": "ExpressionStatement",
                        "src": "20072:26:2"
                      },
                      {
                        "expression": {
                          "id": 1633,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1629,
                              "name": "rollback_sizes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 140,
                              "src": "20106:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1631,
                            "indexExpression": {
                              "id": 1630,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1505,
                              "src": "20121:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "20106:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 1632,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20129:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "20106:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1634,
                        "nodeType": "ExpressionStatement",
                        "src": "20106:24:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1642,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 1639,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1505,
                              "src": "20259:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1638,
                            "name": "apply_bond",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 345,
                            "src": "20248:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 1640,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20248:16:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20268:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "20248:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f424f4e44",
                        "id": 1643,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20271:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        },
                        "value": "INVALID_BOND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        }
                      ],
                      "id": 1637,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "20240:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20240:46:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1645,
                  "nodeType": "ExpressionStatement",
                  "src": "20240:46:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1647,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1505,
                        "src": "20314:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1648,
                        "name": "rolled_back_size",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1552,
                        "src": "20320:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 1649,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "20338:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "20338:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1646,
                      "name": "ORI_Rolled_Back",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 114,
                      "src": "20298:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 1651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20298:56:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1652,
                  "nodeType": "EmitStatement",
                  "src": "20293:61:2"
                }
              ]
            },
            "functionSelector": "e1124200",
            "id": 1654,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rollback",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1485,
                  "mutability": "mutable",
                  "name": "rolled_back_call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18001:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1484,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18001:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1488,
                  "mutability": "mutable",
                  "name": "rolled_back_call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18041:38:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1486,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "18041:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 1487,
                    "nodeType": "ArrayTypeName",
                    "src": "18041:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1491,
                  "mutability": "mutable",
                  "name": "roll_back_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18085:34:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1489,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "18085:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1490,
                    "nodeType": "ArrayTypeName",
                    "src": "18085:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1493,
                  "mutability": "mutable",
                  "name": "current_size",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18125:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1492,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18125:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1495,
                  "mutability": "mutable",
                  "name": "current_size_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18151:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1494,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18151:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1497,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18183:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1496,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18183:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1499,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18211:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1498,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18211:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1501,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18230:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1500,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18230:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17995:256:2"
            },
            "returnParameters": {
              "id": 1503,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18269:0:2"
            },
            "scope": 1655,
            "src": "17978:2381:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 1656,
        "src": "540:19821:2"
      }
    ],
    "src": "33:20329:2"
  },
  "legacyAST": {
    "absolutePath": "/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/optimistic-roll-in.sol",
    "exportedSymbols": {
      "Internal_Merkle_Library": [
        12016
      ],
      "Optimistic_Roll_In": [
        1655
      ],
      "Optimistic_Roll_In_Compatible": [
        61
      ]
    },
    "id": 1656,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 63,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0",
          "<=",
          "0.7",
          ".3"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:32:2"
      },
      {
        "id": 64,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:2"
      },
      {
        "absolutePath": "merkle-trees/eth/contracts/internal-merkle-library.sol",
        "file": "merkle-trees/eth/contracts/internal-merkle-library.sol",
        "id": 65,
        "nodeType": "ImportDirective",
        "scope": 1656,
        "sourceUnit": 12017,
        "src": "101:64:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/optimistic-roll-in-compatible.sol",
        "file": "./optimistic-roll-in-compatible.sol",
        "id": 66,
        "nodeType": "ImportDirective",
        "scope": 1656,
        "sourceUnit": 62,
        "src": "166:45:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 1655,
        "linearizedBaseContracts": [
          1655
        ],
        "name": "Optimistic_Roll_In",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "id": 72,
            "name": "ORI_New_State",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 71,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 68,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 72,
                  "src": "592:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "592:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 72,
                  "src": "614:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 69,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "614:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "591:49:2"
            },
            "src": "572:69:2"
          },
          {
            "anonymous": false,
            "id": 78,
            "name": "ORI_New_Optimistic_State",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 77,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 74,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "675:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 73,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "675:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 76,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "block_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "697:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 75,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "697:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "674:50:2"
            },
            "src": "644:81:2"
          },
          {
            "anonymous": false,
            "id": 84,
            "name": "ORI_New_Optimistic_States",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 83,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 80,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 84,
                  "src": "760:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 79,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "760:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 82,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "block_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 84,
                  "src": "782:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 81,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "782:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "759:50:2"
            },
            "src": "728:82:2"
          },
          {
            "anonymous": false,
            "id": 90,
            "name": "ORI_Locked",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 89,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 86,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 90,
                  "src": "830:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 85,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "830:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 88,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "accuser",
                  "nodeType": "VariableDeclaration",
                  "scope": 90,
                  "src": "855:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 87,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "855:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "829:50:2"
            },
            "src": "813:67:2"
          },
          {
            "anonymous": false,
            "id": 98,
            "name": "ORI_Unlocked",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 97,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 92,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 98,
                  "src": "902:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 91,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "902:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 94,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "accuser",
                  "nodeType": "VariableDeclaration",
                  "scope": 98,
                  "src": "927:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 93,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "927:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 96,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "block_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 98,
                  "src": "952:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 95,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "952:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "901:78:2"
            },
            "src": "883:97:2"
          },
          {
            "anonymous": false,
            "id": 106,
            "name": "ORI_Fraud_Proven",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 105,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 100,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "accuser",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1006:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 99,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1006:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 102,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1031:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 101,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1031:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 104,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "transition_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1056:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 103,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1056:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1005:84:2"
            },
            "src": "983:107:2"
          },
          {
            "anonymous": false,
            "id": 114,
            "name": "ORI_Rolled_Back",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 108,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 114,
                  "src": "1115:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 107,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1115:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 110,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "tree_size",
                  "nodeType": "VariableDeclaration",
                  "scope": 114,
                  "src": "1137:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 109,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1137:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 112,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "block_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 114,
                  "src": "1164:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 111,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1164:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1114:77:2"
            },
            "src": "1093:99:2"
          },
          {
            "constant": false,
            "functionSelector": "4de94320",
            "id": 116,
            "mutability": "immutable",
            "name": "logic_contract",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1196:61:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
              "typeString": "contract Optimistic_Roll_In_Compatible"
            },
            "typeName": {
              "id": 115,
              "name": "Optimistic_Roll_In_Compatible",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 61,
              "src": "1196:29:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                "typeString": "contract Optimistic_Roll_In_Compatible"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "480bb7c4",
            "id": 118,
            "mutability": "immutable",
            "name": "lock_time",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1261:34:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 117,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1261:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "b2055400",
            "id": 120,
            "mutability": "immutable",
            "name": "required_bond",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1299:38:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 119,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1299:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "af7b5a41",
            "id": 124,
            "mutability": "mutable",
            "name": "account_states",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1342:49:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
              "typeString": "mapping(address => bytes32)"
            },
            "typeName": {
              "id": 123,
              "keyType": {
                "id": 121,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1350:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1342:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                "typeString": "mapping(address => bytes32)"
              },
              "valueType": {
                "id": 122,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1361:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "27e235e3",
            "id": 128,
            "mutability": "mutable",
            "name": "balances",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1395:43:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 127,
              "keyType": {
                "id": 125,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1403:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1395:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 126,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1414:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "2c8e7a21",
            "id": 132,
            "mutability": "mutable",
            "name": "lockers",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1442:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
              "typeString": "mapping(address => address)"
            },
            "typeName": {
              "id": 131,
              "keyType": {
                "id": 129,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1450:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1442:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                "typeString": "mapping(address => address)"
              },
              "valueType": {
                "id": 130,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1461:7:2",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "7a9f05b5",
            "id": 136,
            "mutability": "mutable",
            "name": "locked_timestamps",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1488:52:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 135,
              "keyType": {
                "id": 133,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1496:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1488:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 134,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1507:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c45481bb",
            "id": 140,
            "mutability": "mutable",
            "name": "rollback_sizes",
            "nodeType": "VariableDeclaration",
            "scope": 1655,
            "src": "1544:49:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 139,
              "keyType": {
                "id": 137,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1552:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1544:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 138,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1563:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 163,
              "nodeType": "Block",
              "src": "1694:137:2",
              "statements": [
                {
                  "expression": {
                    "id": 153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 149,
                      "name": "logic_contract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 116,
                      "src": "1700:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                        "typeString": "contract Optimistic_Roll_In_Compatible"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 151,
                          "name": "_logic_address",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 142,
                          "src": "1747:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 150,
                        "name": "Optimistic_Roll_In_Compatible",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61,
                        "src": "1717:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Optimistic_Roll_In_Compatible_$61_$",
                          "typeString": "type(contract Optimistic_Roll_In_Compatible)"
                        }
                      },
                      "id": 152,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1717:45:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                        "typeString": "contract Optimistic_Roll_In_Compatible"
                      }
                    },
                    "src": "1700:62:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                      "typeString": "contract Optimistic_Roll_In_Compatible"
                    }
                  },
                  "id": 154,
                  "nodeType": "ExpressionStatement",
                  "src": "1700:62:2"
                },
                {
                  "expression": {
                    "id": 157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 155,
                      "name": "lock_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 118,
                      "src": "1768:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 156,
                      "name": "_lock_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 144,
                      "src": "1780:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1768:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 158,
                  "nodeType": "ExpressionStatement",
                  "src": "1768:22:2"
                },
                {
                  "expression": {
                    "id": 161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 159,
                      "name": "required_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 120,
                      "src": "1796:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 160,
                      "name": "_required_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 146,
                      "src": "1812:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1796:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 162,
                  "nodeType": "ExpressionStatement",
                  "src": "1796:30:2"
                }
              ]
            },
            "id": 164,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 147,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 142,
                  "mutability": "mutable",
                  "name": "_logic_address",
                  "nodeType": "VariableDeclaration",
                  "scope": 164,
                  "src": "1615:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 141,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1615:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 144,
                  "mutability": "mutable",
                  "name": "_lock_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 164,
                  "src": "1643:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 143,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1643:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 146,
                  "mutability": "mutable",
                  "name": "_required_bond",
                  "nodeType": "VariableDeclaration",
                  "scope": 164,
                  "src": "1667:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 145,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1667:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1609:84:2"
            },
            "returnParameters": {
              "id": 148,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1694:0:2"
            },
            "scope": 1655,
            "src": "1598:233:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 181,
              "nodeType": "Block",
              "src": "1870:84:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 169,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "1884:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 171,
                          "indexExpression": {
                            "id": 170,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 166,
                            "src": "1899:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1884:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 174,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1916:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1908:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 172,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1908:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1908:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "1884:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f494e495449414c495a4544",
                        "id": 177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1920:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3",
                          "typeString": "literal_string \"ALREADY_INITIALIZED\""
                        },
                        "value": "ALREADY_INITIALIZED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3",
                          "typeString": "literal_string \"ALREADY_INITIALIZED\""
                        }
                      ],
                      "id": 168,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1876:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1876:66:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 179,
                  "nodeType": "ExpressionStatement",
                  "src": "1876:66:2"
                },
                {
                  "id": 180,
                  "nodeType": "PlaceholderStatement",
                  "src": "1948:1:2"
                }
              ]
            },
            "id": 182,
            "name": "initialized",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 166,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 182,
                  "src": "1856:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 165,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1856:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1855:14:2"
            },
            "src": "1835:119:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 199,
              "nodeType": "Block",
              "src": "1997:84:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 187,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "2011:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 189,
                          "indexExpression": {
                            "id": 188,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 184,
                            "src": "2026:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2011:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 192,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2043:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 191,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2035:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 190,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "2035:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2035:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "2011:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f494e495449414c495a4544",
                        "id": 195,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2047:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3",
                          "typeString": "literal_string \"ALREADY_INITIALIZED\""
                        },
                        "value": "ALREADY_INITIALIZED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3",
                          "typeString": "literal_string \"ALREADY_INITIALIZED\""
                        }
                      ],
                      "id": 186,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2003:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2003:66:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 197,
                  "nodeType": "ExpressionStatement",
                  "src": "2003:66:2"
                },
                {
                  "id": 198,
                  "nodeType": "PlaceholderStatement",
                  "src": "2075:1:2"
                }
              ]
            },
            "id": 200,
            "name": "not_initialized",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 184,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 200,
                  "src": "1983:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 183,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1983:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1982:14:2"
            },
            "src": "1958:123:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 217,
              "nodeType": "Block",
              "src": "2119:72:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 205,
                            "name": "lockers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "2133:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 207,
                          "indexExpression": {
                            "id": 206,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 202,
                            "src": "2141:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2133:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 210,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2158:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 209,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2150:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 208,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2150:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 211,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2150:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2133:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4143434f554e545f4c4f434b4544",
                        "id": 213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2162:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d8cd4d34be656b6a3d5f1388122c3376b98d03bc8880e73b32080138dac9d22e",
                          "typeString": "literal_string \"ACCOUNT_LOCKED\""
                        },
                        "value": "ACCOUNT_LOCKED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d8cd4d34be656b6a3d5f1388122c3376b98d03bc8880e73b32080138dac9d22e",
                          "typeString": "literal_string \"ACCOUNT_LOCKED\""
                        }
                      ],
                      "id": 204,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2125:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2125:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 215,
                  "nodeType": "ExpressionStatement",
                  "src": "2125:54:2"
                },
                {
                  "id": 216,
                  "nodeType": "PlaceholderStatement",
                  "src": "2185:1:2"
                }
              ]
            },
            "id": 218,
            "name": "not_locked",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 202,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 218,
                  "src": "2105:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 201,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2105:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2104:14:2"
            },
            "src": "2085:106:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 235,
              "nodeType": "Block",
              "src": "2228:74:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 230,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 223,
                            "name": "lockers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "2242:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 225,
                          "indexExpression": {
                            "id": 224,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 220,
                            "src": "2250:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2242:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 228,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2267:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 227,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2259:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 226,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2259:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2259:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2242:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4143434f554e545f554e4c4f434b4544",
                        "id": 231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2271:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6bace5e21acabd474698bbe6ec192fcd6115960c23cb618f270e1eb277fca082",
                          "typeString": "literal_string \"ACCOUNT_UNLOCKED\""
                        },
                        "value": "ACCOUNT_UNLOCKED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6bace5e21acabd474698bbe6ec192fcd6115960c23cb618f270e1eb277fca082",
                          "typeString": "literal_string \"ACCOUNT_UNLOCKED\""
                        }
                      ],
                      "id": 222,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2234:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2234:56:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 233,
                  "nodeType": "ExpressionStatement",
                  "src": "2234:56:2"
                },
                {
                  "id": 234,
                  "nodeType": "PlaceholderStatement",
                  "src": "2296:1:2"
                }
              ]
            },
            "id": 236,
            "name": "is_locked",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 221,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 220,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 236,
                  "src": "2214:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 219,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2214:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2213:14:2"
            },
            "src": "2195:107:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 250,
              "nodeType": "Block",
              "src": "2350:73:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 245,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 241,
                            "name": "rollback_sizes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 140,
                            "src": "2364:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 243,
                          "indexExpression": {
                            "id": 242,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 238,
                            "src": "2379:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2364:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2388:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2364:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "524f4c4c4241434b5f5245515549524544",
                        "id": 246,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2391:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1d78e5a07119f9b645a7581e958e2cbd94e3faf79a215f6ad2c050e79ae8858f",
                          "typeString": "literal_string \"ROLLBACK_REQUIRED\""
                        },
                        "value": "ROLLBACK_REQUIRED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1d78e5a07119f9b645a7581e958e2cbd94e3faf79a215f6ad2c050e79ae8858f",
                          "typeString": "literal_string \"ROLLBACK_REQUIRED\""
                        }
                      ],
                      "id": 240,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2356:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2356:55:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 248,
                  "nodeType": "ExpressionStatement",
                  "src": "2356:55:2"
                },
                {
                  "id": 249,
                  "nodeType": "PlaceholderStatement",
                  "src": "2417:1:2"
                }
              ]
            },
            "id": 251,
            "name": "no_rollback_required",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 238,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 251,
                  "src": "2336:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 237,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2336:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2335:14:2"
            },
            "src": "2306:117:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 266,
              "nodeType": "Block",
              "src": "2473:169:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 261,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 256,
                            "name": "last_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 253,
                            "src": "2569:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 257,
                            "name": "lock_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 118,
                            "src": "2581:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2569:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "expression": {
                            "id": 259,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "2593:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "2593:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2569:39:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f54494d45",
                        "id": 262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2610:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e6e29aa742787528e4ef5658c2f6ed3ed5d0e420556a6b49b0477b986b54ba9e",
                          "typeString": "literal_string \"INSUFFICIENT_TIME\""
                        },
                        "value": "INSUFFICIENT_TIME"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e6e29aa742787528e4ef5658c2f6ed3ed5d0e420556a6b49b0477b986b54ba9e",
                          "typeString": "literal_string \"INSUFFICIENT_TIME\""
                        }
                      ],
                      "id": 255,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2561:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2561:69:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 264,
                  "nodeType": "ExpressionStatement",
                  "src": "2561:69:2"
                },
                {
                  "id": 265,
                  "nodeType": "PlaceholderStatement",
                  "src": "2636:1:2"
                }
              ]
            },
            "id": 267,
            "name": "can_exit_optimism",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 254,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 253,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 267,
                  "src": "2454:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 252,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2454:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2453:19:2"
            },
            "src": "2427:215:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 281,
              "nodeType": "Block",
              "src": "2703:178:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 273,
                            "name": "call_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 270,
                            "src": "2823:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "2823:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2842:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "2823:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f43414c4c44415441",
                        "id": 277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2845:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_75b798616894f882ce14b76db6c3631d00de9b6c56a6b2356d5c5945068593de",
                          "typeString": "literal_string \"INSUFFICIENT_CALLDATA\""
                        },
                        "value": "INSUFFICIENT_CALLDATA"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_75b798616894f882ce14b76db6c3631d00de9b6c56a6b2356d5c5945068593de",
                          "typeString": "literal_string \"INSUFFICIENT_CALLDATA\""
                        }
                      ],
                      "id": 272,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2815:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2815:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 279,
                  "nodeType": "ExpressionStatement",
                  "src": "2815:54:2"
                },
                {
                  "id": 280,
                  "nodeType": "PlaceholderStatement",
                  "src": "2875:1:2"
                }
              ]
            },
            "id": 282,
            "name": "sufficient_calldata",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 271,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 270,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 282,
                  "src": "2675:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 268,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "2675:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 269,
                    "nodeType": "ArrayTypeName",
                    "src": "2675:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2674:28:2"
            },
            "src": "2646:235:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 299,
              "nodeType": "Block",
              "src": "2921:104:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 294,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 291,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 287,
                              "name": "locked_timestamps",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 136,
                              "src": "2935:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 289,
                            "indexExpression": {
                              "id": 288,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 284,
                              "src": "2953:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2935:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 290,
                            "name": "lock_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 118,
                            "src": "2961:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2935:35:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 292,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "2974:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "2974:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2935:54:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f57494e444f57",
                        "id": 295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2991:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9d48b545779b96f560612b82c655ba6eceb166f41c67537af4882fd7107529bc",
                          "typeString": "literal_string \"INSUFFICIENT_WINDOW\""
                        },
                        "value": "INSUFFICIENT_WINDOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9d48b545779b96f560612b82c655ba6eceb166f41c67537af4882fd7107529bc",
                          "typeString": "literal_string \"INSUFFICIENT_WINDOW\""
                        }
                      ],
                      "id": 286,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2927:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2927:86:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 297,
                  "nodeType": "ExpressionStatement",
                  "src": "2927:86:2"
                },
                {
                  "id": 298,
                  "nodeType": "PlaceholderStatement",
                  "src": "3019:1:2"
                }
              ]
            },
            "id": 300,
            "name": "lock_expired",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 284,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 300,
                  "src": "2907:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 283,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2907:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2906:14:2"
            },
            "src": "2885:140:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 308,
              "nodeType": "Block",
              "src": "3119:33:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 304,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3136:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "3136:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 303,
                      "name": "apply_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 345,
                      "src": "3125:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) returns (uint256)"
                      }
                    },
                    "id": 306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3125:22:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 307,
                  "nodeType": "ExpressionStatement",
                  "src": "3125:22:2"
                }
              ]
            },
            "id": 309,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 301,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3099:2:2"
            },
            "returnParameters": {
              "id": 302,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3119:0:2"
            },
            "scope": 1655,
            "src": "3092:60:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 344,
              "nodeType": "Block",
              "src": "3304:202:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 316,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "3314:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 318,
                      "indexExpression": {
                        "id": 317,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 311,
                        "src": "3323:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3314:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 319,
                      "name": "required_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 120,
                      "src": "3332:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3314:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 324,
                  "nodeType": "IfStatement",
                  "src": "3310:53:2",
                  "trueBody": {
                    "expression": {
                      "expression": {
                        "id": 321,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "3354:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "3354:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 315,
                    "id": 323,
                    "nodeType": "Return",
                    "src": "3347:16:2"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 329,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 326,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3378:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "3378:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 328,
                          "name": "required_bond",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 120,
                          "src": "3391:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3378:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f424f4e44",
                        "id": 330,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3406:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f14886dce54eed8f2c7fac7b8cb79aa35276e9b008920bb3c153d53ca3c75a28",
                          "typeString": "literal_string \"INSUFFICIENT_BOND\""
                        },
                        "value": "INSUFFICIENT_BOND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f14886dce54eed8f2c7fac7b8cb79aa35276e9b008920bb3c153d53ca3c75a28",
                          "typeString": "literal_string \"INSUFFICIENT_BOND\""
                        }
                      ],
                      "id": 325,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3370:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 331,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3370:56:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 332,
                  "nodeType": "ExpressionStatement",
                  "src": "3370:56:2"
                },
                {
                  "expression": {
                    "id": 337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 333,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "3433:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 335,
                      "indexExpression": {
                        "id": 334,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 311,
                        "src": "3442:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3433:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 336,
                      "name": "required_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 120,
                      "src": "3450:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3433:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 338,
                  "nodeType": "ExpressionStatement",
                  "src": "3433:30:2"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 339,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "3476:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "3476:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 341,
                      "name": "required_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 120,
                      "src": "3488:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3476:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 315,
                  "id": 343,
                  "nodeType": "Return",
                  "src": "3469:32:2"
                }
              ]
            },
            "id": 345,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "apply_bond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 311,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 345,
                  "src": "3253:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 310,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3253:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3252:14:2"
            },
            "returnParameters": {
              "id": 315,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 314,
                  "mutability": "mutable",
                  "name": "remainder",
                  "nodeType": "VariableDeclaration",
                  "scope": 345,
                  "src": "3285:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 313,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3285:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3284:19:2"
            },
            "scope": 1655,
            "src": "3233:273:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 359,
              "nodeType": "Block",
              "src": "3585:57:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 355,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 352,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 347,
                              "src": "3610:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 351,
                            "name": "apply_bond",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 345,
                            "src": "3599:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3599:16:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3619:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3599:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f424f4e44",
                        "id": 356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3622:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        },
                        "value": "INVALID_BOND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        }
                      ],
                      "id": 350,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3591:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3591:46:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 358,
                  "nodeType": "ExpressionStatement",
                  "src": "3591:46:2"
                }
              ]
            },
            "functionSelector": "247ce85b",
            "id": 360,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 347,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 360,
                  "src": "3554:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 346,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3554:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3553:14:2"
            },
            "returnParameters": {
              "id": 349,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3585:0:2"
            },
            "scope": 1655,
            "src": "3540:102:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 411,
              "nodeType": "Block",
              "src": "3783:517:2",
              "statements": [
                {
                  "assignments": [
                    368
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 368,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 411,
                      "src": "3789:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 367,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3789:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 371,
                  "initialValue": {
                    "expression": {
                      "id": 369,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "3804:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 370,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "3804:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3789:25:2"
                },
                {
                  "assignments": [
                    373
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 373,
                      "mutability": "mutable",
                      "name": "remainder",
                      "nodeType": "VariableDeclaration",
                      "scope": 411,
                      "src": "3820:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 372,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3820:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 377,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 375,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 368,
                        "src": "3851:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 374,
                      "name": "apply_bond",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 345,
                      "src": "3840:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) returns (uint256)"
                      }
                    },
                    "id": 376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3840:16:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3820:36:2"
                },
                {
                  "assignments": [
                    379
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 379,
                      "mutability": "mutable",
                      "name": "initial_state",
                      "nodeType": "VariableDeclaration",
                      "scope": 411,
                      "src": "3949:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 378,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3949:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 386,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 384,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 368,
                        "src": "4025:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 380,
                          "name": "logic_contract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 116,
                          "src": "3973:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                            "typeString": "contract Optimistic_Roll_In_Compatible"
                          }
                        },
                        "id": 381,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "initialize_state",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46,
                        "src": "3973:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_address_$returns$_t_bytes32_$",
                          "typeString": "function (address) payable external returns (bytes32)"
                        }
                      },
                      "id": 383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "id": 382,
                          "name": "remainder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 373,
                          "src": "4013:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "3973:51:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_address_$returns$_t_bytes32_$value",
                        "typeString": "function (address) payable external returns (bytes32)"
                      }
                    },
                    "id": 385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3973:57:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3949:81:2"
                },
                {
                  "expression": {
                    "id": 404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 387,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "4160:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 389,
                      "indexExpression": {
                        "id": 388,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 368,
                        "src": "4175:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4160:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 395,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4218:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 394,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4210:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 393,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4210:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 396,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4210:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 397,
                              "name": "initial_state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 379,
                              "src": "4222:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 400,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4245:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 399,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4237:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 398,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4237:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 401,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4237:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 391,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "4193:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 392,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "4193:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4193:55:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 390,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "4183:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4183:66:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4160:89:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 405,
                  "nodeType": "ExpressionStatement",
                  "src": "4160:89:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 407,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 368,
                        "src": "4275:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 408,
                        "name": "initial_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 379,
                        "src": "4281:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 406,
                      "name": "ORI_New_State",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 72,
                      "src": "4261:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,bytes32)"
                      }
                    },
                    "id": 409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4261:34:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 410,
                  "nodeType": "EmitStatement",
                  "src": "4256:39:2"
                }
              ]
            },
            "functionSelector": "8129fc1c",
            "id": 412,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 363,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "3771:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "3771:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 365,
                "modifierName": {
                  "id": 362,
                  "name": "not_initialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 200,
                  "src": "3755:15:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3755:27:2"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 361,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3735:2:2"
            },
            "returnParameters": {
              "id": 366,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3783:0:2"
            },
            "scope": 1655,
            "src": "3716:584:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 453,
              "nodeType": "Block",
              "src": "4455:170:2",
              "statements": [
                {
                  "assignments": [
                    422
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 422,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 453,
                      "src": "4461:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 421,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4461:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 425,
                  "initialValue": {
                    "expression": {
                      "id": 423,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "4476:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "4476:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4461:25:2"
                },
                {
                  "assignments": [
                    427
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 427,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 453,
                      "src": "4492:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 426,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4492:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 431,
                  "initialValue": {
                    "baseExpression": {
                      "id": 428,
                      "name": "balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 128,
                      "src": "4509:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 430,
                    "indexExpression": {
                      "id": 429,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 422,
                      "src": "4518:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4509:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4492:31:2"
                },
                {
                  "expression": {
                    "id": 436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 432,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "4529:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 434,
                      "indexExpression": {
                        "id": 433,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 422,
                        "src": "4538:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4529:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 435,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4546:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4529:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 437,
                  "nodeType": "ExpressionStatement",
                  "src": "4529:18:2"
                },
                {
                  "expression": {
                    "id": 445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 438,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "4553:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 440,
                      "indexExpression": {
                        "id": 439,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 422,
                        "src": "4568:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4553:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 443,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4584:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 442,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4576:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": {
                          "id": 441,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4576:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 444,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4576:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4553:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 446,
                  "nodeType": "ExpressionStatement",
                  "src": "4553:33:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 450,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 427,
                        "src": "4613:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 447,
                        "name": "destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 414,
                        "src": "4592:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "src": "4592:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4592:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 452,
                  "nodeType": "ExpressionStatement",
                  "src": "4592:28:2"
                }
              ]
            },
            "functionSelector": "e4da61ab",
            "id": 454,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 417,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "4443:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "4443:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 419,
                "modifierName": {
                  "id": 416,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "4432:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4432:22:2"
              }
            ],
            "name": "unbond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 415,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 414,
                  "mutability": "mutable",
                  "name": "destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 454,
                  "src": "4394:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 413,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4394:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4393:29:2"
            },
            "returnParameters": {
              "id": 420,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4455:0:2"
            },
            "scope": 1655,
            "src": "4378:247:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 515,
              "nodeType": "Block",
              "src": "4804:407:2",
              "statements": [
                {
                  "assignments": [
                    464
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 464,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 515,
                      "src": "4810:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 463,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4810:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 467,
                  "initialValue": {
                    "expression": {
                      "id": 465,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "4825:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "4825:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4810:25:2"
                },
                {
                  "assignments": [
                    469
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 469,
                      "mutability": "mutable",
                      "name": "account_exists",
                      "nodeType": "VariableDeclaration",
                      "scope": 515,
                      "src": "4841:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 468,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4841:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 478,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 470,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "4863:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 472,
                      "indexExpression": {
                        "id": 471,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 464,
                        "src": "4878:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4863:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 475,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4895:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4887:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": {
                          "id": 473,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4887:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4887:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4863:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4841:56:2"
                },
                {
                  "assignments": [
                    480
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 480,
                      "mutability": "mutable",
                      "name": "account_balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 515,
                      "src": "4903:23:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 479,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4903:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 484,
                  "initialValue": {
                    "baseExpression": {
                      "id": 481,
                      "name": "balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 128,
                      "src": "4929:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 483,
                    "indexExpression": {
                      "id": 482,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 464,
                      "src": "4938:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4929:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4903:40:2"
                },
                {
                  "assignments": [
                    486
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 486,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 515,
                      "src": "4949:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 485,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4949:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 493,
                  "initialValue": {
                    "condition": {
                      "id": 487,
                      "name": "account_exists",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 469,
                      "src": "4966:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "id": 491,
                      "name": "account_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 480,
                      "src": "5017:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "4966:66:2",
                    "trueExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 488,
                        "name": "account_balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 480,
                        "src": "4983:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "id": 489,
                        "name": "required_bond",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 120,
                        "src": "5001:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4983:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4949:83:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 497,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 495,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 486,
                          "src": "5074:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 496,
                          "name": "account_balance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 480,
                          "src": "5084:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5074:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e45585045435445445f554e444552464c4f57",
                        "id": 498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5101:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b449114c092032f95ab19cd2ef16cc3b95ca6c1503334a20acfd3d332b8a351",
                          "typeString": "literal_string \"UNEXPECTED_UNDERFLOW\""
                        },
                        "value": "UNEXPECTED_UNDERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b449114c092032f95ab19cd2ef16cc3b95ca6c1503334a20acfd3d332b8a351",
                          "typeString": "literal_string \"UNEXPECTED_UNDERFLOW\""
                        }
                      ],
                      "id": 494,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5066:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5066:58:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 500,
                  "nodeType": "ExpressionStatement",
                  "src": "5066:58:2"
                },
                {
                  "expression": {
                    "id": 507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 501,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "5131:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 503,
                      "indexExpression": {
                        "id": 502,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 464,
                        "src": "5140:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5131:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 504,
                        "name": "account_balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 480,
                        "src": "5148:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "id": 505,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 486,
                        "src": "5166:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5148:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5131:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 508,
                  "nodeType": "ExpressionStatement",
                  "src": "5131:41:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 512,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 486,
                        "src": "5199:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 509,
                        "name": "destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 456,
                        "src": "5178:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "src": "5178:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5178:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 514,
                  "nodeType": "ExpressionStatement",
                  "src": "5178:28:2"
                }
              ]
            },
            "functionSelector": "51cff8d9",
            "id": 516,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 459,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "4792:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "4792:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 461,
                "modifierName": {
                  "id": 458,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "4781:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4781:22:2"
              }
            ],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 456,
                  "mutability": "mutable",
                  "name": "destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 516,
                  "src": "4743:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 455,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4743:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4742:29:2"
            },
            "returnParameters": {
              "id": 462,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4804:0:2"
            },
            "scope": 1655,
            "src": "4725:486:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 601,
              "nodeType": "Block",
              "src": "5496:739:2",
              "statements": [
                {
                  "assignments": [
                    535
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 535,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 601,
                      "src": "5502:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 534,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5502:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 538,
                  "initialValue": {
                    "expression": {
                      "id": 536,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "5517:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 537,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "5517:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5502:25:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 554,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 543,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 520,
                                  "src": "5739:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 544,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 522,
                                  "src": "5755:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 547,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 524,
                                      "src": "5770:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 546,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5762:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 545,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5762:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 548,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5762:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 541,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "5722:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 542,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "5722:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5722:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 540,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "5712:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5712:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 551,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "5786:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 553,
                          "indexExpression": {
                            "id": 552,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 535,
                            "src": "5801:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5786:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "5712:94:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5814:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 539,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5697:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5697:138:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 557,
                  "nodeType": "ExpressionStatement",
                  "src": "5697:138:2"
                },
                {
                  "expression": {
                    "id": 575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 558,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "5936:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 560,
                      "indexExpression": {
                        "id": 559,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 535,
                        "src": "5951:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5936:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 566,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5994:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 565,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5986:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 564,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5986:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 567,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5986:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 568,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 522,
                              "src": "5998:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 571,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6013:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 570,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6005:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 569,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6005:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6005:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 562,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "5969:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 563,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "5969:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5969:47:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 561,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "5959:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5959:58:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "5936:81:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 576,
                  "nodeType": "ExpressionStatement",
                  "src": "5936:81:2"
                },
                {
                  "expression": {
                    "id": 581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 577,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "6110:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 579,
                      "indexExpression": {
                        "id": 578,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 535,
                        "src": "6118:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6110:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 580,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 535,
                      "src": "6126:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6110:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 582,
                  "nodeType": "ExpressionStatement",
                  "src": "6110:20:2"
                },
                {
                  "assignments": [
                    584
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 584,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 601,
                      "src": "6141:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 583,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6141:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 588,
                  "initialValue": {
                    "baseExpression": {
                      "id": 585,
                      "name": "balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 128,
                      "src": "6158:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 587,
                    "indexExpression": {
                      "id": 586,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 535,
                      "src": "6167:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6158:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6141:31:2"
                },
                {
                  "expression": {
                    "id": 593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 589,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "6178:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 591,
                      "indexExpression": {
                        "id": 590,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 535,
                        "src": "6187:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6178:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 592,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6195:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6178:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 594,
                  "nodeType": "ExpressionStatement",
                  "src": "6178:18:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 598,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 584,
                        "src": "6223:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 595,
                        "name": "destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 518,
                        "src": "6202:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "src": "6202:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6202:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 600,
                  "nodeType": "ExpressionStatement",
                  "src": "6202:28:2"
                }
              ]
            },
            "functionSelector": "e6a64799",
            "id": 602,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 527,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "5455:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "5455:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 529,
                "modifierName": {
                  "id": 526,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "5444:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5444:22:2"
              },
              {
                "arguments": [
                  {
                    "id": 531,
                    "name": "last_time",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 524,
                    "src": "5485:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 532,
                "modifierName": {
                  "id": 530,
                  "name": "can_exit_optimism",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 267,
                  "src": "5467:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5467:28:2"
              }
            ],
            "name": "archive",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 518,
                  "mutability": "mutable",
                  "name": "destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 602,
                  "src": "5333:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 517,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5333:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 520,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 602,
                  "src": "5366:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 519,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5366:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 522,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 602,
                  "src": "5394:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 521,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5394:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 524,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 602,
                  "src": "5413:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 523,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5413:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5327:107:2"
            },
            "returnParameters": {
              "id": 533,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5496:0:2"
            },
            "scope": 1655,
            "src": "5311:924:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 632,
              "nodeType": "Block",
              "src": "6376:122:2",
              "statements": [
                {
                  "assignments": [
                    610
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 610,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 632,
                      "src": "6382:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 609,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6382:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 613,
                  "initialValue": {
                    "expression": {
                      "id": 611,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "6397:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "6397:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6382:25:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 619,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 616,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 610,
                              "src": "6433:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 615,
                            "name": "apply_bond",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 345,
                            "src": "6422:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6422:16:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6442:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6422:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f424f4e44",
                        "id": 620,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6445:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        },
                        "value": "INVALID_BOND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        }
                      ],
                      "id": 614,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6414:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6414:46:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 622,
                  "nodeType": "ExpressionStatement",
                  "src": "6414:46:2"
                },
                {
                  "expression": {
                    "id": 630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 623,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "6467:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 625,
                      "indexExpression": {
                        "id": 624,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 610,
                        "src": "6475:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6467:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6491:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 627,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6483:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 626,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6483:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 629,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6483:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "6467:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 631,
                  "nodeType": "ExpressionStatement",
                  "src": "6467:26:2"
                }
              ]
            },
            "functionSelector": "7ad246f8",
            "id": 633,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 605,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "6347:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "6347:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 607,
                "modifierName": {
                  "id": 604,
                  "name": "is_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 236,
                  "src": "6337:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6337:21:2"
              }
            ],
            "name": "unarchive",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 603,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6334:2:2"
            },
            "returnParameters": {
              "id": 608,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6376:0:2"
            },
            "scope": 1655,
            "src": "6316:182:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 676,
              "nodeType": "Block",
              "src": "6721:362:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 644,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 635,
                      "src": "6843:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "id": 647,
                            "name": "call_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 637,
                            "src": "6862:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "id": 649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "6862:13:2",
                          "startExpression": {
                            "hexValue": "34",
                            "id": 648,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6872:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6878:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 650,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6878:7:2",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 652,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6877:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          },
                          {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          }
                        ],
                        "expression": {
                          "id": 645,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "6851:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 646,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "6851:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 653,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6851:36:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "6843:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 657,
                  "nodeType": "IfStatement",
                  "src": "6839:62:2",
                  "trueBody": {
                    "expression": {
                      "hexValue": "66616c7365",
                      "id": 655,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6896:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 643,
                    "id": 656,
                    "nodeType": "Return",
                    "src": "6889:12:2"
                  }
                },
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 669,
                        "nodeType": "Block",
                        "src": "7005:40:2",
                        "statements": [
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 667,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 665,
                                "name": "state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "7020:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 666,
                                "name": "new_state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 639,
                                "src": "7029:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "7020:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "functionReturnParameters": 643,
                            "id": 668,
                            "nodeType": "Return",
                            "src": "7013:25:2"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 670,
                      "nodeType": "TryCatchClause",
                      "parameters": {
                        "id": 664,
                        "nodeType": "ParameterList",
                        "parameters": [
                          {
                            "constant": false,
                            "id": 663,
                            "mutability": "mutable",
                            "name": "state",
                            "nodeType": "VariableDeclaration",
                            "scope": 670,
                            "src": "6990:13:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 662,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "6990:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "src": "6989:15:2"
                      },
                      "src": "6981:64:2"
                    },
                    {
                      "block": {
                        "id": 673,
                        "nodeType": "Block",
                        "src": "7052:27:2",
                        "statements": [
                          {
                            "expression": {
                              "hexValue": "66616c7365",
                              "id": 671,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7067:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            "functionReturnParameters": 643,
                            "id": 672,
                            "nodeType": "Return",
                            "src": "7060:12:2"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 674,
                      "nodeType": "TryCatchClause",
                      "src": "7046:33:2"
                    }
                  ],
                  "externalCall": {
                    "arguments": [
                      {
                        "id": 660,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 637,
                        "src": "6970:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "id": 658,
                        "name": "logic_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 116,
                        "src": "6939:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                          "typeString": "contract Optimistic_Roll_In_Compatible"
                        }
                      },
                      "id": 659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "optimistic_call",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53,
                      "src": "6939:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) view external returns (bytes32)"
                      }
                    },
                    "id": 661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6939:41:2",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 675,
                  "nodeType": "TryStatement",
                  "src": "6935:144:2"
                }
              ]
            },
            "id": 677,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verify_transition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 640,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 635,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 677,
                  "src": "6622:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 634,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6622:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 637,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 677,
                  "src": "6640:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 636,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6640:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 639,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 677,
                  "src": "6670:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 638,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6670:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6616:75:2"
            },
            "returnParameters": {
              "id": 643,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 642,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 677,
                  "src": "6715:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 641,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6715:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6714:6:2"
            },
            "scope": 1655,
            "src": "6590:493:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 771,
              "nodeType": "Block",
              "src": "7296:1065:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 702,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 692,
                          "name": "caller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 679,
                          "src": "7424:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 695,
                                "name": "call_data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 681,
                                "src": "7445:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexRangeAccess",
                              "src": "7445:13:2",
                              "startExpression": {
                                "hexValue": "34",
                                "id": 696,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7455:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                "typeString": "bytes calldata slice"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 699,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7461:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 698,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7461:7:2",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "id": 700,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "7460:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                "typeString": "bytes calldata slice"
                              },
                              {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              }
                            ],
                            "expression": {
                              "id": 693,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "7434:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 694,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "7434:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 701,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7434:36:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7424:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "43414c4c45525f555345525f4d49534d41544348",
                        "id": 703,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7472:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e9472d2f4adc85e67d1fbddf9a34ced8c121cb448f0981625858678913ce21d6",
                          "typeString": "literal_string \"CALLER_USER_MISMATCH\""
                        },
                        "value": "CALLER_USER_MISMATCH"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e9472d2f4adc85e67d1fbddf9a34ced8c121cb448f0981625858678913ce21d6",
                          "typeString": "literal_string \"CALLER_USER_MISMATCH\""
                        }
                      ],
                      "id": 691,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7416:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7416:79:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 705,
                  "nodeType": "ExpressionStatement",
                  "src": "7416:79:2"
                },
                {
                  "assignments": [
                    707
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 707,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "scope": 771,
                      "src": "7601:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 706,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7601:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 717,
                  "initialValue": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 710,
                          "name": "call_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 681,
                          "src": "7628:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 712,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexRangeAccess",
                        "src": "7628:14:2",
                        "startExpression": {
                          "hexValue": "3336",
                          "id": 711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7638:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_36_by_1",
                            "typeString": "int_const 36"
                          },
                          "value": "36"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 714,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7645:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 713,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "7645:7:2",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 715,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "7644:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        },
                        {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      ],
                      "expression": {
                        "id": 708,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "7617:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "7617:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7617:37:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7601:53:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 722,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 683,
                                  "src": "7878:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 723,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 707,
                                  "src": "7894:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 726,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 685,
                                      "src": "7909:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 725,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7901:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 724,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7901:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 727,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7901:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 720,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "7861:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 721,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "7861:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 728,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7861:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 719,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "7851:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7851:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 730,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "7925:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 732,
                          "indexExpression": {
                            "id": 731,
                            "name": "caller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 679,
                            "src": "7940:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7925:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "7851:96:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 734,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7955:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 718,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7836:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7836:140:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 736,
                  "nodeType": "ExpressionStatement",
                  "src": "7836:140:2"
                },
                {
                  "expression": {
                    "id": 745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 737,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 707,
                      "src": "8053:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 743,
                          "name": "call_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 681,
                          "src": "8113:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "id": 738,
                            "name": "logic_contract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 116,
                            "src": "8061:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                              "typeString": "contract Optimistic_Roll_In_Compatible"
                            }
                          },
                          "id": 739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pessimistic_call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 60,
                          "src": "8061:31:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_payable$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) payable external returns (bytes32)"
                          }
                        },
                        "id": 742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "names": [
                          "value"
                        ],
                        "nodeType": "FunctionCallOptions",
                        "options": [
                          {
                            "expression": {
                              "id": 740,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "8101:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "8101:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "src": "8061:51:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_bytes_memory_ptr_$returns$_t_bytes32_$value",
                          "typeString": "function (bytes memory) payable external returns (bytes32)"
                        }
                      },
                      "id": 744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8061:62:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "8053:70:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 746,
                  "nodeType": "ExpressionStatement",
                  "src": "8053:70:2"
                },
                {
                  "expression": {
                    "id": 764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 747,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "8233:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 749,
                      "indexExpression": {
                        "id": 748,
                        "name": "caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 679,
                        "src": "8248:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8233:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 755,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8293:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 754,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8285:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 753,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8285:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8285:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 757,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 707,
                              "src": "8297:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 760,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8312:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 759,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8304:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 758,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8304:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 761,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8304:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 751,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "8268:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "8268:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 762,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8268:47:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 750,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "8258:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 763,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8258:58:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "8233:83:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 765,
                  "nodeType": "ExpressionStatement",
                  "src": "8233:83:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 767,
                        "name": "caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 679,
                        "src": "8342:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 768,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 707,
                        "src": "8350:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 766,
                      "name": "ORI_New_State",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 72,
                      "src": "8328:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,bytes32)"
                      }
                    },
                    "id": 769,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8328:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 770,
                  "nodeType": "EmitStatement",
                  "src": "8323:33:2"
                }
              ]
            },
            "id": 772,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 688,
                    "name": "caller",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 679,
                    "src": "7288:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 689,
                "modifierName": {
                  "id": 687,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "7277:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7277:18:2"
              }
            ],
            "name": "normal_perform",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 679,
                  "mutability": "mutable",
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 772,
                  "src": "7168:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 678,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7168:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 681,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 772,
                  "src": "7188:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 680,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7188:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 683,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 772,
                  "src": "7218:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 682,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7218:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 685,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 772,
                  "src": "7246:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 684,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7246:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7162:105:2"
            },
            "returnParameters": {
              "id": 690,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7296:0:2"
            },
            "scope": 1655,
            "src": "7139:1222:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 788,
              "nodeType": "Block",
              "src": "8517:63:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 778,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "8538:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 779,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "8538:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 780,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 774,
                        "src": "8550:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 783,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8569:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8561:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 781,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "8561:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 784,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8561:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 785,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8573:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 777,
                      "name": "normal_perform",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 772,
                      "src": "8523:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata,bytes32,uint256)"
                      }
                    },
                    "id": 786,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8523:52:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 787,
                  "nodeType": "ExpressionStatement",
                  "src": "8523:52:2"
                }
              ]
            },
            "functionSelector": "bb6ae2cb",
            "id": 789,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "perform",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 775,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 774,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 789,
                  "src": "8474:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 773,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8474:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8473:26:2"
            },
            "returnParameters": {
              "id": 776,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8517:0:2"
            },
            "scope": 1655,
            "src": "8457:123:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 813,
              "nodeType": "Block",
              "src": "8888:75:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 806,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "8909:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 807,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "8909:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 808,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 791,
                        "src": "8921:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 809,
                        "name": "call_data_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 793,
                        "src": "8932:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 810,
                        "name": "last_time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 795,
                        "src": "8948:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 805,
                      "name": "normal_perform",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 772,
                      "src": "8894:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata,bytes32,uint256)"
                      }
                    },
                    "id": 811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8894:64:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 812,
                  "nodeType": "ExpressionStatement",
                  "src": "8894:64:2"
                }
              ]
            },
            "functionSelector": "2a415454",
            "id": 814,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 798,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "8847:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "8847:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 800,
                "modifierName": {
                  "id": 797,
                  "name": "no_rollback_required",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 251,
                  "src": "8826:20:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8826:32:2"
              },
              {
                "arguments": [
                  {
                    "id": 802,
                    "name": "last_time",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 795,
                    "src": "8877:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 803,
                "modifierName": {
                  "id": 801,
                  "name": "can_exit_optimism",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 267,
                  "src": "8859:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8859:28:2"
              }
            ],
            "name": "perform_and_exit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 791,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 814,
                  "src": "8729:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 790,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8729:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 793,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 814,
                  "src": "8759:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 792,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8759:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 795,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 814,
                  "src": "8787:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8787:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8723:85:2"
            },
            "returnParameters": {
              "id": 804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8888:0:2"
            },
            "scope": 1655,
            "src": "8698:265:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 896,
              "nodeType": "Block",
              "src": "9240:900:2",
              "statements": [
                {
                  "assignments": [
                    834
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 834,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "scope": 896,
                      "src": "9335:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 833,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9335:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 844,
                  "initialValue": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 837,
                          "name": "call_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 818,
                          "src": "9362:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexRangeAccess",
                        "src": "9362:14:2",
                        "startExpression": {
                          "hexValue": "3336",
                          "id": 838,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9372:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_36_by_1",
                            "typeString": "int_const 36"
                          },
                          "value": "36"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 841,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9379:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 840,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "9379:7:2",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 842,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "9378:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        },
                        {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      ],
                      "expression": {
                        "id": 835,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "9351:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 836,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "9351:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9351:37:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9335:53:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 860,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 849,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 822,
                                  "src": "9600:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 850,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 834,
                                  "src": "9616:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 853,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 827,
                                      "src": "9631:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 852,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "9623:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 851,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "9623:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 854,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9623:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 847,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "9583:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 848,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "9583:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 855,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9583:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 846,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "9573:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9573:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 857,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "9647:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 859,
                          "indexExpression": {
                            "id": 858,
                            "name": "caller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 816,
                            "src": "9662:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9647:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "9573:96:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 861,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9677:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 845,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9558:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9558:140:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 863,
                  "nodeType": "ExpressionStatement",
                  "src": "9558:140:2"
                },
                {
                  "expression": {
                    "id": 871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 864,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 834,
                      "src": "9805:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 867,
                          "name": "call_data_root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 822,
                          "src": "9854:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 868,
                          "name": "call_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 818,
                          "src": "9870:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "id": 869,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 825,
                          "src": "9881:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          }
                        ],
                        "expression": {
                          "id": 865,
                          "name": "Internal_Merkle_Library",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12016,
                          "src": "9813:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                            "typeString": "type(library Internal_Merkle_Library)"
                          }
                        },
                        "id": 866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "try_append_one_c",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8765,
                        "src": "9813:40:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes calldata,bytes32[] calldata) pure returns (bytes32)"
                        }
                      },
                      "id": 870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9813:74:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9805:82:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 872,
                  "nodeType": "ExpressionStatement",
                  "src": "9805:82:2"
                },
                {
                  "expression": {
                    "id": 888,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 873,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "9978:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 875,
                      "indexExpression": {
                        "id": 874,
                        "name": "caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 816,
                        "src": "9993:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9978:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 879,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 834,
                              "src": "10030:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 880,
                              "name": "new_state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 820,
                              "src": "10037:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 883,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "10056:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 884,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "10056:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 882,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10048:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 881,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10048:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10048:24:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 877,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "10013:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 878,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "10013:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 886,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10013:60:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 876,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "10003:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10003:71:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9978:96:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 889,
                  "nodeType": "ExpressionStatement",
                  "src": "9978:96:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 891,
                        "name": "caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 816,
                        "src": "10111:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 892,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "10119:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 893,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "10119:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 890,
                      "name": "ORI_New_Optimistic_State",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 78,
                      "src": "10086:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10086:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 895,
                  "nodeType": "EmitStatement",
                  "src": "10081:54:2"
                }
              ]
            },
            "id": 897,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 830,
                    "name": "caller",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 816,
                    "src": "9232:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 831,
                "modifierName": {
                  "id": 829,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "9221:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9221:18:2"
              }
            ],
            "name": "optimistic_perform",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 828,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 816,
                  "mutability": "mutable",
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9059:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 815,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9059:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 818,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9079:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 817,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9079:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 820,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9109:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 819,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9109:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 822,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9132:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 821,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9132:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 825,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9160:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 823,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9160:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 824,
                    "nodeType": "ArrayTypeName",
                    "src": "9160:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 827,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 897,
                  "src": "9190:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 826,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9190:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9053:158:2"
            },
            "returnParameters": {
              "id": 832,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9240:0:2"
            },
            "scope": 1655,
            "src": "9026:1114:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 920,
              "nodeType": "Block",
              "src": "10409:85:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 908,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10434:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "10434:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 910,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 899,
                        "src": "10446:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 911,
                        "name": "new_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 901,
                        "src": "10457:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10476:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10468:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 912,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "10468:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 915,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10468:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 916,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "10480:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 917,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10487:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 907,
                      "name": "optimistic_perform",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 897,
                      "src": "10415:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata,bytes32,bytes32,bytes32[] calldata,uint256)"
                      }
                    },
                    "id": 918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10415:74:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 919,
                  "nodeType": "ExpressionStatement",
                  "src": "10415:74:2"
                }
              ]
            },
            "functionSelector": "177f15c5",
            "id": 921,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "perform_optimistically_and_enter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 899,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 921,
                  "src": "10318:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 898,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10318:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 901,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 921,
                  "src": "10348:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 900,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10348:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 904,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 921,
                  "src": "10371:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 902,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "10371:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 903,
                    "nodeType": "ArrayTypeName",
                    "src": "10371:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10312:87:2"
            },
            "returnParameters": {
              "id": 906,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10409:0:2"
            },
            "scope": 1655,
            "src": "10271:223:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 945,
              "nodeType": "Block",
              "src": "10784:97:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 936,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10809:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 937,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "10809:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 938,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 923,
                        "src": "10821:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 939,
                        "name": "new_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 925,
                        "src": "10832:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 940,
                        "name": "call_data_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 927,
                        "src": "10843:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 941,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 930,
                        "src": "10859:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      },
                      {
                        "id": 942,
                        "name": "last_time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 932,
                        "src": "10866:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 935,
                      "name": "optimistic_perform",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 897,
                      "src": "10790:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata,bytes32,bytes32,bytes32[] calldata,uint256)"
                      }
                    },
                    "id": 943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10790:86:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 944,
                  "nodeType": "ExpressionStatement",
                  "src": "10790:86:2"
                }
              ]
            },
            "functionSelector": "1646d051",
            "id": 946,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "perform_optimistically",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 923,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 946,
                  "src": "10642:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 922,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10642:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 925,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 946,
                  "src": "10672:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 924,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10672:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 927,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 946,
                  "src": "10695:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 926,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10695:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 930,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 946,
                  "src": "10723:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 928,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "10723:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 929,
                    "nodeType": "ArrayTypeName",
                    "src": "10723:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 932,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 946,
                  "src": "10753:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 931,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10753:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10636:138:2"
            },
            "returnParameters": {
              "id": 934,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10784:0:2"
            },
            "scope": 1655,
            "src": "10605:276:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1034,
              "nodeType": "Block",
              "src": "11198:864:2",
              "statements": [
                {
                  "assignments": [
                    970
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 970,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "scope": 1034,
                      "src": "11299:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 969,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11299:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 982,
                  "initialValue": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 973,
                            "name": "call_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 951,
                            "src": "11326:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 975,
                          "indexExpression": {
                            "hexValue": "30",
                            "id": 974,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11336:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "11326:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexRangeAccess",
                        "src": "11326:17:2",
                        "startExpression": {
                          "hexValue": "3336",
                          "id": 976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11339:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_36_by_1",
                            "typeString": "int_const 36"
                          },
                          "value": "36"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 979,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11346:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 978,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "11346:7:2",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 980,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "11345:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        },
                        {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        }
                      ],
                      "expression": {
                        "id": 971,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "11315:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 972,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "11315:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11315:40:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11299:56:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 987,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 955,
                                  "src": "11501:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 988,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 970,
                                  "src": "11517:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 991,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 960,
                                      "src": "11532:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 990,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "11524:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 989,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "11524:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 992,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11524:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 985,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "11484:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 986,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "11484:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 993,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11484:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 984,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "11474:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 994,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11474:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 995,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "11548:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 997,
                          "indexExpression": {
                            "id": 996,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 948,
                            "src": "11563:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "11548:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "11474:94:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11576:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 983,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11459:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11459:138:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1001,
                  "nodeType": "ExpressionStatement",
                  "src": "11459:138:2"
                },
                {
                  "expression": {
                    "id": 1009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1002,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 970,
                      "src": "11727:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1005,
                          "name": "call_data_root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 955,
                          "src": "11777:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 1006,
                          "name": "call_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 951,
                          "src": "11793:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "bytes calldata[] calldata"
                          }
                        },
                        {
                          "id": 1007,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 958,
                          "src": "11804:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "bytes calldata[] calldata"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          }
                        ],
                        "expression": {
                          "id": 1003,
                          "name": "Internal_Merkle_Library",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12016,
                          "src": "11735:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                            "typeString": "type(library Internal_Merkle_Library)"
                          }
                        },
                        "id": 1004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "try_append_many_c",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9044,
                        "src": "11735:41:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes calldata[] calldata,bytes32[] calldata) pure returns (bytes32)"
                        }
                      },
                      "id": 1008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11735:75:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "11727:83:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1010,
                  "nodeType": "ExpressionStatement",
                  "src": "11727:83:2"
                },
                {
                  "expression": {
                    "id": 1026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1011,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "11903:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 1013,
                      "indexExpression": {
                        "id": 1012,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 948,
                        "src": "11918:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11903:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 1017,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 970,
                              "src": "11953:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1018,
                              "name": "new_state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 953,
                              "src": "11960:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 1021,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "11979:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 1022,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "11979:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1020,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11971:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1019,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11971:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1023,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11971:24:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 1015,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "11936:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 1016,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "11936:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 1024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11936:60:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1014,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "11926:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 1025,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11926:71:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "11903:94:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1027,
                  "nodeType": "ExpressionStatement",
                  "src": "11903:94:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1029,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 948,
                        "src": "12035:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 1030,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "12041:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "12041:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1028,
                      "name": "ORI_New_Optimistic_States",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 84,
                      "src": "12009:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 1032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12009:48:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1033,
                  "nodeType": "EmitStatement",
                  "src": "12004:53:2"
                }
              ]
            },
            "id": 1035,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 963,
                    "name": "user",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 948,
                    "src": "11161:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 964,
                "modifierName": {
                  "id": 962,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "11150:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11150:16:2"
              },
              {
                "arguments": [
                  {
                    "id": 966,
                    "name": "call_data",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 951,
                    "src": "11187:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                      "typeString": "bytes calldata[] calldata"
                    }
                  }
                ],
                "id": 967,
                "modifierName": {
                  "id": 965,
                  "name": "sufficient_calldata",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 282,
                  "src": "11167:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$",
                    "typeString": "modifier (bytes calldata[] calldata)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11167:30:2"
              }
            ],
            "name": "optimistic_perform_many",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 961,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 948,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "10988:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10988:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 951,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "11006:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 949,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "11006:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 950,
                    "nodeType": "ArrayTypeName",
                    "src": "11006:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 953,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "11038:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 952,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11038:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 955,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "11061:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 954,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11061:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 958,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "11089:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 956,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11089:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 957,
                    "nodeType": "ArrayTypeName",
                    "src": "11089:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 960,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1035,
                  "src": "11119:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 959,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11119:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10982:158:2"
            },
            "returnParameters": {
              "id": 968,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11198:0:2"
            },
            "scope": 1655,
            "src": "10950:1112:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1059,
              "nodeType": "Block",
              "src": "12346:90:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1047,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "12376:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1048,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "12376:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 1049,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1038,
                        "src": "12388:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        }
                      },
                      {
                        "id": 1050,
                        "name": "new_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1040,
                        "src": "12399:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1053,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12418:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1052,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12410:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 1051,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "12410:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1054,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12410:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 1055,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1043,
                        "src": "12422:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 1056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12429:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 1046,
                      "name": "optimistic_perform_many",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1035,
                      "src": "12352:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata[] calldata,bytes32,bytes32,bytes32[] calldata,uint256)"
                      }
                    },
                    "id": 1057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12352:79:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1058,
                  "nodeType": "ExpressionStatement",
                  "src": "12352:79:2"
                }
              ]
            },
            "functionSelector": "08542bb1",
            "id": 1060,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "perform_many_optimistically_and_enter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1038,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1060,
                  "src": "12253:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1036,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "12253:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 1037,
                    "nodeType": "ArrayTypeName",
                    "src": "12253:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1040,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1060,
                  "src": "12285:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1039,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12285:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1043,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1060,
                  "src": "12308:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1041,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "12308:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1042,
                    "nodeType": "ArrayTypeName",
                    "src": "12308:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12247:89:2"
            },
            "returnParameters": {
              "id": 1045,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12346:0:2"
            },
            "scope": 1655,
            "src": "12201:235:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1085,
              "nodeType": "Block",
              "src": "12741:102:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1076,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "12771:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "12771:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 1078,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1063,
                        "src": "12783:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        }
                      },
                      {
                        "id": 1079,
                        "name": "new_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1065,
                        "src": "12794:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 1080,
                        "name": "call_data_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1067,
                        "src": "12805:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 1081,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1070,
                        "src": "12821:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      },
                      {
                        "id": 1082,
                        "name": "last_time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1072,
                        "src": "12828:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1075,
                      "name": "optimistic_perform_many",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1035,
                      "src": "12747:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes calldata[] calldata,bytes32,bytes32,bytes32[] calldata,uint256)"
                      }
                    },
                    "id": 1083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12747:91:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1084,
                  "nodeType": "ExpressionStatement",
                  "src": "12747:91:2"
                }
              ]
            },
            "functionSelector": "6a8dddef",
            "id": 1086,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "perform_many_optimistically",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1063,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "12597:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1061,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "12597:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 1062,
                    "nodeType": "ArrayTypeName",
                    "src": "12597:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1065,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "12629:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1064,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12629:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1067,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "12652:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1066,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12652:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1070,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "12680:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1068,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "12680:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1069,
                    "nodeType": "ArrayTypeName",
                    "src": "12680:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1072,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "12710:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1071,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12710:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12591:140:2"
            },
            "returnParameters": {
              "id": 1074,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12741:0:2"
            },
            "scope": 1655,
            "src": "12555:288:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1143,
              "nodeType": "Block",
              "src": "13116:445:2",
              "statements": [
                {
                  "assignments": [
                    1099
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1099,
                      "mutability": "mutable",
                      "name": "accuser",
                      "nodeType": "VariableDeclaration",
                      "scope": 1143,
                      "src": "13122:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1098,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "13122:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1102,
                  "initialValue": {
                    "expression": {
                      "id": 1100,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "13140:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 1101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "13140:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13122:28:2"
                },
                {
                  "expression": {
                    "id": 1107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1103,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "13202:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1105,
                      "indexExpression": {
                        "id": 1104,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1088,
                        "src": "13210:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13202:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1106,
                      "name": "accuser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1099,
                      "src": "13221:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13202:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1108,
                  "nodeType": "ExpressionStatement",
                  "src": "13202:26:2"
                },
                {
                  "expression": {
                    "id": 1114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1109,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "13234:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1111,
                      "indexExpression": {
                        "id": 1110,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1088,
                        "src": "13252:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13234:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 1112,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "13263:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 1113,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "13263:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13234:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1115,
                  "nodeType": "ExpressionStatement",
                  "src": "13234:44:2"
                },
                {
                  "expression": {
                    "id": 1120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1116,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "13284:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1118,
                      "indexExpression": {
                        "id": 1117,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1099,
                        "src": "13292:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13284:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1119,
                      "name": "accuser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1099,
                      "src": "13303:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13284:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1121,
                  "nodeType": "ExpressionStatement",
                  "src": "13284:26:2"
                },
                {
                  "expression": {
                    "id": 1127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1122,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "13316:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1124,
                      "indexExpression": {
                        "id": 1123,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1099,
                        "src": "13334:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13316:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 1125,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "13345:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 1126,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "13345:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13316:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1128,
                  "nodeType": "ExpressionStatement",
                  "src": "13316:44:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 1131,
                              "name": "accuser",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1099,
                              "src": "13486:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1130,
                            "name": "apply_bond",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 345,
                            "src": "13475:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 1132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13475:19:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13498:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "13475:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f424f4e44",
                        "id": 1135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13501:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        },
                        "value": "INVALID_BOND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        }
                      ],
                      "id": 1129,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13467:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13467:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1137,
                  "nodeType": "ExpressionStatement",
                  "src": "13467:49:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1139,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1088,
                        "src": "13539:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1140,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1099,
                        "src": "13548:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1138,
                      "name": "ORI_Locked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 90,
                      "src": "13528:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 1141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13528:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1142,
                  "nodeType": "EmitStatement",
                  "src": "13523:33:2"
                }
              ]
            },
            "functionSelector": "f435f5a7",
            "id": 1144,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 1091,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "13084:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 1092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "13084:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 1093,
                "modifierName": {
                  "id": 1090,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "13073:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13073:22:2"
              },
              {
                "arguments": [
                  {
                    "id": 1095,
                    "name": "suspect",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1088,
                    "src": "13107:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1096,
                "modifierName": {
                  "id": 1094,
                  "name": "not_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 218,
                  "src": "13096:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13096:19:2"
              }
            ],
            "name": "lock",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1088,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 1144,
                  "src": "13039:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1087,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13039:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13038:17:2"
            },
            "returnParameters": {
              "id": 1097,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13116:0:2"
            },
            "scope": 1655,
            "src": "13025:536:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1273,
              "nodeType": "Block",
              "src": "13800:1276:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 1179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1168,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1150,
                                  "src": "13945:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 1169,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1148,
                                  "src": "13961:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 1172,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1152,
                                      "src": "13976:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1171,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "13968:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 1170,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "13968:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1173,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "13968:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 1166,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "13928:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 1167,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "13928:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 1174,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13928:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1165,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "13918:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13918:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 1176,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "13992:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 1178,
                          "indexExpression": {
                            "id": 1177,
                            "name": "suspect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1146,
                            "src": "14007:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "13992:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "13918:97:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 1180,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14023:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 1164,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13903:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13903:141:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1182,
                  "nodeType": "ExpressionStatement",
                  "src": "13903:141:2"
                },
                {
                  "assignments": [
                    1184
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1184,
                      "mutability": "mutable",
                      "name": "accuser",
                      "nodeType": "VariableDeclaration",
                      "scope": 1273,
                      "src": "14079:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1183,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "14079:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1188,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1185,
                      "name": "lockers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 132,
                      "src": "14097:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 1187,
                    "indexExpression": {
                      "id": 1186,
                      "name": "suspect",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1146,
                      "src": "14105:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14097:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14079:34:2"
                },
                {
                  "expression": {
                    "id": 1196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1189,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "14119:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1191,
                      "indexExpression": {
                        "id": 1190,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "14127:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14119:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 1194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14146:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1193,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14138:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1192,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14138:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1195,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14138:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "14119:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1197,
                  "nodeType": "ExpressionStatement",
                  "src": "14119:29:2"
                },
                {
                  "expression": {
                    "id": 1202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1198,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "14154:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1200,
                      "indexExpression": {
                        "id": 1199,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "14172:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14154:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14183:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14154:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1203,
                  "nodeType": "ExpressionStatement",
                  "src": "14154:30:2"
                },
                {
                  "expression": {
                    "id": 1211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1204,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "14190:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1206,
                      "indexExpression": {
                        "id": 1205,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1184,
                        "src": "14198:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14190:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 1209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14217:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14209:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1207,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14209:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14209:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "14190:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1212,
                  "nodeType": "ExpressionStatement",
                  "src": "14190:29:2"
                },
                {
                  "expression": {
                    "id": 1217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1213,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "14225:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1215,
                      "indexExpression": {
                        "id": 1214,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1184,
                        "src": "14243:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14225:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1216,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14254:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14225:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1218,
                  "nodeType": "ExpressionStatement",
                  "src": "14225:30:2"
                },
                {
                  "assignments": [
                    1220
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1220,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 1273,
                      "src": "14440:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1219,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14440:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1224,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1221,
                      "name": "balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 128,
                      "src": "14457:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1223,
                    "indexExpression": {
                      "id": 1222,
                      "name": "accuser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1184,
                      "src": "14466:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14457:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14440:34:2"
                },
                {
                  "expression": {
                    "id": 1229,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1225,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "14480:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1227,
                      "indexExpression": {
                        "id": 1226,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1184,
                        "src": "14489:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14480:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1228,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14500:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14480:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1230,
                  "nodeType": "ExpressionStatement",
                  "src": "14480:21:2"
                },
                {
                  "expression": {
                    "id": 1235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1231,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "14507:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1233,
                      "indexExpression": {
                        "id": 1232,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "14516:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14507:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 1234,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1220,
                      "src": "14528:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14507:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1236,
                  "nodeType": "ExpressionStatement",
                  "src": "14507:27:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1237,
                      "name": "last_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1152,
                      "src": "14624:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14637:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14624:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1248,
                  "nodeType": "IfStatement",
                  "src": "14620:87:2",
                  "trueBody": {
                    "id": 1247,
                    "nodeType": "Block",
                    "src": "14640:67:2",
                    "statements": [
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1241,
                              "name": "suspect",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1146,
                              "src": "14666:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1242,
                              "name": "accuser",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1184,
                              "src": "14675:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 1243,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14684:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1240,
                            "name": "ORI_Unlocked",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 98,
                            "src": "14653:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14653:33:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1245,
                        "nodeType": "EmitStatement",
                        "src": "14648:38:2"
                      },
                      {
                        "functionReturnParameters": 1163,
                        "id": 1246,
                        "nodeType": "Return",
                        "src": "14694:7:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 1264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1249,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "14910:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 1251,
                      "indexExpression": {
                        "id": 1250,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "14925:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14910:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 1255,
                              "name": "call_data_root",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1150,
                              "src": "14963:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1256,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1148,
                              "src": "14979:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 1259,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "14994:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 1260,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "14994:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1258,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14986:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1257,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14986:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1261,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14986:24:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 1253,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "14946:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 1254,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "14946:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 1262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14946:65:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1252,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "14936:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 1263,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14936:76:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "14910:102:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1265,
                  "nodeType": "ExpressionStatement",
                  "src": "14910:102:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1267,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "15037:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1268,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1184,
                        "src": "15046:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 1269,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "15055:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "15055:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1266,
                      "name": "ORI_Unlocked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 98,
                      "src": "15024:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15024:47:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1272,
                  "nodeType": "EmitStatement",
                  "src": "15019:52:2"
                }
              ]
            },
            "functionSelector": "8ee16d13",
            "id": 1274,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 1155,
                    "name": "suspect",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1146,
                    "src": "13739:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1156,
                "modifierName": {
                  "id": 1154,
                  "name": "is_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 236,
                  "src": "13729:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13729:18:2"
              },
              {
                "arguments": [
                  {
                    "id": 1158,
                    "name": "suspect",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1146,
                    "src": "13761:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1159,
                "modifierName": {
                  "id": 1157,
                  "name": "lock_expired",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 300,
                  "src": "13748:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13748:21:2"
              },
              {
                "arguments": [
                  {
                    "id": 1161,
                    "name": "suspect",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1146,
                    "src": "13791:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1162,
                "modifierName": {
                  "id": 1160,
                  "name": "no_rollback_required",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 251,
                  "src": "13770:20:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13770:29:2"
              }
            ],
            "name": "unlock",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1153,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1146,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 1274,
                  "src": "13630:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1145,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13630:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1148,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1274,
                  "src": "13651:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1147,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13651:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1150,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1274,
                  "src": "13670:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1149,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13670:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1152,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1274,
                  "src": "13698:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1151,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13698:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13624:95:2"
            },
            "returnParameters": {
              "id": 1163,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13800:0:2"
            },
            "scope": 1655,
            "src": "13609:1467:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1482,
              "nodeType": "Block",
              "src": "15405:2454:2",
              "statements": [
                {
                  "assignments": [
                    1295
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1295,
                      "mutability": "mutable",
                      "name": "accuser",
                      "nodeType": "VariableDeclaration",
                      "scope": 1482,
                      "src": "15411:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1294,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "15411:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1298,
                  "initialValue": {
                    "expression": {
                      "id": 1296,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "15429:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 1297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "15429:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15411:28:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1304,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 1300,
                            "name": "lockers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "15523:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 1302,
                          "indexExpression": {
                            "id": 1301,
                            "name": "suspect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1276,
                            "src": "15531:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "15523:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 1303,
                          "name": "accuser",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1295,
                          "src": "15543:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "15523:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4e4f545f4c4f434b4552",
                        "id": 1305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15552:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_09408156ba11532b86afbd369ce6b6d13495c1833ce415228722cff371a6667a",
                          "typeString": "literal_string \"NOT_LOCKER\""
                        },
                        "value": "NOT_LOCKER"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_09408156ba11532b86afbd369ce6b6d13495c1833ce415228722cff371a6667a",
                          "typeString": "literal_string \"NOT_LOCKER\""
                        }
                      ],
                      "id": 1299,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15515:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15515:50:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1307,
                  "nodeType": "ExpressionStatement",
                  "src": "15515:50:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 1323,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1312,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1283,
                                  "src": "15711:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 1313,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1281,
                                  "src": "15727:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 1316,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1288,
                                      "src": "15742:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1315,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15734:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 1314,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "15734:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1317,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15734:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 1310,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "15694:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 1311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "15694:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 1318,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15694:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1309,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "15684:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15684:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 1320,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "15758:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 1322,
                          "indexExpression": {
                            "id": 1321,
                            "name": "suspect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1276,
                            "src": "15773:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "15758:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "15684:97:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 1324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15789:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 1308,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15669:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1325,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15669:141:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1326,
                  "nodeType": "ExpressionStatement",
                  "src": "15669:141:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1330,
                            "name": "call_data_root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1283,
                            "src": "15904:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 1331,
                            "name": "call_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1279,
                            "src": "15920:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          {
                            "id": 1332,
                            "name": "proof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1286,
                            "src": "15931:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                              "typeString": "bytes32[] calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                              "typeString": "bytes32[] calldata"
                            }
                          ],
                          "expression": {
                            "id": 1328,
                            "name": "Internal_Merkle_Library",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12016,
                            "src": "15863:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                              "typeString": "type(library Internal_Merkle_Library)"
                            }
                          },
                          "id": 1329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "elements_exist_c",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7987,
                          "src": "15863:40:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes calldata[] calldata,bytes32[] calldata) pure returns (bool)"
                          }
                        },
                        "id": 1333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15863:74:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f43414c4c44415441",
                        "id": 1334,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15939:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_215ab9ed5ef5204c0b078038fc53ccc3354c9ce0951b366c01a50f8f928b6507",
                          "typeString": "literal_string \"INVALID_CALLDATA\""
                        },
                        "value": "INVALID_CALLDATA"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_215ab9ed5ef5204c0b078038fc53ccc3354c9ce0951b366c01a50f8f928b6507",
                          "typeString": "literal_string \"INVALID_CALLDATA\""
                        }
                      ],
                      "id": 1327,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15855:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15855:103:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1336,
                  "nodeType": "ExpressionStatement",
                  "src": "15855:103:2"
                },
                {
                  "assignments": [
                    1341
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1341,
                      "mutability": "mutable",
                      "name": "call_data_indices",
                      "nodeType": "VariableDeclaration",
                      "scope": 1482,
                      "src": "16026:34:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1339,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16026:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1340,
                        "nodeType": "ArrayTypeName",
                        "src": "16026:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1347,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1344,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1279,
                        "src": "16099:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        }
                      },
                      {
                        "id": 1345,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1286,
                        "src": "16110:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      ],
                      "expression": {
                        "id": 1342,
                        "name": "Internal_Merkle_Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12016,
                        "src": "16063:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                          "typeString": "type(library Internal_Merkle_Library)"
                        }
                      },
                      "id": 1343,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "get_indices",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8092,
                      "src": "16063:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (bytes calldata[] calldata,bytes32[] calldata) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16063:53:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16026:90:2"
                },
                {
                  "assignments": [
                    1349
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1349,
                      "mutability": "mutable",
                      "name": "transition_index",
                      "nodeType": "VariableDeclaration",
                      "scope": 1482,
                      "src": "16209:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1348,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16209:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1353,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1350,
                      "name": "call_data_indices",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1341,
                      "src": "16236:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "id": 1352,
                    "indexExpression": {
                      "hexValue": "30",
                      "id": 1351,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16254:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16236:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16209:47:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1354,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1279,
                        "src": "16365:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        }
                      },
                      "id": 1355,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "16365:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 1356,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16385:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "16365:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1423,
                    "nodeType": "Block",
                    "src": "16705:433:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1393,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1389,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1387,
                                  "name": "transition_index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1349,
                                  "src": "16776:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 1388,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16795:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "16776:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "baseExpression": {
                                  "id": 1390,
                                  "name": "call_data_indices",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1341,
                                  "src": "16800:17:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 1392,
                                "indexExpression": {
                                  "hexValue": "31",
                                  "id": 1391,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16818:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "16800:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16776:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1386,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "16768:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16768:53:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1395,
                        "nodeType": "ExpressionStatement",
                        "src": "16768:53:2"
                      },
                      {
                        "expression": {
                          "id": 1408,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1396,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1281,
                            "src": "16941:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 1399,
                                    "name": "call_data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1279,
                                    "src": "16960:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                      "typeString": "bytes calldata[] calldata"
                                    }
                                  },
                                  "id": 1401,
                                  "indexExpression": {
                                    "hexValue": "31",
                                    "id": 1400,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16970:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "16960:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  }
                                },
                                "id": 1403,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexRangeAccess",
                                "src": "16960:17:2",
                                "startExpression": {
                                  "hexValue": "3336",
                                  "id": 1402,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16973:2:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_36_by_1",
                                    "typeString": "int_const 36"
                                  },
                                  "value": "36"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                  "typeString": "bytes calldata slice"
                                }
                              },
                              {
                                "components": [
                                  {
                                    "id": 1405,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "16980:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 1404,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "16980:7:2",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "id": 1406,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "16979:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                  "typeString": "bytes calldata slice"
                                },
                                {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                }
                              ],
                              "expression": {
                                "id": 1397,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -1,
                                "src": "16949:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 1398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "decode",
                              "nodeType": "MemberAccess",
                              "src": "16949:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1407,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16949:40:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "16941:48:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1409,
                        "nodeType": "ExpressionStatement",
                        "src": "16941:48:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1419,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 1412,
                                    "name": "suspect",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1276,
                                    "src": "17072:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 1413,
                                      "name": "call_data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1279,
                                      "src": "17081:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                        "typeString": "bytes calldata[] calldata"
                                      }
                                    },
                                    "id": 1415,
                                    "indexExpression": {
                                      "hexValue": "30",
                                      "id": 1414,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "17091:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "17081:12:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  },
                                  {
                                    "id": 1416,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1281,
                                    "src": "17095:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 1411,
                                  "name": "verify_transition",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 677,
                                  "src": "17054:17:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$returns$_t_bool_$",
                                    "typeString": "function (address,bytes calldata,bytes32) view returns (bool)"
                                  }
                                },
                                "id": 1417,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17054:47:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "66616c7365",
                                "id": 1418,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17105:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "src": "17054:56:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "56414c49445f5452414e534954494f4e",
                              "id": 1420,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "17112:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_404769adf8d26bf2a8d6c04c4b34b3b5af22abb581709cbcfc0a448ab9a51428",
                                "typeString": "literal_string \"VALID_TRANSITION\""
                              },
                              "value": "VALID_TRANSITION"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_404769adf8d26bf2a8d6c04c4b34b3b5af22abb581709cbcfc0a448ab9a51428",
                                "typeString": "literal_string \"VALID_TRANSITION\""
                              }
                            ],
                            "id": 1410,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "17046:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17046:85:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1422,
                        "nodeType": "ExpressionStatement",
                        "src": "17046:85:2"
                      }
                    ]
                  },
                  "id": 1424,
                  "nodeType": "IfStatement",
                  "src": "16361:777:2",
                  "trueBody": {
                    "id": 1385,
                    "nodeType": "Block",
                    "src": "16388:311:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1361,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1359,
                                  "name": "transition_index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1349,
                                  "src": "16486:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 1360,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16505:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "16486:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 1364,
                                      "name": "proof",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1286,
                                      "src": "16518:5:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                        "typeString": "bytes32[] calldata"
                                      }
                                    },
                                    "id": 1366,
                                    "indexExpression": {
                                      "hexValue": "30",
                                      "id": 1365,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "16524:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "16518:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 1363,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "16510:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 1362,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16510:7:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16510:17:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16486:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "494e434f52524543545f43414c4c44415441",
                              "id": 1369,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16529:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_38010cb9e4e379eba95db333cad0bad5245b6dab781c70ead72769075aa77f91",
                                "typeString": "literal_string \"INCORRECT_CALLDATA\""
                              },
                              "value": "INCORRECT_CALLDATA"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_38010cb9e4e379eba95db333cad0bad5245b6dab781c70ead72769075aa77f91",
                                "typeString": "literal_string \"INCORRECT_CALLDATA\""
                              }
                            ],
                            "id": 1358,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "16478:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16478:72:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1371,
                        "nodeType": "ExpressionStatement",
                        "src": "16478:72:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1381,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 1374,
                                    "name": "suspect",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1276,
                                    "src": "16633:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 1375,
                                      "name": "call_data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1279,
                                      "src": "16642:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                        "typeString": "bytes calldata[] calldata"
                                      }
                                    },
                                    "id": 1377,
                                    "indexExpression": {
                                      "hexValue": "30",
                                      "id": 1376,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "16652:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "16642:12:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  },
                                  {
                                    "id": 1378,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1281,
                                    "src": "16656:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 1373,
                                  "name": "verify_transition",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 677,
                                  "src": "16615:17:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_calldata_ptr_$_t_bytes32_$returns$_t_bool_$",
                                    "typeString": "function (address,bytes calldata,bytes32) view returns (bool)"
                                  }
                                },
                                "id": 1379,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16615:47:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "66616c7365",
                                "id": 1380,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16666:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "src": "16615:56:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "56414c49445f5452414e534954494f4e",
                              "id": 1382,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16673:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_404769adf8d26bf2a8d6c04c4b34b3b5af22abb581709cbcfc0a448ab9a51428",
                                "typeString": "literal_string \"VALID_TRANSITION\""
                              },
                              "value": "VALID_TRANSITION"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_404769adf8d26bf2a8d6c04c4b34b3b5af22abb581709cbcfc0a448ab9a51428",
                                "typeString": "literal_string \"VALID_TRANSITION\""
                              }
                            ],
                            "id": 1372,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "16607:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16607:85:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1384,
                        "nodeType": "ExpressionStatement",
                        "src": "16607:85:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 1429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1425,
                      "name": "last_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1288,
                      "src": "17301:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 1426,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "17313:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1428,
                      "indexExpression": {
                        "id": 1427,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17322:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "17313:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17301:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1430,
                  "nodeType": "ExpressionStatement",
                  "src": "17301:29:2"
                },
                {
                  "expression": {
                    "id": 1435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1431,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "17336:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1433,
                      "indexExpression": {
                        "id": 1432,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17345:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17336:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17356:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "17336:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1436,
                  "nodeType": "ExpressionStatement",
                  "src": "17336:21:2"
                },
                {
                  "expression": {
                    "id": 1441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1437,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "17363:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1439,
                      "indexExpression": {
                        "id": 1438,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1295,
                        "src": "17372:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17363:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 1440,
                      "name": "last_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1288,
                      "src": "17384:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17363:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1442,
                  "nodeType": "ExpressionStatement",
                  "src": "17363:30:2"
                },
                {
                  "expression": {
                    "id": 1450,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1443,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "17436:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1445,
                      "indexExpression": {
                        "id": 1444,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1295,
                        "src": "17444:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17436:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 1448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17463:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1447,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "17455:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1446,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "17455:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17455:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "17436:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1451,
                  "nodeType": "ExpressionStatement",
                  "src": "17436:29:2"
                },
                {
                  "expression": {
                    "id": 1456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1452,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "17471:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1454,
                      "indexExpression": {
                        "id": 1453,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1295,
                        "src": "17489:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17471:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1455,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17500:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "17471:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1457,
                  "nodeType": "ExpressionStatement",
                  "src": "17471:30:2"
                },
                {
                  "expression": {
                    "id": 1462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1458,
                        "name": "rollback_sizes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 140,
                        "src": "17617:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1460,
                      "indexExpression": {
                        "id": 1459,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17632:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17617:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1461,
                      "name": "transition_index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1349,
                      "src": "17643:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17617:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1463,
                  "nodeType": "ExpressionStatement",
                  "src": "17617:42:2"
                },
                {
                  "expression": {
                    "id": 1468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1464,
                        "name": "lockers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 132,
                        "src": "17728:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 1466,
                      "indexExpression": {
                        "id": 1465,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17736:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17728:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1467,
                      "name": "suspect",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1276,
                      "src": "17747:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "17728:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1469,
                  "nodeType": "ExpressionStatement",
                  "src": "17728:26:2"
                },
                {
                  "expression": {
                    "id": 1474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1470,
                        "name": "locked_timestamps",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 136,
                        "src": "17760:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1472,
                      "indexExpression": {
                        "id": 1471,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17778:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17760:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1473,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17789:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "17760:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1475,
                  "nodeType": "ExpressionStatement",
                  "src": "17760:30:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1477,
                        "name": "accuser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1295,
                        "src": "17819:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1478,
                        "name": "suspect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1276,
                        "src": "17828:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1479,
                        "name": "transition_index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1349,
                        "src": "17837:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1476,
                      "name": "ORI_Fraud_Proven",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 106,
                      "src": "17802:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17802:52:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1481,
                  "nodeType": "EmitStatement",
                  "src": "17797:57:2"
                }
              ]
            },
            "functionSelector": "a68f5913",
            "id": 1483,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 1291,
                    "name": "suspect",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1276,
                    "src": "15396:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1292,
                "modifierName": {
                  "id": 1290,
                  "name": "is_locked",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 236,
                  "src": "15386:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15386:18:2"
              }
            ],
            "name": "prove_fraud",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1276,
                  "mutability": "mutable",
                  "name": "suspect",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15225:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1275,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15225:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1279,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15246:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1277,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "15246:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 1278,
                    "nodeType": "ArrayTypeName",
                    "src": "15246:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1281,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15278:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1280,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15278:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1283,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15297:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1282,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15297:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1286,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15325:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1284,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "15325:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1285,
                    "nodeType": "ArrayTypeName",
                    "src": "15325:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1288,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1483,
                  "src": "15355:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1287,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15355:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15219:157:2"
            },
            "returnParameters": {
              "id": 1293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15405:0:2"
            },
            "scope": 1655,
            "src": "15199:2660:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1653,
              "nodeType": "Block",
              "src": "18269:2090:2",
              "statements": [
                {
                  "assignments": [
                    1505
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1505,
                      "mutability": "mutable",
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 1653,
                      "src": "18275:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1504,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "18275:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1508,
                  "initialValue": {
                    "expression": {
                      "id": 1506,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "18290:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 1507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "18290:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18275:25:2"
                },
                {
                  "assignments": [
                    1510
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1510,
                      "mutability": "mutable",
                      "name": "expected_size",
                      "nodeType": "VariableDeclaration",
                      "scope": 1653,
                      "src": "18306:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1509,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18306:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1514,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1511,
                      "name": "rollback_sizes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 140,
                      "src": "18330:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1513,
                    "indexExpression": {
                      "id": 1512,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1505,
                      "src": "18345:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18330:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18306:44:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1516,
                          "name": "expected_size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1510,
                          "src": "18364:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18381:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "18364:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "524f4c4c4241434b5f554e4e4543455353415259",
                        "id": 1519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18384:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7475ac284e86e08ce776bbe1320019693ab8c3a2aa62a3b51988d29374752a3c",
                          "typeString": "literal_string \"ROLLBACK_UNNECESSARY\""
                        },
                        "value": "ROLLBACK_UNNECESSARY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7475ac284e86e08ce776bbe1320019693ab8c3a2aa62a3b51988d29374752a3c",
                          "typeString": "literal_string \"ROLLBACK_UNNECESSARY\""
                        }
                      ],
                      "id": 1515,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18356:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18356:51:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1521,
                  "nodeType": "ExpressionStatement",
                  "src": "18356:51:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 1537,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1526,
                                  "name": "call_data_root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1497,
                                  "src": "18553:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 1527,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1499,
                                  "src": "18569:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 1530,
                                      "name": "last_time",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1501,
                                      "src": "18584:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1529,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "18576:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 1528,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "18576:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1531,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "18576:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 1524,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "18536:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 1525,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "18536:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 1532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18536:59:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1523,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "18526:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18526:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 1534,
                            "name": "account_states",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "18600:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 1536,
                          "indexExpression": {
                            "id": 1535,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1505,
                            "src": "18615:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18600:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "18526:94:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4f5453",
                        "id": 1538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18628:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        },
                        "value": "INVALID_ROOTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_538f0b63318653451c386e5bd8d7fbe481938f7eb86bde7cd7826ef2bc21014c",
                          "typeString": "literal_string \"INVALID_ROOTS\""
                        }
                      ],
                      "id": 1522,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18511:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18511:138:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1540,
                  "nodeType": "ExpressionStatement",
                  "src": "18511:138:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1544,
                            "name": "call_data_root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1497,
                            "src": "18777:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 1545,
                            "name": "current_size",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1493,
                            "src": "18793:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 1546,
                            "name": "current_size_proof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1495,
                            "src": "18807:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 1542,
                            "name": "Internal_Merkle_Library",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12016,
                            "src": "18741:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                              "typeString": "type(library Internal_Merkle_Library)"
                            }
                          },
                          "id": 1543,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "verify_size",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8193,
                          "src": "18741:35:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (bytes32,uint256,bytes32) pure returns (bool)"
                          }
                        },
                        "id": 1547,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18741:85:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f53495a45",
                        "id": 1548,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18828:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5b0326815c949ba02e79cc00c9c705f4cc5fe5d094c066aa12411c3fe67689a1",
                          "typeString": "literal_string \"INVALID_SIZE\""
                        },
                        "value": "INVALID_SIZE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5b0326815c949ba02e79cc00c9c705f4cc5fe5d094c066aa12411c3fe67689a1",
                          "typeString": "literal_string \"INVALID_SIZE\""
                        }
                      ],
                      "id": 1541,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18733:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18733:110:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1550,
                  "nodeType": "ExpressionStatement",
                  "src": "18733:110:2"
                },
                {
                  "assignments": [
                    1552
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1552,
                      "mutability": "mutable",
                      "name": "rolled_back_size",
                      "nodeType": "VariableDeclaration",
                      "scope": 1653,
                      "src": "18966:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1551,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18966:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1559,
                  "initialValue": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 1555,
                          "name": "roll_back_proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1491,
                          "src": "19001:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          }
                        },
                        "id": 1557,
                        "indexExpression": {
                          "hexValue": "30",
                          "id": 1556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19017:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19001:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 1554,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18993:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 1553,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18993:7:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 1558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18993:27:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18966:54:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1563,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1561,
                          "name": "rolled_back_size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1552,
                          "src": "19034:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "id": 1562,
                          "name": "current_size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1493,
                          "src": "19053:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "19034:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f524f4c4c4241434b",
                        "id": 1564,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19067:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1a4c145c2ce98330adf0740358f2a74d3800d628516fa14ab01326ce1b58d576",
                          "typeString": "literal_string \"INSUFFICIENT_ROLLBACK\""
                        },
                        "value": "INSUFFICIENT_ROLLBACK"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1a4c145c2ce98330adf0740358f2a74d3800d628516fa14ab01326ce1b58d576",
                          "typeString": "literal_string \"INSUFFICIENT_ROLLBACK\""
                        }
                      ],
                      "id": 1560,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19026:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1565,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19026:65:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1566,
                  "nodeType": "ExpressionStatement",
                  "src": "19026:65:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1570,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1568,
                          "name": "rolled_back_size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1552,
                          "src": "19165:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 1569,
                          "name": "expected_size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1510,
                          "src": "19185:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "19165:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "524f4c4c4241434b5f544f4f5f44454550",
                        "id": 1571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19200:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_88c7125d9fc860b0f2c82ce8e25fceae4ba76f43ecee84a3aa6e61dead5544c2",
                          "typeString": "literal_string \"ROLLBACK_TOO_DEEP\""
                        },
                        "value": "ROLLBACK_TOO_DEEP"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_88c7125d9fc860b0f2c82ce8e25fceae4ba76f43ecee84a3aa6e61dead5544c2",
                          "typeString": "literal_string \"ROLLBACK_TOO_DEEP\""
                        }
                      ],
                      "id": 1567,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19157:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19157:63:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1573,
                  "nodeType": "ExpressionStatement",
                  "src": "19157:63:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 1582,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 1577,
                              "name": "rolled_back_call_data_root",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1485,
                              "src": "19413:26:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1578,
                              "name": "rolled_back_call_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1488,
                              "src": "19441:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "bytes calldata[] calldata"
                              }
                            },
                            {
                              "id": 1579,
                              "name": "roll_back_proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1491,
                              "src": "19464:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "bytes calldata[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              }
                            ],
                            "expression": {
                              "id": 1575,
                              "name": "Internal_Merkle_Library",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12016,
                              "src": "19371:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Internal_Merkle_Library_$12016_$",
                                "typeString": "type(library Internal_Merkle_Library)"
                              }
                            },
                            "id": 1576,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "try_append_many_c",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9044,
                            "src": "19371:41:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32,bytes calldata[] calldata,bytes32[] calldata) pure returns (bytes32)"
                            }
                          },
                          "id": 1580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19371:109:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 1581,
                          "name": "call_data_root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1497,
                          "src": "19492:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "19371:135:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f524f4c4c4241434b",
                        "id": 1583,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19514:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4df44981ed843032dcd66739e9d9ca9b39714bc67038b45850ddccb94cfaeeb",
                          "typeString": "literal_string \"INVALID_ROLLBACK\""
                        },
                        "value": "INVALID_ROLLBACK"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4df44981ed843032dcd66739e9d9ca9b39714bc67038b45850ddccb94cfaeeb",
                          "typeString": "literal_string \"INVALID_ROLLBACK\""
                        }
                      ],
                      "id": 1574,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19356:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19356:182:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1585,
                  "nodeType": "ExpressionStatement",
                  "src": "19356:182:2"
                },
                {
                  "expression": {
                    "id": 1598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1586,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1499,
                      "src": "19665:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 1589,
                              "name": "rolled_back_call_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1488,
                              "src": "19684:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "bytes calldata[] calldata"
                              }
                            },
                            "id": 1591,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 1590,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19706:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "19684:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "id": 1593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "19684:29:2",
                          "startExpression": {
                            "hexValue": "3336",
                            "id": 1592,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19709:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_36_by_1",
                              "typeString": "int_const 36"
                            },
                            "value": "36"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 1595,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19716:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1594,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "19716:7:2",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 1596,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "19715:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          },
                          {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        ],
                        "expression": {
                          "id": 1587,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "19673:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 1588,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "19673:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 1597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19673:52:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "19665:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1599,
                  "nodeType": "ExpressionStatement",
                  "src": "19665:60:2"
                },
                {
                  "expression": {
                    "id": 1615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1600,
                        "name": "account_states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "19830:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 1602,
                      "indexExpression": {
                        "id": 1601,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1505,
                        "src": "19845:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "19830:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 1606,
                              "name": "rolled_back_call_data_root",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1485,
                              "src": "19880:26:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1607,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1499,
                              "src": "19908:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 1610,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "19923:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 1611,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "19923:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1609,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "19915:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1608,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "19915:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1612,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19915:24:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 1604,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "19863:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 1605,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "19863:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 1613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19863:77:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1603,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "19853:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 1614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19853:88:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "19830:111:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1616,
                  "nodeType": "ExpressionStatement",
                  "src": "19830:111:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1617,
                      "name": "rolled_back_size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1552,
                      "src": "20029:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 1618,
                      "name": "expected_size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1510,
                      "src": "20049:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20029:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1636,
                  "nodeType": "IfStatement",
                  "src": "20025:112:2",
                  "trueBody": {
                    "id": 1635,
                    "nodeType": "Block",
                    "src": "20064:73:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 1627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1620,
                              "name": "lockers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 132,
                              "src": "20072:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 1622,
                            "indexExpression": {
                              "id": 1621,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1505,
                              "src": "20080:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "20072:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1625,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "20096:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1624,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "20088:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1623,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "20088:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20088:10:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "20072:26:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1628,
                        "nodeType": "ExpressionStatement",
                        "src": "20072:26:2"
                      },
                      {
                        "expression": {
                          "id": 1633,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1629,
                              "name": "rollback_sizes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 140,
                              "src": "20106:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1631,
                            "indexExpression": {
                              "id": 1630,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1505,
                              "src": "20121:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "20106:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 1632,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20129:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "20106:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1634,
                        "nodeType": "ExpressionStatement",
                        "src": "20106:24:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1642,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 1639,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1505,
                              "src": "20259:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1638,
                            "name": "apply_bond",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 345,
                            "src": "20248:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 1640,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20248:16:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20268:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "20248:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f424f4e44",
                        "id": 1643,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20271:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        },
                        "value": "INVALID_BOND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ee6b1aa183b2a044fe7cfdc4ae4dfe56692b8539d347de0158866ab434c3ed91",
                          "typeString": "literal_string \"INVALID_BOND\""
                        }
                      ],
                      "id": 1637,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "20240:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20240:46:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1645,
                  "nodeType": "ExpressionStatement",
                  "src": "20240:46:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1647,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1505,
                        "src": "20314:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1648,
                        "name": "rolled_back_size",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1552,
                        "src": "20320:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 1649,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "20338:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "20338:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1646,
                      "name": "ORI_Rolled_Back",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 114,
                      "src": "20298:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 1651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20298:56:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1652,
                  "nodeType": "EmitStatement",
                  "src": "20293:61:2"
                }
              ]
            },
            "functionSelector": "e1124200",
            "id": 1654,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rollback",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1485,
                  "mutability": "mutable",
                  "name": "rolled_back_call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18001:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1484,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18001:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1488,
                  "mutability": "mutable",
                  "name": "rolled_back_call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18041:38:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1486,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "18041:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 1487,
                    "nodeType": "ArrayTypeName",
                    "src": "18041:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1491,
                  "mutability": "mutable",
                  "name": "roll_back_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18085:34:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1489,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "18085:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1490,
                    "nodeType": "ArrayTypeName",
                    "src": "18085:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1493,
                  "mutability": "mutable",
                  "name": "current_size",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18125:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1492,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18125:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1495,
                  "mutability": "mutable",
                  "name": "current_size_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18151:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1494,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18151:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1497,
                  "mutability": "mutable",
                  "name": "call_data_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18183:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1496,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18183:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1499,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18211:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1498,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18211:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1501,
                  "mutability": "mutable",
                  "name": "last_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1654,
                  "src": "18230:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1500,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18230:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17995:256:2"
            },
            "returnParameters": {
              "id": 1503,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18269:0:2"
            },
            "scope": 1655,
            "src": "17978:2381:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 1656,
        "src": "540:19821:2"
      }
    ],
    "src": "33:20329:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.3+commit.9bfce1f6.Emscripten.clang"
  },
  "networks": {
    "5777": {
      "events": {
        "0x55469cdf3fd81a478fed2a1491832e3d145bf2ab3c6a6fbb187022b3885b90fd": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "accuser",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "suspect",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "transition_index",
              "type": "uint256"
            }
          ],
          "name": "ORI_Fraud_Proven",
          "type": "event"
        },
        "0x8773bde6581ad6ddd421210de867340039fb65ce3df41edba7b5de6d24ae7a51": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "suspect",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "accuser",
              "type": "address"
            }
          ],
          "name": "ORI_Locked",
          "type": "event"
        },
        "0x4779c4b07abff82b16061ec9a47d081e7f4981c29088395cdb7ff87e322cbbc6": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "block_time",
              "type": "uint256"
            }
          ],
          "name": "ORI_New_Optimistic_State",
          "type": "event"
        },
        "0x0b87b136840d19f5f25329273082c00833265a189b70137e06df6315ddc7839e": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "block_time",
              "type": "uint256"
            }
          ],
          "name": "ORI_New_Optimistic_States",
          "type": "event"
        },
        "0x0f5025cc4f20aa47a346d1b7d9da6ba8c68cc8e83b75e813da4b4490d55365ae": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "new_state",
              "type": "bytes32"
            }
          ],
          "name": "ORI_New_State",
          "type": "event"
        },
        "0x4d7ed8c49e6b03daee23a18f4bd14bd7e4628e5ed54c57bf84407a693867eca9": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "tree_size",
              "type": "uint256"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "block_time",
              "type": "uint256"
            }
          ],
          "name": "ORI_Rolled_Back",
          "type": "event"
        },
        "0xd896484469c47833eb445d62b95b9dd6b28d0c050a9b7f2ce8902d137316500e": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "suspect",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "accuser",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "block_time",
              "type": "uint256"
            }
          ],
          "name": "ORI_Unlocked",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x1EDd2E676ff881707A9A0d826392F8Db4f150C74",
      "transactionHash": "0x0ef8ca8cd4ad57896fdfab2d1c60e277ea292ef7ad0b742494a18c2c9f34aa5d"
    }
  },
  "schemaVersion": "3.3.2",
  "updatedAt": "2020-12-11T10:00:43.252Z",
  "networkType": "ethereum",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}